diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/ninja/actions/NinjaActionsHelper.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/ninja/actions/NinjaActionsHelper.java
index 61a989f..e21afe7 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/ninja/actions/NinjaActionsHelper.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/ninja/actions/NinjaActionsHelper.java
@@ -55,7 +55,7 @@
  */
 public class NinjaActionsHelper {
   private final RuleContext ruleContext;
-  private final ImmutableSortedMap<PathFragment, NinjaTarget> allUsualTargets;
+  private final ImmutableSortedMap<PathFragment, NinjaTarget> targetsMap;
   private final ImmutableSortedMap<PathFragment, PhonyTarget> phonyTargets;
 
   private final NinjaGraphArtifactsHelper artifactsHelper;
@@ -71,7 +71,7 @@
    *
    * @param ruleContext parent NinjaGraphRule rule context
    * @param artifactsHelper helper object to create artifacts
-   * @param allUsualTargets mapping of outputs to all non-phony Ninja targets from Ninja file
+   * @param targetsMap mapping of outputs to all non-phony Ninja targets from Ninja file
    * @param phonyTargets mapping of names to all phony Ninja actions from Ninja file
    * @param phonyTargetArtifacts helper class for computing transitively included artifacts of phony
    *     targets
@@ -80,14 +80,14 @@
   NinjaActionsHelper(
       RuleContext ruleContext,
       NinjaGraphArtifactsHelper artifactsHelper,
-      ImmutableSortedMap<PathFragment, NinjaTarget> allUsualTargets,
+      ImmutableSortedMap<PathFragment, NinjaTarget> targetsMap,
       ImmutableSortedMap<PathFragment, PhonyTarget> phonyTargets,
       PhonyTargetArtifacts phonyTargetArtifacts,
       List<PathFragment> pathsToBuild,
       ImmutableSet<PathFragment> outputRootInputsSymlinks) {
     this.ruleContext = ruleContext;
     this.artifactsHelper = artifactsHelper;
-    this.allUsualTargets = allUsualTargets;
+    this.targetsMap = targetsMap;
     this.phonyTargets = phonyTargets;
     this.shellExecutable = ShToolchain.getPathOrError(ruleContext);
     this.executionInfo = createExecutionInfo(ruleContext);
@@ -113,7 +113,7 @@
         };
     while (!queue.isEmpty()) {
       PathFragment fragment = queue.remove();
-      NinjaTarget target = allUsualTargets.get(fragment);
+      NinjaTarget target = targetsMap.get(fragment);
       if (target != null) {
         // If the output is already created by a symlink action created from specifying that
         // file in output_root_inputs attribute of the ninja_graph rule, do not create other
@@ -150,7 +150,7 @@
         }
       } else {
         PhonyTarget phonyTarget = phonyTargets.get(fragment);
-        // Phony target can be null, if the path in neither usual or phony target,
+        // Phony target can be null, if the path in neither regular or phony target,
         // but the source file.
         if (phonyTarget != null) {
           phonyTarget.visitUsualInputs(phonyTargets, enqueuer::accept);
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/ninja/actions/NinjaBuild.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/ninja/actions/NinjaBuild.java
index 48f753d..7c41d9e 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/ninja/actions/NinjaBuild.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/ninja/actions/NinjaBuild.java
@@ -92,7 +92,7 @@
       new NinjaActionsHelper(
               ruleContext,
               artifactsHelper,
-              graphProvider.getUsualTargets(),
+              graphProvider.getTargetsMap(),
               graphProvider.getPhonyTargetsMap(),
               phonyTargetArtifacts,
               pathsToBuild,
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/ninja/actions/NinjaGraph.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/ninja/actions/NinjaGraph.java
index 72e905d..2bfe9d2 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/ninja/actions/NinjaGraph.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/ninja/actions/NinjaGraph.java
@@ -146,7 +146,7 @@
           new NinjaGraphProvider(
               outputRoot,
               workingDirectory,
-              targetsPreparer.getUsualTargets(),
+              targetsPreparer.getTargetsMap(),
               targetsPreparer.getPhonyTargetsMap(),
               outputRootSymlinksPathFragments,
               outputRootInputsSymlinksPathFragments);
@@ -205,11 +205,11 @@
   }
 
   private static class TargetsPreparer {
-    private ImmutableSortedMap<PathFragment, NinjaTarget> usualTargets;
+    private ImmutableSortedMap<PathFragment, NinjaTarget> targetsMap;
     private ImmutableSortedMap<PathFragment, PhonyTarget> phonyTargetsMap;
 
-    public ImmutableSortedMap<PathFragment, NinjaTarget> getUsualTargets() {
-      return usualTargets;
+    public ImmutableSortedMap<PathFragment, NinjaTarget> getTargetsMap() {
+      return targetsMap;
     }
 
     public ImmutableSortedMap<PathFragment, PhonyTarget> getPhonyTargetsMap() {
@@ -217,18 +217,18 @@
     }
 
     void process(List<NinjaTarget> ninjaTargets) throws GenericParsingException {
-      ImmutableSortedMap.Builder<PathFragment, NinjaTarget> usualTargetsBuilder =
+      ImmutableSortedMap.Builder<PathFragment, NinjaTarget> targetsMapBuilder =
           ImmutableSortedMap.naturalOrder();
       ImmutableSortedMap.Builder<PathFragment, NinjaTarget> phonyTargetsBuilder =
           ImmutableSortedMap.naturalOrder();
-      separatePhonyTargets(ninjaTargets, usualTargetsBuilder, phonyTargetsBuilder);
-      usualTargets = usualTargetsBuilder.build();
+      separatePhonyTargets(ninjaTargets, targetsMapBuilder, phonyTargetsBuilder);
+      targetsMap = targetsMapBuilder.build();
       phonyTargetsMap = NinjaPhonyTargetsUtil.getPhonyPathsMap(phonyTargetsBuilder.build());
     }
 
     private static void separatePhonyTargets(
         List<NinjaTarget> ninjaTargets,
-        ImmutableSortedMap.Builder<PathFragment, NinjaTarget> usualTargetsBuilder,
+        ImmutableSortedMap.Builder<PathFragment, NinjaTarget> targetsBuilder,
         ImmutableSortedMap.Builder<PathFragment, NinjaTarget> phonyTargetsBuilder)
         throws GenericParsingException {
       for (NinjaTarget target : ninjaTargets) {
@@ -246,7 +246,7 @@
           phonyTargetsBuilder.put(Iterables.getOnlyElement(target.getAllOutputs()), target);
         } else {
           for (PathFragment output : target.getAllOutputs()) {
-            usualTargetsBuilder.put(output, target);
+            targetsBuilder.put(output, target);
           }
         }
       }
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/ninja/actions/NinjaGraphProvider.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/ninja/actions/NinjaGraphProvider.java
index deff5a5..0c7d82e 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/ninja/actions/NinjaGraphProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/ninja/actions/NinjaGraphProvider.java
@@ -24,13 +24,13 @@
 
 /**
  * Provider for passing information between {@link NinjaGraphRule} and {@link NinjaBuildRule}.
- * Represents all usual and phony {@link NinjaTarget}s from the Ninja graph.
+ * Represents all regular and phony {@link NinjaTarget}s from the Ninja graph.
  */
 @Immutable
 public final class NinjaGraphProvider implements TransitiveInfoProvider {
   private final PathFragment outputRoot;
   private final PathFragment workingDirectory;
-  private final ImmutableSortedMap<PathFragment, NinjaTarget> usualTargets;
+  private final ImmutableSortedMap<PathFragment, NinjaTarget> targetsMap;
   private final ImmutableSortedMap<PathFragment, PhonyTarget> phonyTargetsMap;
   private final ImmutableSortedSet<PathFragment> outputRootSymlinks;
   private final ImmutableSet<PathFragment> outputRootInputsSymlinks;
@@ -38,14 +38,14 @@
   public NinjaGraphProvider(
       PathFragment outputRoot,
       PathFragment workingDirectory,
-      ImmutableSortedMap<PathFragment, NinjaTarget> usualTargets,
+      ImmutableSortedMap<PathFragment, NinjaTarget> targetsMap,
       ImmutableSortedMap<PathFragment, PhonyTarget> phonyTargetsMap,
       ImmutableSortedSet<PathFragment> outputRootSymlinks,
       ImmutableSet<PathFragment> outputRootInputsSymlinks) {
 
     this.outputRoot = outputRoot;
     this.workingDirectory = workingDirectory;
-    this.usualTargets = usualTargets;
+    this.targetsMap = targetsMap;
     this.phonyTargetsMap = phonyTargetsMap;
     this.outputRootSymlinks = outputRootSymlinks;
     this.outputRootInputsSymlinks = outputRootInputsSymlinks;
@@ -59,8 +59,8 @@
     return workingDirectory;
   }
 
-  public ImmutableSortedMap<PathFragment, NinjaTarget> getUsualTargets() {
-    return usualTargets;
+  public ImmutableSortedMap<PathFragment, NinjaTarget> getTargetsMap() {
+    return targetsMap;
   }
 
   public ImmutableSortedMap<PathFragment, PhonyTarget> getPhonyTargetsMap() {
diff --git a/src/test/java/com/google/devtools/build/lib/bazel/rules/ninja/NinjaGraphTest.java b/src/test/java/com/google/devtools/build/lib/bazel/rules/ninja/NinjaGraphTest.java
index 1336785..486669f 100644
--- a/src/test/java/com/google/devtools/build/lib/bazel/rules/ninja/NinjaGraphTest.java
+++ b/src/test/java/com/google/devtools/build/lib/bazel/rules/ninja/NinjaGraphTest.java
@@ -94,9 +94,9 @@
     assertThat(provider.getOutputRoot()).isEqualTo(PathFragment.create("build_config"));
     assertThat(provider.getWorkingDirectory()).isEqualTo(PathFragment.EMPTY_FRAGMENT);
     assertThat(provider.getPhonyTargetsMap()).isEmpty();
-    assertThat(provider.getUsualTargets()).hasSize(1);
+    assertThat(provider.getTargetsMap()).hasSize(1);
 
-    NinjaTarget target = Iterables.getOnlyElement(provider.getUsualTargets().values());
+    NinjaTarget target = Iterables.getOnlyElement(provider.getTargetsMap().values());
     assertThat(target.getRuleName()).isEqualTo("echo");
     assertThat(target.getAllInputs())
         .containsExactly(PathFragment.create("build_config/input.txt"));
@@ -146,9 +146,9 @@
     assertThat(provider).isNotNull();
     assertThat(provider.getOutputRoot()).isEqualTo(PathFragment.create("build_config"));
     assertThat(provider.getWorkingDirectory()).isEqualTo(PathFragment.create("build_config"));
-    assertThat(provider.getUsualTargets()).hasSize(1);
+    assertThat(provider.getTargetsMap()).hasSize(1);
 
-    NinjaTarget target = Iterables.getOnlyElement(provider.getUsualTargets().values());
+    NinjaTarget target = Iterables.getOnlyElement(provider.getTargetsMap().values());
     assertThat(target.getRuleName()).isEqualTo("echo");
     assertThat(target.getAllInputs()).containsExactly(PathFragment.create("input.txt"));
     assertThat(target.getAllOutputs()).containsExactly(PathFragment.create("hello.txt"));
