diff --git a/src/main/java/com/android/tools/r8/dexsplitter/DexSplitter.java b/src/main/java/com/android/tools/r8/dexsplitter/DexSplitter.java
index 5e8d54d..b2fe1bc 100644
--- a/src/main/java/com/android/tools/r8/dexsplitter/DexSplitter.java
+++ b/src/main/java/com/android/tools/r8/dexsplitter/DexSplitter.java
@@ -25,6 +25,7 @@
 public class DexSplitter {
 
   private static final String DEFAULT_OUTPUT_DIR = "output";
+  private static final String DEFAULT_BASE_NAME = "base";
 
   private static final boolean PRINT_ARGS = false;
 
@@ -63,6 +64,7 @@
   public static class Options {
     private List<String> inputArchives = new ArrayList<>();
     private List<FeatureJar> featureJars = new ArrayList<>();
+    private String baseOutputName = DEFAULT_BASE_NAME;
     private String output = DEFAULT_OUTPUT_DIR;
     private String featureSplitMapping;
     private String proguardMap;
@@ -91,6 +93,14 @@
       this.proguardMap = proguardMap;
     }
 
+    public String getBaseOutputName() {
+      return baseOutputName;
+    }
+
+    public void setBaseOutputName(String baseOutputName) {
+      this.baseOutputName = baseOutputName;
+    }
+
     public void addInputArchive(String inputArchive) {
       inputArchives.add(inputArchive);
     }
@@ -159,6 +169,11 @@
         options.setProguardMap(proguardMap);
         continue;
       }
+      String baseOutputName = OptionsParsing.tryParseSingle(context, "--base-output-name", null);
+      if (baseOutputName != null) {
+        options.setBaseOutputName(baseOutputName);
+        continue;
+      }
       String featureSplit = OptionsParsing.tryParseSingle(context, "--feature-splits", null);
       if (featureSplit != null) {
         options.setFeatureSplitMapping(featureSplit);
@@ -175,7 +190,7 @@
       return FeatureClassMapping.fromSpecification(Paths.get(options.getFeatureSplitMapping()));
     }
     assert !options.getFeatureJars().isEmpty();
-    return FeatureClassMapping.fromJarFiles(options.getFeatureJars());
+    return FeatureClassMapping.fromJarFiles(options.getFeatureJars(), options.getBaseOutputName());
   }
 
   private static void run(String[] args)
diff --git a/src/main/java/com/android/tools/r8/utils/FeatureClassMapping.java b/src/main/java/com/android/tools/r8/utils/FeatureClassMapping.java
index 6893eb1..5281eac 100644
--- a/src/main/java/com/android/tools/r8/utils/FeatureClassMapping.java
+++ b/src/main/java/com/android/tools/r8/utils/FeatureClassMapping.java
@@ -43,14 +43,18 @@
   HashSet<FeaturePredicate> mappings = new HashSet<>();
 
   Path mappingFile;
+  String baseName;
+
+  static final String DEFAULT_BASE_NAME = "base";
 
   static final String COMMENT = "#";
   static final String SEPARATOR = ":";
-  static final String BASE_NAME = "base";
+
 
   public static FeatureClassMapping fromSpecification(Path file)
       throws FeatureMappingException, IOException {
     FeatureClassMapping mapping = new FeatureClassMapping();
+    mapping.baseName = DEFAULT_BASE_NAME;
     List<String> lines = FileUtils.readAllLines(file);
     for (int i = 0; i < lines.size(); i++) {
       String line = lines.get(i);
@@ -59,9 +63,10 @@
     return mapping;
   }
 
-  public static FeatureClassMapping fromJarFiles(List<FeatureJar> featureJars)
+  public static FeatureClassMapping fromJarFiles(List<FeatureJar> featureJars, String baseName)
       throws FeatureMappingException, IOException {
     FeatureClassMapping mapping = new FeatureClassMapping();
+    mapping.baseName = baseName != null ? baseName : DEFAULT_BASE_NAME;
     for (FeatureJar featureJar : featureJars) {
       Path jarPath = Paths.get(featureJar.getJar());
       ArchiveClassFileProvider provider = new ArchiveClassFileProvider(jarPath);
@@ -97,7 +102,7 @@
       }
     }
     if (bestMatch == null) {
-      return BASE_NAME;
+      return baseName;
     }
     return bestMatch.feature;
   }
diff --git a/src/test/java/com/android/tools/r8/dexsplitter/DexSplitterTests.java b/src/test/java/com/android/tools/r8/dexsplitter/DexSplitterTests.java
index ed293f6..5bbb9d5 100644
--- a/src/test/java/com/android/tools/r8/dexsplitter/DexSplitterTests.java
+++ b/src/test/java/com/android/tools/r8/dexsplitter/DexSplitterTests.java
@@ -280,6 +280,9 @@
       options.setOutput(output.toString());
       if (explicitBase) {
         options.addFeatureJar(baseJar.toString());
+      } else {
+        // Ensure that we can rename base (if people called a feature base)
+        options.setBaseOutputName("base_renamed");
       }
       options.addFeatureJar(featureJar.toString(), specificOutputName);
       DexSplitter.run(options);
@@ -294,11 +297,15 @@
       if (explicitBase) {
         args.add("--feature-jar");
         args.add(baseJar.toString());
+      } else {
+        args.add("--base-output-name");
+        args.add("base_renamed");
       }
 
       DexSplitter.main(args.toArray(new String[0]));
     }
-    Path base = output.resolve("base").resolve("classes.dex");
+    String baseOutputName = explicitBase ? "base" : "base_renamed";
+    Path base = output.resolve(baseOutputName).resolve("classes.dex");
     Path feature = output.resolve(specificOutputName).resolve("classes.dex");;
     validateUnobfuscatedOutput(base, feature);
   }
