diff --git a/src/main/java/com/android/tools/r8/graph/GraphLens.java b/src/main/java/com/android/tools/r8/graph/GraphLens.java
index 188211d..46d91ef 100644
--- a/src/main/java/com/android/tools/r8/graph/GraphLens.java
+++ b/src/main/java/com/android/tools/r8/graph/GraphLens.java
@@ -386,6 +386,26 @@
     return false;
   }
 
+  // Predicate to see if a method definition is only changed by repackaging or synthetic
+  // finalization indicating that it is a simple renaming.
+  public final boolean isSimpleRenaming(DexMethod method) {
+    DexMethod methodToCompareAgainst = method;
+    DexMethod original = method;
+    GraphLens current = this;
+    while (current.isNonIdentityLens()) {
+      NonIdentityGraphLens nonIdentityLens = current.asNonIdentityLens();
+      original = nonIdentityLens.getPreviousMethodSignature(original);
+      if (current.isSimpleRenamingLens()) {
+        methodToCompareAgainst = original;
+      } else if (methodToCompareAgainst != original) {
+        return false;
+      }
+      assert nonIdentityLens.getPrevious() != null;
+      current = nonIdentityLens.getPrevious();
+    }
+    return true;
+  }
+
   public abstract String lookupPackageName(String pkg);
 
   public DexType lookupClassType(DexType type) {
@@ -572,6 +592,10 @@
     return false;
   }
 
+  public boolean isSimpleRenamingLens() {
+    return false;
+  }
+
   public abstract boolean isIdentityLens();
 
   public boolean isMemberRebindingLens() {
diff --git a/src/main/java/com/android/tools/r8/repackaging/RepackagingLens.java b/src/main/java/com/android/tools/r8/repackaging/RepackagingLens.java
index 64fe0eb..8b4ad76 100644
--- a/src/main/java/com/android/tools/r8/repackaging/RepackagingLens.java
+++ b/src/main/java/com/android/tools/r8/repackaging/RepackagingLens.java
@@ -66,6 +66,11 @@
         this::isSimpleTypeRenamingOrEqual);
   }
 
+  @Override
+  public boolean isSimpleRenamingLens() {
+    return true;
+  }
+
   private boolean isSimpleTypeRenamingOrEqual(DexType from, DexType to) {
     return from == to || newTypes.get(from) == to;
   }
diff --git a/src/main/java/com/android/tools/r8/synthesis/SyntheticFinalization.java b/src/main/java/com/android/tools/r8/synthesis/SyntheticFinalization.java
index 0d767c6..54ef01b 100644
--- a/src/main/java/com/android/tools/r8/synthesis/SyntheticFinalization.java
+++ b/src/main/java/com/android/tools/r8/synthesis/SyntheticFinalization.java
@@ -101,6 +101,11 @@
     public boolean isSyntheticFinalizationGraphLens() {
       return true;
     }
+
+    @Override
+    public boolean isSimpleRenamingLens() {
+      return true;
+    }
   }
 
   private static class Builder {
diff --git a/src/main/java/com/android/tools/r8/utils/positions/MappedPositionToClassNameMapperBuilder.java b/src/main/java/com/android/tools/r8/utils/positions/MappedPositionToClassNameMapperBuilder.java
index 1d53540..5603770 100644
--- a/src/main/java/com/android/tools/r8/utils/positions/MappedPositionToClassNameMapperBuilder.java
+++ b/src/main/java/com/android/tools/r8/utils/positions/MappedPositionToClassNameMapperBuilder.java
@@ -219,13 +219,12 @@
             || appView.isCfByteCodePassThrough(definition);
         return this;
       }
-      // TODO(b/169953605): Ensure we emit the residual signature information.
       if (mapFileVersion.isGreaterThan(MapVersion.MAP_VERSION_2_1)
-          && originalMethod != method.getReference()) {
+          && originalMethod != method.getReference()
+          && !appView.graphLens().isSimpleRenaming(residualMethod)) {
         methodMappingInfo.add(
             ResidualMethodSignatureMappingInformation.fromDexMethod(residualMethod));
       }
-
       MethodSignature residualSignature = MethodSignature.fromDexMethod(residualMethod);
 
       MemberNaming memberNaming = new MemberNaming(originalSignature, residualSignature);
@@ -234,9 +233,7 @@
       // Add simple "a() -> b" mapping if we won't have any other with concrete line numbers
       if (mappedPositions.isEmpty()) {
         MappedRange range =
-            getBuilder()
-                .addMappedRange(
-                    null, originalSignature, null, residualSignature.getName().toString());
+            getBuilder().addMappedRange(null, originalSignature, null, residualSignature.getName());
         methodMappingInfo.forEach(info -> range.addMappingInformation(info, Unreachable::raise));
         return this;
       }
