diff --git a/src/main/java/com/google/devtools/build/lib/actions/AbstractAction.java b/src/main/java/com/google/devtools/build/lib/actions/AbstractAction.java
index 7ce6b21..3196d70 100644
--- a/src/main/java/com/google/devtools/build/lib/actions/AbstractAction.java
+++ b/src/main/java/com/google/devtools/build/lib/actions/AbstractAction.java
@@ -26,7 +26,6 @@
 import com.google.devtools.build.lib.events.Event;
 import com.google.devtools.build.lib.events.EventHandler;
 import com.google.devtools.build.lib.events.EventKind;
-import com.google.devtools.build.lib.events.Location;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
 import com.google.devtools.build.lib.syntax.Printer;
 import com.google.devtools.build.lib.util.Preconditions;
@@ -123,7 +122,7 @@
       Iterable<Artifact> outputs) {
     Preconditions.checkNotNull(owner);
     // TODO(bazel-team): Use RuleContext.actionOwner here instead
-    this.owner = new ActionOwnerDescription(owner);
+    this.owner = owner;
     this.tools = CollectionUtils.makeImmutable(tools);
     this.inputs = CollectionUtils.makeImmutable(inputs);
     this.outputs = ImmutableSet.copyOf(outputs);
@@ -427,59 +426,4 @@
     return getInputs();
   }
 
-  /**
-   * A copying implementation of {@link ActionOwner}.
-   *
-   * <p>ConfiguredTargets implement ActionOwner themselves, but we do not want actions
-   * to keep direct references to configured targets just for a label and a few strings.
-   */
-  @Immutable
-  private static class ActionOwnerDescription implements ActionOwner {
-
-    private final Location location;
-    private final Label label;
-    private final String configurationMnemonic;
-    private final String configurationChecksum;
-    private final String targetKind;
-    private final String additionalProgressInfo;
-
-    private ActionOwnerDescription(ActionOwner originalOwner) {
-      this.location = originalOwner.getLocation();
-      this.label = originalOwner.getLabel();
-      this.configurationMnemonic = originalOwner.getConfigurationMnemonic();
-      this.configurationChecksum = originalOwner.getConfigurationChecksum();
-      this.targetKind = originalOwner.getTargetKind();
-      this.additionalProgressInfo = originalOwner.getAdditionalProgressInfo();
-    }
-
-    @Override
-    public Location getLocation() {
-      return location;
-    }
-
-    @Override
-    public Label getLabel() {
-      return label;
-    }
-
-    @Override
-    public String getConfigurationMnemonic() {
-      return configurationMnemonic;
-    }
-
-    @Override
-    public String getConfigurationChecksum() {
-      return configurationChecksum;
-    }
-
-    @Override
-    public String getTargetKind() {
-      return targetKind;
-    }
-
-    @Override
-    public String getAdditionalProgressInfo() {
-      return additionalProgressInfo;
-    }
-  }
 }
diff --git a/src/main/java/com/google/devtools/build/lib/actions/AbstractActionOwner.java b/src/main/java/com/google/devtools/build/lib/actions/AbstractActionOwner.java
deleted file mode 100644
index 0acfa52..0000000
--- a/src/main/java/com/google/devtools/build/lib/actions/AbstractActionOwner.java
+++ /dev/null
@@ -1,60 +0,0 @@
-// Copyright 2014 The Bazel Authors. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//    http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package com.google.devtools.build.lib.actions;
-
-import com.google.devtools.build.lib.cmdline.Label;
-import com.google.devtools.build.lib.events.Location;
-
-/**
- * An action owner base class that provides default implementations for some of
- * the {@link ActionOwner} methods.
- */
-public abstract class AbstractActionOwner implements ActionOwner {
-
-  @Override
-  public String getAdditionalProgressInfo() {
-    return null;
-  }
-
-  @Override
-  public Location getLocation() {
-    return null;
-  }
-
-  @Override
-  public Label getLabel() {
-    return null;
-  }
-
-  @Override
-  public String getTargetKind() {
-    return "empty target kind";
-  }
-
-  /**
-   * An action owner for special cases. Usage is strongly discouraged. 
-   */
-  public static final ActionOwner SYSTEM_ACTION_OWNER = new AbstractActionOwner() {
-    @Override
-    public String getConfigurationMnemonic() {
-      return "system";
-    }
-
-    @Override
-    public final String getConfigurationChecksum() {
-      return "system";
-    }
-  };
-}
diff --git a/src/main/java/com/google/devtools/build/lib/actions/ActionOwner.java b/src/main/java/com/google/devtools/build/lib/actions/ActionOwner.java
index b82b025..b0b163e 100644
--- a/src/main/java/com/google/devtools/build/lib/actions/ActionOwner.java
+++ b/src/main/java/com/google/devtools/build/lib/actions/ActionOwner.java
@@ -15,52 +15,86 @@
 
 import com.google.devtools.build.lib.cmdline.Label;
 import com.google.devtools.build.lib.events.Location;
