diff --git a/src/main/java/com/android/tools/r8/MapConsumerToPartitionMapConsumer.java b/src/main/java/com/android/tools/r8/MapConsumerToPartitionMapConsumer.java
index fcd3113..2fd47d9 100644
--- a/src/main/java/com/android/tools/r8/MapConsumerToPartitionMapConsumer.java
+++ b/src/main/java/com/android/tools/r8/MapConsumerToPartitionMapConsumer.java
@@ -10,7 +10,9 @@
 import com.android.tools.r8.naming.ProguardMapMarkerInfo;
 import com.android.tools.r8.retrace.ProguardMapPartitioner;
 import com.android.tools.r8.retrace.internal.ProguardMapProducerInternal;
+import com.android.tools.r8.utils.ListUtils;
 import java.io.IOException;
+import java.util.List;
 
 public class MapConsumerToPartitionMapConsumer implements MapConsumer {
 
@@ -27,7 +29,9 @@
       ProguardMapMarkerInfo makerInfo,
       ClassNameMapper classNameMapper) {
     try {
-      classNameMapper.setPreamble(makerInfo.toPreamble());
+      List<String> newPreamble =
+          ListUtils.joinNewArrayList(makerInfo.toPreamble(), classNameMapper.getPreamble());
+      classNameMapper.setPreamble(newPreamble);
       partitionMapConsumer.acceptMappingPartitionMetadata(
           ProguardMapPartitioner.builder(diagnosticsHandler)
               .setProguardMapProducer(new ProguardMapProducerInternal(classNameMapper))
diff --git a/src/main/java/com/android/tools/r8/dex/ApplicationReader.java b/src/main/java/com/android/tools/r8/dex/ApplicationReader.java
index b58107d..d18a979 100644
--- a/src/main/java/com/android/tools/r8/dex/ApplicationReader.java
+++ b/src/main/java/com/android/tools/r8/dex/ApplicationReader.java
@@ -280,14 +280,13 @@
         executorService.submit(
             () -> {
               try {
-                String content = map.getString();
                 builder.setProguardMap(
                     ClassNameMapper.mapperFromString(
-                        content,
+                        map.getString(),
                         options.reporter,
                         options.mappingComposeOptions().allowEmptyMappedRanges,
                         options.testing.enableExperimentalMapFileVersion,
-                        false));
+                        true));
               } catch (IOException | ResourceException e) {
                 throw new CompilationError("Failure to read proguard map file", e, map.getOrigin());
               }
diff --git a/src/main/java/com/android/tools/r8/naming/ProguardMapStringConsumer.java b/src/main/java/com/android/tools/r8/naming/ProguardMapStringConsumer.java
index be3d3ba..71b60d9 100644
--- a/src/main/java/com/android/tools/r8/naming/ProguardMapStringConsumer.java
+++ b/src/main/java/com/android/tools/r8/naming/ProguardMapStringConsumer.java
@@ -7,6 +7,7 @@
 import com.android.tools.r8.DiagnosticsHandler;
 import com.android.tools.r8.StringConsumer;
 import com.android.tools.r8.utils.ChainableStringConsumer;
+import com.android.tools.r8.utils.StringUtils;
 
 /***
  * Default implementation of a MapConsumer that wraps around a string consumer for streamed string
@@ -29,6 +30,7 @@
       ClassNameMapper classNameMapper) {
     this.diagnosticsHandler = diagnosticsHandler;
     accept(markerInfo.serializeToString());
+    accept(StringUtils.unixLines(classNameMapper.getPreamble()));
     classNameMapper.write(this);
   }
 
diff --git a/src/test/java/com/android/tools/r8/mappingcompose/ComposeUnknownJsonD8Test.java b/src/test/java/com/android/tools/r8/mappingcompose/ComposeUnknownJsonD8Test.java
index fa42cf9..032f5da 100644
--- a/src/test/java/com/android/tools/r8/mappingcompose/ComposeUnknownJsonD8Test.java
+++ b/src/test/java/com/android/tools/r8/mappingcompose/ComposeUnknownJsonD8Test.java
@@ -5,7 +5,6 @@
 
 import static com.android.tools.r8.mappingcompose.ComposeTestHelpers.doubleToSingleQuote;
 import static org.hamcrest.CoreMatchers.containsString;
-import static org.hamcrest.CoreMatchers.not;
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.junit.Assert.assertTrue;
 
@@ -56,7 +55,10 @@
                 assertTrue(options.mappingComposeOptions().enableExperimentalMappingComposition))
         .apply(b -> b.getBuilder().setProguardInputMapFile(inputMap))
         .apply(testBuilder)
-        .compile();
+        .allowStdoutMessages()
+        .collectStdout()
+        .compile()
+        .assertStdoutThatMatches(containsString("Info: Could not find a handler for custom_info"));
   }
 
   @Test
@@ -67,8 +69,7 @@
             builder
                 .getBuilder()
                 .setProguardMapConsumer((string, handler) -> mappingComposed.append(string)));
-    // TODO(b/297927590): Should contain input preamble.
-    assertThat(doubleToSingleQuote(mappingComposed.toString()), not(containsString(CUSTOM_DATA)));
+    assertThat(doubleToSingleQuote(mappingComposed.toString()), containsString(CUSTOM_DATA));
   }
 
   @Test
@@ -99,8 +100,7 @@
         .setConsumer((string, handler) -> mappingComposed.append(string))
         .build()
         .run();
-    // TODO(b/297927590): Should contain input preamble.
-    assertThat(doubleToSingleQuote(mappingComposed.toString()), not(containsString(CUSTOM_DATA)));
+    assertThat(doubleToSingleQuote(mappingComposed.toString()), containsString(CUSTOM_DATA));
   }
 
   public static class A {}
