diff --git a/src/main/java/com/android/tools/r8/D8Command.java b/src/main/java/com/android/tools/r8/D8Command.java
index 35d22bb..d7cbd04 100644
--- a/src/main/java/com/android/tools/r8/D8Command.java
+++ b/src/main/java/com/android/tools/r8/D8Command.java
@@ -29,6 +29,7 @@
 import com.android.tools.r8.utils.InternalOptions.DesugarState;
 import com.android.tools.r8.utils.InternalOptions.HorizontalClassMergerOptions;
 import com.android.tools.r8.utils.InternalOptions.LineNumberOptimization;
+import com.android.tools.r8.utils.InternalOptions.MappingComposeOptions;
 import com.android.tools.r8.utils.ProgramClassCollection;
 import com.android.tools.r8.utils.Reporter;
 import com.android.tools.r8.utils.StringDiagnostic;
@@ -636,7 +637,8 @@
         !internal.debug && proguardMapConsumer != null
             ? LineNumberOptimization.ON
             : LineNumberOptimization.OFF;
-
+    MappingComposeOptions mappingComposeOptions = internal.mappingComposeOptions();
+    mappingComposeOptions.enableExperimentalMappingComposition = true;
     // Assert and fixup defaults.
     assert !internal.isShrinking();
     assert !internal.isMinifying();
diff --git a/src/main/java/com/android/tools/r8/utils/InternalOptions.java b/src/main/java/com/android/tools/r8/utils/InternalOptions.java
index 335e328..d49f628 100644
--- a/src/main/java/com/android/tools/r8/utils/InternalOptions.java
+++ b/src/main/java/com/android/tools/r8/utils/InternalOptions.java
@@ -1800,8 +1800,8 @@
   }
 
   public static class MappingComposeOptions {
-    // TODO(b/241763080): Remove when enabled.
     public boolean enableExperimentalMappingComposition = false;
+
     // TODO(b/247136434): Disable for internal builds.
     public boolean allowNonExistingOriginalRanges = true;
     public Consumer<ClassNameMapper> generatedClassNameMapperConsumer = null;
diff --git a/src/main/java/com/android/tools/r8/utils/positions/LineNumberOptimizer.java b/src/main/java/com/android/tools/r8/utils/positions/LineNumberOptimizer.java
index 1965667..b961f22 100644
--- a/src/main/java/com/android/tools/r8/utils/positions/LineNumberOptimizer.java
+++ b/src/main/java/com/android/tools/r8/utils/positions/LineNumberOptimizer.java
@@ -53,7 +53,8 @@
     if (appView.options().mappingComposeOptions().generatedClassNameMapperConsumer != null) {
       appView.options().mappingComposeOptions().generatedClassNameMapperConsumer.accept(mapper);
     }
-    if (appView.options().mappingComposeOptions().enableExperimentalMappingComposition) {
+    if (appView.options().mappingComposeOptions().enableExperimentalMappingComposition
+        && appView.appInfo().app().getProguardMap() != null) {
       timing.begin("Proguard map composition");
       try {
         mapper =
diff --git a/src/test/java/com/android/tools/r8/retrace/RetraceStackTraceFunctionalCompositionTest.java b/src/test/java/com/android/tools/r8/retrace/RetraceStackTraceFunctionalCompositionTest.java
index 367e1b6..861e990 100644
--- a/src/test/java/com/android/tools/r8/retrace/RetraceStackTraceFunctionalCompositionTest.java
+++ b/src/test/java/com/android/tools/r8/retrace/RetraceStackTraceFunctionalCompositionTest.java
@@ -193,8 +193,6 @@
             .setMappingSupplier(
                 ProguardMappingSupplier.builder()
                     .setProguardMapProducer(ProguardMapProducer.fromPath(mappingFile))
-                    // TODO(b/241763080): Remove when stable.
-                    .setAllowExperimental(true)
                     .build())
             .build());
     return retracedLines;
@@ -246,8 +244,6 @@
         .addProgramFiles(r8Input)
         .addLibraryProvider(JdkClassFileProvider.fromSystemJdk())
         .addKeepRuleFiles(MAIN_KEEP)
-        // TODO(b/241763080): Remove when stable version is default.
-        .enableExperimentalMapFileVersion()
         .allowUnusedProguardConfigurationRules()
         .addDontObfuscate()
         .compile()
@@ -264,10 +260,10 @@
         .setMode(CompilationMode.RELEASE)
         .addProgramFiles(r8Input)
         .addLibraryProvider(JdkClassFileProvider.fromSystemJdk())
-        .enableExperimentalMapFileVersion()
-        // TODO(b/241763080): Enable CF PC test mapping for this compilation.
         .addOptionsModification(
-            options -> options.mappingComposeOptions().enableExperimentalMappingComposition = true)
+            options -> {
+              assertTrue(options.mappingComposeOptions().enableExperimentalMappingComposition);
+            })
         .apply(
             b ->
                 b.getBuilder()