+import com.google.devtools.build.lib.util.Preconditions;
+
+import javax.annotation.Nullable;
 
 /**
- * The owner of an action is responsible for reporting conflicts in the action
- * graph (two actions attempting to generate the same artifact).
+ * Contains metadata used for reporting the progress and status of an action.
  *
- * Typically an action's owner is the RuleConfiguredTarget instance responsible
- * for creating it, but to avoid coupling between the view and actions
- * packages, the RuleConfiguredTarget is hidden behind this interface, which
- * exposes only the error reporting functionality.
+ * <p>Morally an action's owner is the RuleConfiguredTarget instance responsible for creating it,
+ * but to avoid storing heavyweight analysis objects in actions, and to avoid coupling between the
+ * analysis and actions packages, the RuleConfiguredTarget provides an instance of this class.
  */
-public interface ActionOwner {
+public final class ActionOwner {
+  /** An action owner for special cases. Usage is strongly discouraged. */
+  public static final ActionOwner SYSTEM_ACTION_OWNER =
+      new ActionOwner(null, null, "system", "empty target kind", "system", null);
 
-  /**
-   * Returns the location of this ActionOwner, if any; null otherwise.
-   */
-  Location getLocation();
+  @Nullable private final Label label;
+  @Nullable private final Location location;
+  @Nullable private final String mnemonic;
+  @Nullable private final String targetKind;
+  private final String configurationChecksum;
+  @Nullable private final String additionalProgressInfo;
+
+  public ActionOwner(
+      @Nullable Label label,
+      @Nullable Location location,
+      @Nullable String mnemonic,
+      @Nullable String targetKind,
+      String configurationChecksum,
+      @Nullable String additionalProgressInfo) {
+    this.label = label;
+    this.location = location;
+    this.mnemonic = mnemonic;
+    this.targetKind = targetKind;
+    this.configurationChecksum = Preconditions.checkNotNull(configurationChecksum);
+    this.additionalProgressInfo = additionalProgressInfo;
+  }
+
+  /** Returns the location of this ActionOwner, if any; null otherwise. */
+  @Nullable
+  public Location getLocation() {
+    return location;
+  }
 
   /**
    * Returns the label for this ActionOwner, if any; null otherwise.
    */
-  Label getLabel();
+  @Nullable
+  public Label getLabel() {
+    return label;
+  }
 
-  /**
-   * Returns the configuration's mnemonic.
-   */
-  String getConfigurationMnemonic();
+  /** Returns the configuration's mnemonic. */
+  @Nullable
+  public String getConfigurationMnemonic() {
+    return mnemonic;
+  }
 
   /**
    * Returns the short cache key for the configuration of the action owner.
    *
-   * <p>Special action owners that are not targets can return any string here as long as it is
-   * constant. If the configuration is null, this should return "null".
-   *
-   * <p>These requirements exist so that {@link ActionOwner} instances are consistent with
-   * {@code BuildView.ActionOwnerIdentity(ConfiguredTargetValue)}.
+   * <p>Special action owners that are not targets can return any string here. If the
+   * underlying configuration is null, this should return "null".
    */
-  String getConfigurationChecksum();
+  public String getConfigurationChecksum() {
+    return configurationChecksum;
+  }
 
-  /**
-   * Returns the target kind (rule class name) for this ActionOwner, if any; null otherwise.
-   */
-  String getTargetKind();
+  /** Returns the target kind (rule class name) for this ActionOwner, if any; null otherwise. */
+  @Nullable
+  public String getTargetKind() {
+    return targetKind;
+  }
 
   /**
    * Returns additional information that should be displayed in progress messages, or {@code null}
    * if nothing should be added.
    */
-  String getAdditionalProgressInfo();
+  @Nullable
+  String getAdditionalProgressInfo() {
+    return additionalProgressInfo;
+  }
 }
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/BuildInfoHelper.java b/src/main/java/com/google/devtools/build/lib/analysis/BuildInfoHelper.java
deleted file mode 100644
index 3510eb0..0000000
--- a/src/main/java/com/google/devtools/build/lib/analysis/BuildInfoHelper.java
+++ /dev/null
@@ -1,31 +0,0 @@
-// Copyright 2014 The Bazel Authors. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//    http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package com.google.devtools.build.lib.analysis;
-
-import com.google.devtools.build.lib.actions.AbstractActionOwner;
-import com.google.devtools.build.lib.actions.ActionOwner;
-
-// TODO(bazel-team): move BUILD_INFO_ACTION_OWNER somewhere else and remove this class.
-/**
- * Helper class for the CompatibleWriteBuildInfoAction, which holds the
- * methods for generating build information.
- * Abstracted away to allow non-action code to also generate build info under
- * --nobuild or --check_up_to_date.
- */
-public abstract class BuildInfoHelper {
-  /** ActionOwner for BuildInfoActions. */
-  public static final ActionOwner BUILD_INFO_ACTION_OWNER =
-      AbstractActionOwner.SYSTEM_ACTION_OWNER;
-}
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java b/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java
index 1b69685..273d562 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java
@@ -14,6 +14,7 @@
 
 package com.google.devtools.build.lib.analysis;
 
+import com.google.common.annotations.VisibleForTesting;
 import com.google.common.base.Joiner;
 import com.google.common.base.Predicate;
 import com.google.common.base.Predicates;
@@ -130,7 +131,7 @@
     }
   }
 
