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 fc2b379..b7ef184 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
@@ -909,6 +909,10 @@
       return self();
     }
 
+    MakeEnvironment.Builder getMakeEnvironment() {
+      return makeEnv;
+    }
+
     /**
      * Sets the default visibility for this package. Called at most once per
      * package from PackageFactory.
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 df3c002..353b23e 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
@@ -139,8 +139,7 @@
     /**
      * Update the global environment with the identifiers this extension contributes.
      */
-    void update(Environment environment, MakeEnvironment.Builder pkgMakeEnv,
-        Label buildFileLabel);
+    void update(Environment environment, Label buildFileLabel);
 
     /**
      * Returns the extra functions needed to be added to the Skylark native module.
@@ -1091,6 +1090,13 @@
     public Label getLabel() {
       return pkgBuilder.getBuildFileLabel();
     }
+
+    /**
+     * Returns the MakeEnvironment Builder of this Package.
+     */
+    public MakeEnvironment.Builder getMakeEnvironment() {
+      return pkgBuilder.getMakeEnvironment();
+    }
   }
 
   /**
@@ -1110,7 +1116,7 @@
   }
 
   private void buildPkgEnv(Environment pkgEnv, String packageName,
-      MakeEnvironment.Builder pkgMakeEnv, PackageContext context, RuleFactory ruleFactory) {
+      PackageContext context, RuleFactory ruleFactory) {
     pkgEnv.update("distribs", newDistribsFunction(context));
     pkgEnv.update("glob", newGlobFunction(context, /*async=*/false));
     pkgEnv.update("mocksubinclude", newMockSubincludeFunction(context));
@@ -1129,7 +1135,7 @@
     }
 
     for (EnvironmentExtension extension : environmentExtensions) {
-      extension.update(pkgEnv, pkgMakeEnv, context.pkgBuilder.getBuildFileLabel());
+      extension.update(pkgEnv, context.pkgBuilder.getBuildFileLabel());
     }
   }
 
@@ -1178,7 +1184,7 @@
 
     // Stuff that closes over the package context:`
     PackageContext context = new PackageContext(pkgBuilder, globber, eventHandler);
-    buildPkgEnv(pkgEnv, packageId.toString(), pkgMakeEnv, context, ruleFactory);
+    buildPkgEnv(pkgEnv, packageId.toString(), context, ruleFactory);
 
     if (containsError) {
       pkgBuilder.setContainsErrors();
@@ -1242,7 +1248,7 @@
 
     // Stuff that closes over the package context:
     PackageContext context = new PackageContext(pkgBuilder, globber, NullEventHandler.INSTANCE);
-    buildPkgEnv(pkgEnv, packageId.toString(), pkgMakeEnv, context, ruleFactory);
+    buildPkgEnv(pkgEnv, packageId.toString(), context, ruleFactory);
     pkgEnv.update("glob", newGlobFunction(context, /*async=*/true));
     // The Fileset function is heavyweight in that it can run glob(). Avoid this during the
     // preloading phase.
diff --git a/src/main/java/com/google/devtools/build/lib/rules/SkylarkRuleContext.java b/src/main/java/com/google/devtools/build/lib/rules/SkylarkRuleContext.java
index 826d9f5..b4af019 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/SkylarkRuleContext.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/SkylarkRuleContext.java
@@ -115,7 +115,7 @@
 
   private final ImmutableMap<Artifact, FilesToRunProvider> executableRunfilesMap;
 
-  private final Map<String, String> makeVariables;
+  private final ImmutableMap<String, String> makeVariables;
 
   /**
    * In native code, private values start with $.
@@ -393,7 +393,7 @@
 
   @SkylarkCallable(structField = true,
       doc = "Dictionary (String to String) of configuration variables")
-  public Map<String, String> var() {
+  public ImmutableMap<String, String> var() {
     return makeVariables;
   }
 
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 dbd84e7..005b528 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
@@ -27,7 +27,6 @@
 import com.google.devtools.build.lib.analysis.WorkspaceStatusAction;
 import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
 import com.google.devtools.build.lib.exec.OutputService;
-import com.google.devtools.build.lib.packages.MakeEnvironment;
 import com.google.devtools.build.lib.packages.NoSuchThingException;
 import com.google.devtools.build.lib.packages.PackageFactory;
 import com.google.devtools.build.lib.packages.PackageFactory.PackageArgument;
@@ -352,9 +351,7 @@
   public PackageFactory.EnvironmentExtension getPackageEnvironmentExtension() {
     return new PackageFactory.EnvironmentExtension() {
       @Override
-      public void update(
-          Environment environment, MakeEnvironment.Builder pkgMakeEnv, Label buildFileLabel) {
-      }
+      public void update(Environment environment, Label buildFileLabel) {}
 
       @Override
       public Iterable<PackageArgument<?>> getPackageArguments() {
