diff --git a/src/main/java/com/google/devtools/build/lib/Constants.java b/src/main/java/com/google/devtools/build/lib/Constants.java
index 1925876..2db7d32 100644
--- a/src/main/java/com/google/devtools/build/lib/Constants.java
+++ b/src/main/java/com/google/devtools/build/lib/Constants.java
@@ -31,7 +31,6 @@
   public static final String MAIN_RULE_CLASS_PROVIDER =
       "com.google.devtools.build.lib.bazel.rules.BazelRuleClassProvider";
   public static final ImmutableList<String> IGNORED_TEST_WARNING_PREFIXES = ImmutableList.of();
-  public static final String DEFAULT_RUNFILES_PREFIX = "";
 
   public static final String NATIVE_DEPS_LIB_SUFFIX = "_nativedeps";
 
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredRuleClassProvider.java b/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredRuleClassProvider.java
index 8f048f7..18d605d 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredRuleClassProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredRuleClassProvider.java
@@ -80,6 +80,7 @@
   public static class Builder implements RuleDefinitionEnvironment {
     private final StringBuilder defaultWorkspaceFile = new StringBuilder();
     private PathFragment preludePath;
+    private String runfilesPrefix;
     private final List<ConfigurationFragmentFactory> configurationFragments = new ArrayList<>();
     private final List<BuildInfoFactory> buildInfoFactories = new ArrayList<>();
     private final List<Class<? extends FragmentOptions>> configurationOptions = new ArrayList<>();
@@ -110,6 +111,11 @@
       return this;
     }
 