-  static final String HOST_CONFIGURATION_PROGRESS_TAG = "for host";
+  private static final String HOST_CONFIGURATION_PROGRESS_TAG = "for host";
 
   private final Rule rule;
   private final ListMultimap<String, ConfiguredTarget> targetMap;
@@ -286,7 +287,7 @@
   @Override
   public ActionOwner getActionOwner() {
     if (actionOwner == null) {
-      actionOwner = new RuleActionOwner(rule, getConfiguration());
+      actionOwner = createActionOwner(rule, getConfiguration());
     }
     return actionOwner;
   }
@@ -361,55 +362,15 @@
     return getAnalysisEnvironment().getBuildInfo(this, key);
   }
 
-  // TODO(bazel-team): This class could be simpler if Rule and BuildConfiguration classes
-  // were immutable. Then we would need to store only references those two.
-  @Immutable
-  private static final class RuleActionOwner implements ActionOwner {
-    private final Label label;
-    private final Location location;
-    private final String mnemonic;
-    private final String targetKind;
-    private final String configurationChecksum;
-    private final boolean hostConfiguration;
-
-    private RuleActionOwner(Rule rule, BuildConfiguration configuration) {
-      this.label = rule.getLabel();
-      this.location = rule.getLocation();
-      this.targetKind = rule.getTargetKind();
-      this.mnemonic = configuration.getMnemonic();
-      this.configurationChecksum = configuration.checksum();
-      this.hostConfiguration = configuration.isHostConfiguration();
-    }
-
-    @Override
-    public Location getLocation() {
-      return location;
-    }
-
-    @Override
-    public Label getLabel() {
-      return label;
-    }
-
-    @Override
-    public String getConfigurationMnemonic() {
-      return mnemonic;
-    }
-
-    @Override
-    public String getConfigurationChecksum() {
-      return configurationChecksum;
-    }
-
-    @Override
-    public String getTargetKind() {
-      return targetKind;
-    }
-
-    @Override
-    public String getAdditionalProgressInfo() {
-      return hostConfiguration ? HOST_CONFIGURATION_PROGRESS_TAG : null;
-    }
+  @VisibleForTesting
+  public static ActionOwner createActionOwner(Rule rule, BuildConfiguration configuration) {
+    return new ActionOwner(
+        rule.getLabel(),
+        rule.getLocation(),
+        configuration.getMnemonic(),
+        rule.getTargetKind(),
+        configuration.checksum(),
+        configuration.isHostConfiguration() ? HOST_CONFIGURATION_PROGRESS_TAG : null);
   }
 
   @Override
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/BazelWorkspaceStatusModule.java b/src/main/java/com/google/devtools/build/lib/bazel/BazelWorkspaceStatusModule.java
index c47388b..51b582c 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/BazelWorkspaceStatusModule.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/BazelWorkspaceStatusModule.java
@@ -23,6 +23,7 @@
 import com.google.devtools.build.lib.actions.ActionContextProvider;
 import com.google.devtools.build.lib.actions.ActionExecutionContext;
 import com.google.devtools.build.lib.actions.ActionExecutionException;
+import com.google.devtools.build.lib.actions.ActionOwner;
 import com.google.devtools.build.lib.actions.Artifact;
 import com.google.devtools.build.lib.actions.ArtifactFactory;
 import com.google.devtools.build.lib.actions.ArtifactOwner;
@@ -32,7 +33,6 @@
 import com.google.devtools.build.lib.actions.Root;
 import com.google.devtools.build.lib.actions.SimpleActionContextProvider;
 import com.google.devtools.build.lib.analysis.BuildInfo;
-import com.google.devtools.build.lib.analysis.BuildInfoHelper;
 import com.google.devtools.build.lib.analysis.WorkspaceStatusAction;
 import com.google.devtools.build.lib.analysis.WorkspaceStatusAction.Key;
 import com.google.devtools.build.lib.analysis.WorkspaceStatusAction.KeyType;
@@ -80,7 +80,9 @@
         Path workspace,
         Artifact stableStatus,
         Artifact volatileStatus) {
-      super(BuildInfoHelper.BUILD_INFO_ACTION_OWNER, Artifact.NO_ARTIFACTS,
+      super(
+          ActionOwner.SYSTEM_ACTION_OWNER,
+          Artifact.NO_ARTIFACTS,
           ImmutableList.of(stableStatus, volatileStatus));
       this.options = Preconditions.checkNotNull(options);
       this.stableStatus = stableStatus;
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/WriteBuildInfoHeaderAction.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/WriteBuildInfoHeaderAction.java
index da42dfd..b0151eb 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/WriteBuildInfoHeaderAction.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/WriteBuildInfoHeaderAction.java
@@ -19,8 +19,8 @@
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Iterables;
 import com.google.devtools.build.lib.actions.ActionExecutionContext;
+import com.google.devtools.build.lib.actions.ActionOwner;
 import com.google.devtools.build.lib.actions.Artifact;
-import com.google.devtools.build.lib.analysis.BuildInfoHelper;
 import com.google.devtools.build.lib.analysis.WorkspaceStatusAction;
 import com.google.devtools.build.lib.analysis.actions.AbstractFileWriteAction;
 import com.google.devtools.build.lib.util.Fingerprint;
@@ -64,8 +64,7 @@
    */
   public WriteBuildInfoHeaderAction(Collection<Artifact> inputs,
       Artifact output, boolean writeVolatileInfo, boolean writeStableInfo) {
-    super(BuildInfoHelper.BUILD_INFO_ACTION_OWNER,
-        inputs, output, /*makeExecutable=*/false);
+    super(ActionOwner.SYSTEM_ACTION_OWNER, inputs, output, /*makeExecutable=*/ false);
     valueArtifacts = ImmutableList.copyOf(inputs);
     if (!inputs.isEmpty()) {
       // With non-empty inputs we should not generate both volatile and non-volatile data
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/WriteBuildInfoPropertiesAction.java b/src/main/java/com/google/devtools/build/lib/rules/java/WriteBuildInfoPropertiesAction.java
index a60c322..4439a04 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/WriteBuildInfoPropertiesAction.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/WriteBuildInfoPropertiesAction.java
@@ -19,8 +19,8 @@
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Iterables;
 import com.google.devtools.build.lib.actions.ActionExecutionContext;
+import com.google.devtools.build.lib.actions.ActionOwner;
 import com.google.devtools.build.lib.actions.Artifact;
-import com.google.devtools.build.lib.analysis.BuildInfoHelper;
 import com.google.devtools.build.lib.analysis.WorkspaceStatusAction;
 import com.google.devtools.build.lib.analysis.WorkspaceStatusAction.Key;
 import com.google.devtools.build.lib.analysis.actions.AbstractFileWriteAction;
@@ -126,7 +126,7 @@
   public WriteBuildInfoPropertiesAction(Collection<Artifact> inputs, Artifact output,
       BuildInfoPropertiesTranslator keyTranslations, boolean includeVolatile,
       boolean includeNonVolatile, TimestampFormatter timestampFormatter) {
-    super(BuildInfoHelper.BUILD_INFO_ACTION_OWNER, inputs, output, /* makeExecutable= */false);
+    super(ActionOwner.SYSTEM_ACTION_OWNER, inputs, output, /* makeExecutable= */ false);
     this.keyTranslations = keyTranslations;
     this.includeVolatile = includeVolatile;
     this.includeNonVolatile = includeNonVolatile;
