diff --git a/src/main/java/com/google/devtools/build/lib/packages/Package.java b/src/main/java/com/google/devtools/build/lib/packages/Package.java
index 8fa17ca..421ab01 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/Package.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/Package.java
@@ -38,6 +38,7 @@
 import com.google.devtools.build.lib.events.EventHandler;
 import com.google.devtools.build.lib.events.ExtendedEventHandler.Postable;
 import com.google.devtools.build.lib.packages.License.DistributionType;
+import com.google.devtools.build.lib.packages.Package.Builder.PackageSettings;
 import com.google.devtools.build.lib.packages.RuleClass.Builder.ThirdPartyLicenseExistencePolicy;
 import com.google.devtools.build.lib.skyframe.serialization.DeserializationContext;
 import com.google.devtools.build.lib.skyframe.serialization.ObjectCodec;
@@ -76,6 +77,8 @@
  * strictly immutable, so until their types are guaranteed immutable we're not applying the
  * {@code @Immutable} annotation here.
  *
+ * <p>This class should not be extended - it's only non-final for mocking!
+ *
  * <p>When changing this class, make sure to make corresponding changes to serialization!
  */
 @SuppressWarnings("JavaLangClash")
@@ -94,6 +97,8 @@
    */
   private final PackageIdentifier packageIdentifier;
 
+  private final boolean suggestNoSuchTargetCorrections;
+
   /** The filename of this package's BUILD file. */
   private RootedPath filename;
 
@@ -214,20 +219,20 @@
   }
 
   /**
-   * Package initialization, part 1 of 3: instantiates a new package with the
-   * given name.
+   * Package initialization, part 1 of 3: instantiates a new package with the given name.
    *
-   * <p>As part of initialization, {@link Builder} constructs {@link InputFile}
-   * and {@link PackageGroup} instances that require a valid Package instance where
-   * {@link Package#getNameFragment()} is accessible. That's why these settings are
-   * applied here at the start.
+   * <p>As part of initialization, {@link Builder} constructs {@link InputFile} and {@link
+   * PackageGroup} instances that require a valid Package instance where {@link
+   * Package#getNameFragment()} is accessible. That's why these settings are applied here at the
+   * start.
    *
-   * @precondition {@code name} must be a suffix of
-   * {@code filename.getParentDirectory())}.
+   * @precondition {@code name} must be a suffix of {@code filename.getParentDirectory())}.
    */
-  protected Package(PackageIdentifier packageId, String runfilesPrefix) {
+  protected Package(
+      PackageIdentifier packageId, String runfilesPrefix, boolean suggestNoSuchTargetCorrections) {
     this.packageIdentifier = packageId;
     this.workspaceName = runfilesPrefix;
+    this.suggestNoSuchTargetCorrections = suggestNoSuchTargetCorrections;
   }
 
   /** Returns this packages' identifier. */
@@ -587,7 +592,9 @@
       return target;
     }
 
-    // No such target.
+    if (!suggestNoSuchTargetCorrections) {
+      throw makeNoSuchTargetException(targetName, /*suffix=*/ "");
+    }
 
     // If there's a file on the disk that's not mentioned in the BUILD file,
     // produce a more informative error.  NOTE! this code path is only executed