+    public Builder setRunfilesPrefix(String runfilesPrefix) {
+      this.runfilesPrefix = runfilesPrefix;
+      return this;
+    }
+
     public Builder setPrerequisiteValidator(PrerequisiteValidator prerequisiteValidator) {
       this.prerequisiteValidator = prerequisiteValidator;
       return this;
@@ -219,6 +225,7 @@
 
       return new ConfiguredRuleClassProvider(
           preludePath,
+          runfilesPrefix,
           ImmutableMap.copyOf(ruleClassMap),
           ImmutableMap.copyOf(ruleDefinitionMap),
           ImmutableMap.copyOf(aspectFactoryMap),
@@ -265,6 +272,11 @@
   private final PathFragment preludePath;
 
   /**
+   * The default runfiles prefix.
+   */
+  private final String runfilesPrefix;
+
+  /**
    * Maps rule class name to the metaclass instance for that rule.
    */
   private final ImmutableMap<String, RuleClass> ruleClassMap;
@@ -304,6 +316,7 @@
 
   public ConfiguredRuleClassProvider(
       PathFragment preludePath,
+      String runfilesPrefix,
       ImmutableMap<String, RuleClass> ruleClassMap,
       ImmutableMap<String, Class<? extends RuleDefinition>> ruleDefinitionMap,
       ImmutableMap<String, Class<? extends AspectFactory<?, ?, ?>>> aspectFactoryMap,
@@ -315,6 +328,7 @@
       PrerequisiteValidator prerequisiteValidator,
       ImmutableMap<String, SkylarkType> skylarkAccessibleJavaClasses) {
     this.preludePath = preludePath;
+    this.runfilesPrefix = runfilesPrefix;
     this.ruleClassMap = ruleClassMap;
     this.ruleDefinitionMap = ruleDefinitionMap;
     this.aspectFactoryMap = aspectFactoryMap;
@@ -340,6 +354,11 @@
   }
 
   @Override
+  public String getRunfilesPrefix() {
+    return runfilesPrefix;
+  }
+
+  @Override
   public Map<String, RuleClass> getRuleClassMap() {
     return ruleClassMap;
   }
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java
index 2133bd5..605a15d 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java
@@ -227,6 +227,7 @@
         .addBuildInfoFactory(new ObjcBuildInfoFactory())
         .setConfigurationCollectionFactory(new BazelConfigurationCollection())
         .setPrelude("tools/build_rules/prelude_bazel")
+        .setRunfilesPrefix("")
         .setPrerequisiteValidator(new BazelPrerequisiteValidator());
 
     for (Class<? extends FragmentOptions> fragmentOptions : BUILD_OPTIONS) {
diff --git a/src/main/java/com/google/devtools/build/lib/packages/ExternalPackage.java b/src/main/java/com/google/devtools/build/lib/packages/ExternalPackage.java
index 2e429ff..fda1a83 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/ExternalPackage.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/ExternalPackage.java
@@ -41,8 +41,8 @@
 
   private Map<RepositoryName, Rule> repositoryMap;
 
-  ExternalPackage() {
-    super(PACKAGE_IDENTIFIER);
+  ExternalPackage(String runfilesPrefix) {
+    super(PACKAGE_IDENTIFIER, runfilesPrefix);
   }
 
   /**
@@ -59,8 +59,8 @@
   public static class Builder extends Package.Builder {
     private Map<RepositoryName, Rule> repositoryMap = Maps.newLinkedHashMap();
 
-    public Builder(Path workspacePath) {
-      super(new ExternalPackage());
+    public Builder(Path workspacePath, String runfilesPrefix) {
+      super(new ExternalPackage(runfilesPrefix));
       setFilename(workspacePath);
       setMakeEnv(new MakeEnvironment.Builder());
     }
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 92a24fb..2a6945c 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
@@ -24,7 +24,6 @@
 import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
 import com.google.common.collect.Sets;
-import com.google.devtools.build.lib.Constants;
 import com.google.devtools.build.lib.cmdline.PackageIdentifier;
 import com.google.devtools.build.lib.collect.CollectionUtils;
 import com.google.devtools.build.lib.collect.ImmutableSortedKeyMap;
@@ -107,7 +106,7 @@
    * The name of the workspace this package is in. Used as a prefix for the runfiles directory.
    * This can be set in the WORKSPACE file. This must be a valid target name.
    */
-  protected String workspaceName = Constants.DEFAULT_RUNFILES_PREFIX;
+  protected String workspaceName;
 
   /**
    * The root of the source tree in which this package was found. It is an invariant that
@@ -226,8 +225,9 @@
    * @precondition {@code name} must be a suffix of
    * {@code filename.getParentDirectory())}.
    */
-  protected Package(PackageIdentifier packageId) {
+  protected Package(PackageIdentifier packageId, String runfilesPrefix) {
     this.packageIdentifier = packageId;
+    this.workspaceName = runfilesPrefix;
     this.nameFragment = Canonicalizer.fragments().intern(packageId.getPackageFragment());
     this.name = nameFragment.getPathString();
   }
@@ -723,11 +723,10 @@
    * <p>Despite its name, this is the normal builder used when parsing BUILD files.
    */
   public static class LegacyBuilder extends Builder {
-
     private Globber globber = null;
 
-    LegacyBuilder(PackageIdentifier packageId) {
-      super(packageId);
+    LegacyBuilder(PackageIdentifier packageId, String runfilesPrefix) {
+      super(packageId, runfilesPrefix);
     }
 
     /**
@@ -761,8 +760,8 @@
   }
 
   static class Builder {
-    protected static Package newPackage(PackageIdentifier packageId) {
-      return new Package(packageId);
+    protected static Package newPackage(PackageIdentifier packageId, String runfilesPrefix) {
+      return new Package(packageId, runfilesPrefix);
     }
 
     /**
@@ -826,8 +825,8 @@
       }
     }
 
-    Builder(PackageIdentifier id) {
-      this(newPackage(id));
+    Builder(PackageIdentifier id, String runfilesPrefix) {
+      this(newPackage(id, runfilesPrefix));
     }
 
     protected PackageIdentifier getPackageIdentifier() {
diff --git a/src/main/java/com/google/devtools/build/lib/packages/PackageDeserializer.java b/src/main/java/com/google/devtools/build/lib/packages/PackageDeserializer.java
index ad335aa..e0ee192 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/PackageDeserializer.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/PackageDeserializer.java
@@ -482,7 +482,8 @@
     Package.Builder builder;
     try {
       builder = new Package.Builder(
-          new PackageIdentifier(packagePb.getRepository(), new PathFragment(packagePb.getName())));
+          new PackageIdentifier(packagePb.getRepository(), new PathFragment(packagePb.getName())),
+          null);
     } catch (TargetParsingException e) {
       throw new PackageDeserializationException(e);
     }
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 2122d42..ffea0bd 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
@@ -1055,7 +1055,8 @@
     Preprocessor.Result preprocessingResult =
         preprocess(packageId, buildFile, inputSource, globber, localReporter);
     ExternalPackage externalPkg =
-        new ExternalPackage.Builder(buildFile.getRelative("WORKSPACE")).build();
+        new ExternalPackage.Builder(
+            buildFile.getRelative("WORKSPACE"), ruleClassProvider.getRunfilesPrefix()).build();
 
     Package result =
         createPackageFromPreprocessingResult(
@@ -1261,7 +1262,8 @@
     Environment pkgEnv = new Environment(globalEnv, eventHandler);
     pkgEnv.setLoadingPhase();
 
-    Package.LegacyBuilder pkgBuilder = new Package.LegacyBuilder(packageId);
+    Package.LegacyBuilder pkgBuilder = new Package.LegacyBuilder(
+        packageId, ruleClassProvider.getRunfilesPrefix());
 
     pkgBuilder.setGlobber(globber)
         .setFilename(buildFilePath)
@@ -1331,7 +1333,8 @@
     Environment pkgEnv = new Environment();
     pkgEnv.setLoadingPhase();
 
-    Package.LegacyBuilder pkgBuilder = new Package.LegacyBuilder(packageId);
+    Package.LegacyBuilder pkgBuilder = new Package.LegacyBuilder(packageId,
+        ruleClassProvider.getRunfilesPrefix());
 
     pkgBuilder.setFilename(buildFilePath)
         .setMakeEnv(pkgMakeEnv)
diff --git a/src/main/java/com/google/devtools/build/lib/packages/RuleClassProvider.java b/src/main/java/com/google/devtools/build/lib/packages/RuleClassProvider.java
index d153fa1..958d88a 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/RuleClassProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/RuleClassProvider.java
@@ -32,6 +32,11 @@
   PathFragment getPreludePath();
 
   /**
+   * The default runfiles prefix (may be overwritten by the WORKSPACE file).
+   */
+  String getRunfilesPrefix();
+
+  /**
    * Returns a map from rule names to rule class objects.
    */
   Map<String, RuleClass> getRuleClassMap();
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceFileFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceFileFunction.java
index 945ce42..30f0c6a 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceFileFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceFileFunction.java
@@ -60,7 +60,8 @@
     }
 
     Path repoWorkspace = workspaceRoot.getRoot().getRelative(workspaceRoot.getRelativePath());
-    Builder builder = new Builder(repoWorkspace);
+    Builder builder = new Builder(repoWorkspace,
+        packageFactory.getRuleClassProvider().getRunfilesPrefix());
     WorkspaceFactory parser = new WorkspaceFactory(
         builder, packageFactory.getRuleClassProvider(), installDir.getPathString());
     parser.parse(ParserInputSource.create(
diff --git a/src/main/java/com/google/devtools/build/workspace/Resolver.java b/src/main/java/com/google/devtools/build/workspace/Resolver.java
index 3527d1c..2fd1ffe 100644
--- a/src/main/java/com/google/devtools/build/workspace/Resolver.java
+++ b/src/main/java/com/google/devtools/build/workspace/Resolver.java
@@ -67,7 +67,8 @@
    */
   public ExternalPackage parse(Path workspacePath) {
     resolver.addHeader(workspacePath.getPathString());
-    ExternalPackage.Builder builder = new ExternalPackage.Builder(workspacePath);
+    ExternalPackage.Builder builder = new ExternalPackage.Builder(workspacePath,
+        ruleClassProvider.getRunfilesPrefix());
     WorkspaceFactory parser = new WorkspaceFactory(builder, ruleClassProvider);
     try {
       parser.parse(ParserInputSource.create(workspacePath));
diff --git a/src/test/java/com/google/devtools/build/lib/packages/RuleClassTest.java b/src/test/java/com/google/devtools/build/lib/packages/RuleClassTest.java
index 8b1a198..8923373 100644
--- a/src/test/java/com/google/devtools/build/lib/packages/RuleClassTest.java
+++ b/src/test/java/com/google/devtools/build/lib/packages/RuleClassTest.java
@@ -205,7 +205,7 @@
   }
 
   private Package.Builder createDummyPackageBuilder() {
-    return new Builder(PackageIdentifier.createInDefaultRepo(TEST_PACKAGE_NAME))
+    return new Builder(PackageIdentifier.createInDefaultRepo(TEST_PACKAGE_NAME), "TESTING")
         .setFilename(testBuildfilePath)
         .setMakeEnv(new MakeEnvironment.Builder());
   }
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 84c401d..24ac455 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
@@ -129,8 +129,8 @@
     GlobCache globCache = new GlobCache(
         buildFile.getParentDirectory(), packageId, locator, null, TestUtils.getPool());
     LegacyGlobber globber = new LegacyGlobber(globCache);
-    ExternalPackage externalPkg = (new ExternalPackage.Builder(
-        buildFile.getParentDirectory().getRelative("WORKSPACE"))).build();
+    ExternalPackage externalPkg = new ExternalPackage.Builder(
+        buildFile.getParentDirectory().getRelative("WORKSPACE"), "TESTING").build();
     LegacyBuilder resultBuilder = factory.evaluateBuildFile(
         externalPkg, packageId, buildFileAST, buildFile,
         globber, ImmutableList.<Event>of(), ConstantRuleVisibility.PUBLIC, false, false,
