diff --git a/src/main/java/com/google/devtools/build/lib/analysis/Runfiles.java b/src/main/java/com/google/devtools/build/lib/analysis/Runfiles.java
index bdef891..2c44a32 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/Runfiles.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/Runfiles.java
@@ -19,7 +19,6 @@
 import com.google.common.base.Preconditions;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Iterables;
-import com.google.devtools.build.lib.Constants;
 import com.google.devtools.build.lib.actions.Artifact;
 import com.google.devtools.build.lib.analysis.RuleConfiguredTarget.Mode;
 import com.google.devtools.build.lib.collect.nestedset.NestedSet;
@@ -221,7 +220,7 @@
       NestedSet<SymlinkEntry> rootSymlinks,
       NestedSet<PruningManifest> pruningManifests,
       EmptyFilesSupplier emptyFilesSupplier) {
-    this.suffix = suffix.isEmpty() ? Constants.DEFAULT_RUNFILES_PREFIX : suffix;
+    this.suffix = suffix;
     this.unconditionalArtifacts = Preconditions.checkNotNull(artifacts);
     this.symlinks = Preconditions.checkNotNull(symlinks);
     this.rootSymlinks = Preconditions.checkNotNull(rootSymlinks);
@@ -505,7 +504,7 @@
     /**
      * Only used for Runfiles.EMPTY.
      */
-    public Builder() {
+    private Builder() {
       this.suffix = "";
     }
 
@@ -769,12 +768,15 @@
      * pruning manifests in the merge.
      */
     private Builder merge(Runfiles runfiles, boolean includePruningManifests) {
+      if (runfiles.isEmpty()) {
+        return this;
+      }
+      // The suffix should be the same within any blaze build, except for the EMPTY runfiles, which
+      // may have an empty suffix, but that is covered above.
+      Preconditions.checkArgument(suffix.equals(runfiles.suffix));
       artifactsBuilder.addTransitive(runfiles.getUnconditionalArtifacts());
       symlinksBuilder.addTransitive(runfiles.getSymlinks());
       rootSymlinksBuilder.addTransitive(runfiles.getRootSymlinks());
-      if (suffix.isEmpty()) {
-        suffix = runfiles.suffix;
-      }
       if (includePruningManifests) {
         pruningManifestsBuilder.addTransitive(runfiles.getPruningManifests());
       }
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/SourceManifestAction.java b/src/main/java/com/google/devtools/build/lib/analysis/SourceManifestAction.java
index 5d573e5..c026793 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/SourceManifestAction.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/SourceManifestAction.java
@@ -289,16 +289,18 @@
     private final ManifestWriter manifestWriter;
     private final ActionOwner owner;
     private final Artifact output;
-    private final Runfiles.Builder runfilesBuilder = new Runfiles.Builder();
+    private final Runfiles.Builder runfilesBuilder;
 
-    public Builder(ManifestType manifestType, ActionOwner owner, Artifact output) {
+    public Builder(String prefix, ManifestType manifestType, ActionOwner owner, Artifact output) {
+      this.runfilesBuilder = new Runfiles.Builder(prefix);
       manifestWriter = manifestType;
       this.owner = owner;
       this.output = output;
     }
 
     @VisibleForTesting
-    Builder(ManifestWriter manifestWriter, ActionOwner owner, Artifact output) {
+    Builder(String prefix, ManifestWriter manifestWriter, ActionOwner owner, Artifact output) {
+      this.runfilesBuilder = new Runfiles.Builder(prefix);
       this.manifestWriter = manifestWriter;
       this.owner = owner;
       this.output = output;
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 c6156ac..28681d4 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
@@ -761,6 +761,10 @@
   }
 
   static class Builder {
+    protected static Package newPackage(PackageIdentifier packageId) {
+      return new Package(packageId);
+    }
+
     /**
      * The output instance for this builder. Needs to be instantiated and
      * available with name info throughout initialization. All other settings
@@ -822,10 +826,9 @@
       }
     }
 
-    protected static Package newPackage(PackageIdentifier packageId) {
-      return new Package(packageId);
+    Builder(PackageIdentifier id) {
+      this(newPackage(id));
     }
-    Builder(PackageIdentifier id) { this(newPackage(id)); }
 
     protected PackageIdentifier getPackageIdentifier() {
       return pkg.getPackageIdentifier();
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/NativeLibs.java b/src/main/java/com/google/devtools/build/lib/rules/android/NativeLibs.java
index 35ae4b8..b1f2233 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/NativeLibs.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/NativeLibs.java
@@ -146,9 +146,10 @@
 
     Artifact inputManifest = AndroidBinary.getDxArtifact(ruleContext, "native_symlinks.manifest");
     ruleContext.registerAction(new SourceManifestAction.Builder(
-        ManifestType.SOURCE_SYMLINKS, ruleContext.getActionOwner(), inputManifest)
-        .addRootSymlinks(symlinks)
-        .build());
+        ruleContext.getWorkspaceName(), ManifestType.SOURCE_SYMLINKS, ruleContext.getActionOwner(),
+        inputManifest)
+            .addRootSymlinks(symlinks)
+            .build());
     Artifact outputManifest = AndroidBinary.getDxArtifact(ruleContext, "native_symlinks/MANIFEST");
     ruleContext.registerAction(new SymlinkTreeAction(
         ruleContext.getActionOwner(), inputManifest, outputManifest, false));