@@ -772,7 +779,7 @@
   }
 
   public static Builder newExternalPackageBuilder(
-      Builder.Helper helper,
+      PackageSettings helper,
       RootedPath workspacePath,
       String runfilesPrefix,
       StarlarkSemantics starlarkSemantics) {
@@ -794,24 +801,25 @@
     public static final ImmutableMap<RepositoryName, RepositoryName> EMPTY_REPOSITORY_MAPPING =
         ImmutableMap.of();
 
-    public interface Helper {
+    /** Defines configuration to control the runtime behavior of {@link Package}s. */
+    public interface PackageSettings {
       /**
-       * Returns a fresh {@link Package} instance that a {@link Builder} will internally mutate
-       * during package loading. Called by {@link PackageFactory}.
+       * Returns if {@link NoSuchTargetException}s thrown from {@link #getTarget} should attempt to
+       * suggest existing alternatives. The benefit is potentially improved error messaging, while
+       * the drawback is extra I/O and CPU work, which might not be desired in all environments.
        */
-      Package createFreshPackage(PackageIdentifier packageId, String runfilesPrefix);
+      boolean suggestNoSuchTargetCorrections();
     }
 
-    /** {@link Helper} that simply calls the {@link Package} constructor. */
-    public static class DefaultHelper implements Helper {
-      public static final DefaultHelper INSTANCE = new DefaultHelper();
+    /** Default {@link PackageSettings}. */
+    public static class DefaultPackageSettings implements PackageSettings {
+      public static final DefaultPackageSettings INSTANCE = new DefaultPackageSettings();
 
-      private DefaultHelper() {
-      }
+      private DefaultPackageSettings() {}
 
       @Override
-      public Package createFreshPackage(PackageIdentifier packageId, String runfilesPrefix) {
-        return new Package(packageId, runfilesPrefix);
+      public boolean suggestNoSuchTargetCorrections() {
+        return true;
       }
     }
 
@@ -915,12 +923,12 @@
     private boolean alreadyBuilt = false;
 
     Builder(
-        Helper helper,
+        PackageSettings packageSettings,
         PackageIdentifier id,
         String runfilesPrefix,
         boolean noImplicitFileExport,
         ImmutableMap<RepositoryName, RepositoryName> repositoryMapping) {
-      this.pkg = helper.createFreshPackage(id, runfilesPrefix);
+      this.pkg = new Package(id, runfilesPrefix, packageSettings.suggestNoSuchTargetCorrections());
       this.noImplicitFileExport = noImplicitFileExport;
       this.repositoryMapping = repositoryMapping;
       if (pkg.getName().startsWith("javatests/")) {
diff --git a/src/main/java/com/google/devtools/build/lib/packages/PackageFactory.java b/src/main/java/com/google/devtools/build/lib/packages/PackageFactory.java
index 5a0fac6..0161fb2 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/PackageFactory.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/PackageFactory.java
@@ -31,6 +31,7 @@
 import com.google.devtools.build.lib.events.ExtendedEventHandler.Postable;
 import com.google.devtools.build.lib.events.StoredEventHandler;
 import com.google.devtools.build.lib.packages.Globber.BadGlobException;
+import com.google.devtools.build.lib.packages.Package.Builder.PackageSettings;
 import com.google.devtools.build.lib.packages.PackageValidator.InvalidPackageException;
 import com.google.devtools.build.lib.packages.RuleClass.Builder.RuleClassType;
 import com.google.devtools.build.lib.packages.RuleFactory.BuildLangTypedAttributeValuesMap;
@@ -128,7 +129,7 @@
   private final ImmutableMap<String, Object> nativeModuleBindingsForBuild;
   private final ImmutableMap<String, Object> nativeModuleBindingsForWorkspace;
 
-  private final Package.Builder.Helper packageBuilderHelper;
+  private final PackageSettings packageSettings;
   private final PackageValidator packageValidator;
   private final PackageLoadingListener packageLoadingListener;
 
@@ -160,8 +161,8 @@
   }
 
   @VisibleForTesting
-  public Package.Builder.Helper getPackageBuilderHelperForTesting() {
-    return packageBuilderHelper;
+  public PackageSettings getPackageSettingsForTesting() {
+    return packageSettings;
   }
 
   /**
@@ -180,7 +181,7 @@
       RuleClassProvider ruleClassProvider,
       Iterable<EnvironmentExtension> environmentExtensions,
       String version,
-      Package.Builder.Helper packageBuilderHelper,
+      PackageSettings packageSettings,
       PackageValidator packageValidator,
       PackageLoadingListener packageLoadingListener) {
     this.ruleFactory = new RuleFactory(ruleClassProvider);
@@ -194,7 +195,7 @@
             ruleFunctions, packageArguments, this.environmentExtensions);
     this.nativeModuleBindingsForWorkspace =
         createNativeModuleBindingsForWorkspace(ruleClassProvider, version);
-    this.packageBuilderHelper = packageBuilderHelper;
+    this.packageSettings = packageSettings;
     this.packageValidator = packageValidator;
     this.packageLoadingListener = packageLoadingListener;
   }
@@ -462,14 +463,14 @@
   public Package.Builder newExternalPackageBuilder(
       RootedPath workspacePath, String runfilesPrefix, StarlarkSemantics starlarkSemantics) {
     return Package.newExternalPackageBuilder(
-        packageBuilderHelper, workspacePath, runfilesPrefix, starlarkSemantics);
+        packageSettings, workspacePath, runfilesPrefix, starlarkSemantics);
   }
 
   @VisibleForTesting
   public Package.Builder newPackageBuilder(
       PackageIdentifier packageId, String runfilesPrefix, StarlarkSemantics starlarkSemantics) {
     return new Package.Builder(
-        packageBuilderHelper,
+        packageSettings,
         packageId,
         runfilesPrefix,
         starlarkSemantics.incompatibleNoImplicitFileExport(),
@@ -723,7 +724,7 @@
       throws InterruptedException {
     Package.Builder pkgBuilder =
         new Package.Builder(
-                packageBuilderHelper,
+                packageSettings,
                 packageId,
                 ruleClassProvider.getRunfilesPrefix(),
                 semantics.incompatibleNoImplicitFileExport(),
diff --git a/src/main/java/com/google/devtools/build/lib/packages/metrics/PackageMetricsModule.java b/src/main/java/com/google/devtools/build/lib/packages/metrics/PackageMetricsModule.java
index f8a580b..2f95729 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/metrics/PackageMetricsModule.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/metrics/PackageMetricsModule.java
@@ -18,7 +18,7 @@
 import com.google.common.collect.ImmutableList;
 import com.google.common.flogger.GoogleLogger;
 import com.google.devtools.build.lib.analysis.ConfiguredRuleClassProvider;
-import com.google.devtools.build.lib.packages.Package;
+import com.google.devtools.build.lib.packages.Package.Builder.PackageSettings;
 import com.google.devtools.build.lib.packages.PackageLoadingListener;
 import com.google.devtools.build.lib.packages.metrics.ExtremaPackageLoadingListener.PackageIdentifierAndLong;
 import com.google.devtools.build.lib.packages.metrics.ExtremaPackageLoadingListener.TopPackages;
@@ -61,7 +61,7 @@
   @Nullable
   @Override
   public PackageLoadingListener getPackageLoadingListener(
-      Package.Builder.Helper packageBuilderHelper,
+      PackageSettings packageSettings,
       ConfiguredRuleClassProvider ruleClassProvider,
       FileSystem fs) {
     return packageLoadingListener;
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/BlazeModule.java b/src/main/java/com/google/devtools/build/lib/runtime/BlazeModule.java
index b489ef8..bb7eb77 100644
--- a/src/main/java/com/google/devtools/build/lib/runtime/BlazeModule.java
+++ b/src/main/java/com/google/devtools/build/lib/runtime/BlazeModule.java
@@ -30,7 +30,7 @@
 import com.google.devtools.build.lib.exec.ExecutorBuilder;
 import com.google.devtools.build.lib.exec.ModuleActionContextRegistry;
 import com.google.devtools.build.lib.exec.SpawnStrategyRegistry;
-import com.google.devtools.build.lib.packages.Package;
+import com.google.devtools.build.lib.packages.Package.Builder.PackageSettings;
 import com.google.devtools.build.lib.packages.PackageLoadingListener;
 import com.google.devtools.build.lib.packages.PackageValidator;
 import com.google.devtools.build.lib.skyframe.PrecomputedValue;
@@ -394,14 +394,13 @@
   }
 
   /**
-   * Returns a helper that the {@link com.google.devtools.build.lib.packages.PackageFactory} will
-   * use during package loading, or null if the module does not provide any helper.
+   * Returns {@link PackageSettings} for creating packages.
    *
    * <p>Called once during server startup some time after {@link #serverInit}.
    *
    * <p>Note that only one helper per Bazel/Blaze runtime is allowed.
    */
-  public Package.Builder.Helper getPackageBuilderHelper() {
+  public PackageSettings getPackageSettings() {
     return null;
   }
 
@@ -426,7 +425,7 @@
    */
   @Nullable
   public PackageLoadingListener getPackageLoadingListener(
-      Package.Builder.Helper packageBuilderHelper,
+      PackageSettings packageSettings,
       ConfiguredRuleClassProvider ruleClassProvider,
       FileSystem fs) {
     return null;
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/BlazeRuntime.java b/src/main/java/com/google/devtools/build/lib/runtime/BlazeRuntime.java
index 5835ba7..9a719aa 100644
--- a/src/main/java/com/google/devtools/build/lib/runtime/BlazeRuntime.java
+++ b/src/main/java/com/google/devtools/build/lib/runtime/BlazeRuntime.java
@@ -49,7 +49,8 @@
 import com.google.devtools.build.lib.events.ExtendedEventHandler;
 import com.google.devtools.build.lib.events.OutputFilter;
 import com.google.devtools.build.lib.exec.BinTools;
-import com.google.devtools.build.lib.packages.Package;
+import com.google.devtools.build.lib.packages.Package.Builder.DefaultPackageSettings;
+import com.google.devtools.build.lib.packages.Package.Builder.PackageSettings;
 import com.google.devtools.build.lib.packages.PackageFactory;
 import com.google.devtools.build.lib.packages.PackageLoadingListener;
 import com.google.devtools.build.lib.packages.PackageValidator;
@@ -1514,29 +1515,16 @@
 
       ConfiguredRuleClassProvider ruleClassProvider = ruleClassBuilder.build();
 
-      Package.Builder.Helper packageBuilderHelper = null;
-      for (BlazeModule module : blazeModules) {
-        Package.Builder.Helper candidateHelper = module.getPackageBuilderHelper();
-        if (candidateHelper != null) {
-          Preconditions.checkState(
-              packageBuilderHelper == null,
-              "more than one module defines a package builder helper");
-          packageBuilderHelper = candidateHelper;
-        }
-      }
-      if (packageBuilderHelper == null) {
-        packageBuilderHelper = Package.Builder.DefaultHelper.INSTANCE;
-      }
-
+      PackageSettings packageSettings = getPackageSettings(blazeModules);
       PackageFactory packageFactory =
           new PackageFactory(
               ruleClassProvider,
               serverBuilder.getEnvironmentExtensions(),
               BlazeVersionInfo.instance().getVersion(),
-              packageBuilderHelper,
+              packageSettings,
               getPackageValidator(blazeModules),
               getPackageLoadingListener(
-                  blazeModules, packageBuilderHelper, ruleClassProvider, fileSystem));
+                  blazeModules, packageSettings, ruleClassProvider, fileSystem));
 
       ProjectFile.Provider projectFileProvider = null;
       for (BlazeModule module : blazeModules) {
@@ -1650,6 +1638,17 @@
       return this;
     }
 
+    private static PackageSettings getPackageSettings(List<BlazeModule> blazeModules) {
+      List<PackageSettings> packageSettingss =
+          blazeModules.stream()
+              .map(module -> module.getPackageSettings())
+              .filter(settings -> settings != null)
+              .collect(toImmutableList());
+      Preconditions.checkState(
+          packageSettingss.size() <= 1, "more than one module defines a PackageSettings");
+      return Iterables.getFirst(packageSettingss, DefaultPackageSettings.INSTANCE);
+    }
+
     private static PackageValidator getPackageValidator(List<BlazeModule> blazeModules) {
       List<PackageValidator> packageValidators =
           blazeModules.stream()
@@ -1664,7 +1663,7 @@
 
   private static PackageLoadingListener getPackageLoadingListener(
       List<BlazeModule> blazeModules,
-      Package.Builder.Helper packageBuilderHelper,
+      PackageSettings packageBuilderHelper,
       ConfiguredRuleClassProvider ruleClassProvider,
       FileSystem fs) {
     ImmutableList<PackageLoadingListener> listeners =
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java
index a538035..0253701 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java
@@ -117,6 +117,7 @@
 import com.google.devtools.build.lib.packages.NoSuchTargetException;
 import com.google.devtools.build.lib.packages.NoSuchThingException;
 import com.google.devtools.build.lib.packages.Package;
+import com.google.devtools.build.lib.packages.Package.Builder.PackageSettings;
 import com.google.devtools.build.lib.packages.PackageFactory;
 import com.google.devtools.build.lib.packages.RuleClassProvider;
 import com.google.devtools.build.lib.packages.RuleVisibility;
@@ -2630,8 +2631,8 @@
   }
 
   @VisibleForTesting
-  public Package.Builder.Helper getPackageBuilderHelperForTesting() {
-    return pkgFactory.getPackageBuilderHelperForTesting();
+  public PackageSettings getPackageSettingsForTesting() {
+    return pkgFactory.getPackageSettingsForTesting();
   }
 
   @VisibleForTesting
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/packages/AbstractPackageLoader.java b/src/main/java/com/google/devtools/build/lib/skyframe/packages/AbstractPackageLoader.java
index 554d671..f4a2c6f 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/packages/AbstractPackageLoader.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/packages/AbstractPackageLoader.java
@@ -36,6 +36,7 @@
 import com.google.devtools.build.lib.packages.ConstantRuleVisibility;
 import com.google.devtools.build.lib.packages.NoSuchPackageException;
 import com.google.devtools.build.lib.packages.Package;
+import com.google.devtools.build.lib.packages.Package.Builder.DefaultPackageSettings;
 import com.google.devtools.build.lib.packages.PackageFactory;
 import com.google.devtools.build.lib.packages.PackageFactory.EnvironmentExtension;
 import com.google.devtools.build.lib.packages.PackageLoadingListener;
@@ -277,7 +278,7 @@
             ruleClassProvider,
             getEnvironmentExtensions(),
             "PackageLoader",
-            Package.Builder.DefaultHelper.INSTANCE,
+            DefaultPackageSettings.INSTANCE,
             PackageValidator.NOOP_VALIDATOR,
             PackageLoadingListener.NOOP_LISTENER);
   }
diff --git a/src/test/java/com/google/devtools/build/lib/bazel/repository/starlark/StarlarkRepositoryContextTest.java b/src/test/java/com/google/devtools/build/lib/bazel/repository/starlark/StarlarkRepositoryContextTest.java
index 329d34b..1de6151 100644
--- a/src/test/java/com/google/devtools/build/lib/bazel/repository/starlark/StarlarkRepositoryContextTest.java
+++ b/src/test/java/com/google/devtools/build/lib/bazel/repository/starlark/StarlarkRepositoryContextTest.java
@@ -29,6 +29,7 @@
 import com.google.devtools.build.lib.events.ExtendedEventHandler;
 import com.google.devtools.build.lib.packages.Attribute;
 import com.google.devtools.build.lib.packages.Package;
+import com.google.devtools.build.lib.packages.Package.Builder.DefaultPackageSettings;
 import com.google.devtools.build.lib.packages.Rule;
 import com.google.devtools.build.lib.packages.RuleClass;
 import com.google.devtools.build.lib.packages.RuleClass.Builder.RuleClassType;
@@ -131,7 +132,7 @@
       throws Exception {
     Package.Builder packageBuilder =
         Package.newExternalPackageBuilder(
-            Package.Builder.DefaultHelper.INSTANCE,
+            DefaultPackageSettings.INSTANCE,
             RootedPath.toRootedPath(root, workspaceFile),
             "runfiles",
             starlarkSemantics);
diff --git a/src/test/java/com/google/devtools/build/lib/packages/WorkspaceFactoryTestHelper.java b/src/test/java/com/google/devtools/build/lib/packages/WorkspaceFactoryTestHelper.java
index 2950a82..1ff7412 100644
--- a/src/test/java/com/google/devtools/build/lib/packages/WorkspaceFactoryTestHelper.java
+++ b/src/test/java/com/google/devtools/build/lib/packages/WorkspaceFactoryTestHelper.java
@@ -20,6 +20,7 @@
 import com.google.common.collect.ImmutableList;
 import com.google.devtools.build.lib.events.Event;
 import com.google.devtools.build.lib.events.StoredEventHandler;
+import com.google.devtools.build.lib.packages.Package.Builder.DefaultPackageSettings;
 import com.google.devtools.build.lib.syntax.Mutability;
 import com.google.devtools.build.lib.syntax.ParserInput;
 import com.google.devtools.build.lib.syntax.StarlarkSemantics;
@@ -64,7 +65,7 @@
     StoredEventHandler eventHandler = new StoredEventHandler();
     builder =
         Package.newExternalPackageBuilder(
-            Package.Builder.DefaultHelper.INSTANCE,
+            DefaultPackageSettings.INSTANCE,
             RootedPath.toRootedPath(root, workspaceFilePath),
             "",
             StarlarkSemantics.DEFAULT);
diff --git a/src/test/java/com/google/devtools/build/lib/packages/util/PackageFactoryApparatus.java b/src/test/java/com/google/devtools/build/lib/packages/util/PackageFactoryApparatus.java
index 831caaa..024cf24 100644
--- a/src/test/java/com/google/devtools/build/lib/packages/util/PackageFactoryApparatus.java
+++ b/src/test/java/com/google/devtools/build/lib/packages/util/PackageFactoryApparatus.java
@@ -27,6 +27,7 @@
 import com.google.devtools.build.lib.packages.LegacyGlobber;
 import com.google.devtools.build.lib.packages.NoSuchPackageException;
 import com.google.devtools.build.lib.packages.Package;
+import com.google.devtools.build.lib.packages.Package.Builder.DefaultPackageSettings;
 import com.google.devtools.build.lib.packages.PackageFactory;
 import com.google.devtools.build.lib.packages.PackageLoadingListener;
 import com.google.devtools.build.lib.packages.PackageValidator;
@@ -66,7 +67,7 @@
             ruleClassProvider,
             /*environmentExtensions=*/ ImmutableList.of(),
             "test",
-            Package.Builder.DefaultHelper.INSTANCE,
+            DefaultPackageSettings.INSTANCE,
             packageValidator,
             PackageLoadingListener.NOOP_LISTENER);
   }
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/TransitiveTraversalFunctionTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/TransitiveTraversalFunctionTest.java
index f050b4c..d1edec5 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/TransitiveTraversalFunctionTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/TransitiveTraversalFunctionTest.java
@@ -23,6 +23,7 @@
 import com.google.devtools.build.lib.packages.NoSuchPackageException;
 import com.google.devtools.build.lib.packages.NoSuchTargetException;
 import com.google.devtools.build.lib.packages.Package;
+import com.google.devtools.build.lib.packages.Package.Builder.DefaultPackageSettings;
 import com.google.devtools.build.lib.skyframe.TransitiveBaseTraversalFunction.TargetAndErrorIfAnyImpl;
 import com.google.devtools.build.lib.syntax.StarlarkSemantics;
 import com.google.devtools.build.lib.util.GroupedList;
@@ -199,7 +200,7 @@
     Path buildFile = scratch.file("" + packageId.getSourceRoot() + "/BUILD", lines);
     Package.Builder externalPkg =
         Package.newExternalPackageBuilder(
-            Package.Builder.DefaultHelper.INSTANCE,
+            DefaultPackageSettings.INSTANCE,
             RootedPath.toRootedPath(root, buildFile.getRelative("WORKSPACE")),
             "TESTING",
             StarlarkSemantics.DEFAULT);
diff --git a/src/test/java/com/google/devtools/build/lib/testutil/PackageFactoryBuilderFactoryForBazelUnitTests.java b/src/test/java/com/google/devtools/build/lib/testutil/PackageFactoryBuilderFactoryForBazelUnitTests.java
index 48bd859..ead15a4 100644
--- a/src/test/java/com/google/devtools/build/lib/testutil/PackageFactoryBuilderFactoryForBazelUnitTests.java
+++ b/src/test/java/com/google/devtools/build/lib/testutil/PackageFactoryBuilderFactoryForBazelUnitTests.java
@@ -16,7 +16,7 @@
 import com.google.devtools.build.lib.analysis.BlazeDirectories;
 import com.google.devtools.build.lib.analysis.ConfiguredRuleClassProvider;
 import com.google.devtools.build.lib.packages.BuilderFactoryForTesting;
-import com.google.devtools.build.lib.packages.Package;
+import com.google.devtools.build.lib.packages.Package.Builder.DefaultPackageSettings;
 import com.google.devtools.build.lib.packages.PackageFactory;
 import com.google.devtools.build.lib.packages.PackageLoadingListener;
 import com.google.devtools.build.lib.packages.RuleClassProvider;
@@ -54,7 +54,7 @@
           ruleClassProvider,
           environmentExtensions,
           version,
-          Package.Builder.DefaultHelper.INSTANCE,
+          DefaultPackageSettings.INSTANCE,
           packageValidator,
           doChecksForTesting
               ? new BazelPackageLoadingListenerForTesting(
