diff --git a/src/main/java/com/android/tools/r8/graph/AppliedGraphLens.java b/src/main/java/com/android/tools/r8/graph/AppliedGraphLens.java
index a05960f..8618c4e 100644
--- a/src/main/java/com/android/tools/r8/graph/AppliedGraphLens.java
+++ b/src/main/java/com/android/tools/r8/graph/AppliedGraphLens.java
@@ -120,14 +120,6 @@
   }
 
   @Override
-  public DexMethod getOriginalMethodSignature(DexMethod method) {
-    if (extraOriginalMethodSignatures.containsKey(method)) {
-      return extraOriginalMethodSignatures.get(method);
-    }
-    return originalMethodSignatures.getOrDefault(method, method);
-  }
-
-  @Override
   public DexField getRenamedFieldSignature(DexField originalField) {
     return originalFieldSignatures.inverse().getOrDefault(originalField, originalField);
   }
@@ -162,7 +154,10 @@
 
   @Override
   protected DexMethod internalGetPreviousMethodSignature(DexMethod method) {
-    return method;
+    if (extraOriginalMethodSignatures.containsKey(method)) {
+      return extraOriginalMethodSignatures.get(method);
+    }
+    return originalMethodSignatures.getOrDefault(method, method);
   }
 
   @Override
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 a81d742..3b816d8 100644
--- a/src/main/java/com/android/tools/r8/graph/GraphLens.java
+++ b/src/main/java/com/android/tools/r8/graph/GraphLens.java
@@ -285,7 +285,21 @@
 
   public abstract DexField getOriginalFieldSignature(DexField field);
 
-  public abstract DexMethod getOriginalMethodSignature(DexMethod method);
+  public final DexMethod getOriginalMethodSignature(DexMethod method) {
+    return getOriginalMethodSignature(method, null);
+  }
+
+  public final DexMethod getOriginalMethodSignature(DexMethod method, GraphLens atGraphLens) {
+    GraphLens current = this;
+    DexMethod original = method;
+    while (current.isNonIdentityLens() && current != atGraphLens) {
+      NonIdentityGraphLens nonIdentityLens = current.asNonIdentityLens();
+      original = nonIdentityLens.internalGetPreviousMethodSignature(original);
+      current = nonIdentityLens.getPrevious();
+    }
+    assert atGraphLens == null ? current.isIdentityLens() : (current == atGraphLens);
+    return original;
+  }
 
   public abstract DexField getRenamedFieldSignature(DexField originalField);
 
@@ -856,11 +870,6 @@
     }
 
     @Override
-    public DexMethod getOriginalMethodSignature(DexMethod method) {
-      return method;
-    }
-
-    @Override
     public DexField getRenamedFieldSignature(DexField originalField) {
       return originalField;
     }
@@ -950,11 +959,6 @@
     }
 
     @Override
-    public DexMethod getOriginalMethodSignature(DexMethod method) {
-      return getPrevious().getOriginalMethodSignature(method);
-    }
-
-    @Override
     public DexField getRenamedFieldSignature(DexField originalField) {
       return getPrevious().getRenamedFieldSignature(originalField);
     }
diff --git a/src/main/java/com/android/tools/r8/graph/NestedGraphLens.java b/src/main/java/com/android/tools/r8/graph/NestedGraphLens.java
index 00bd8bb..62ce9d8 100644
--- a/src/main/java/com/android/tools/r8/graph/NestedGraphLens.java
+++ b/src/main/java/com/android/tools/r8/graph/NestedGraphLens.java
@@ -130,12 +130,6 @@
   }
 
   @Override
-  public DexMethod getOriginalMethodSignature(DexMethod method) {
-    DexMethod originalMethod = internalGetPreviousMethodSignature(method);
-    return getPrevious().getOriginalMethodSignature(originalMethod);
-  }
-
-  @Override
   public DexField getRenamedFieldSignature(DexField originalField) {
     DexField renamedField = getPrevious().getRenamedFieldSignature(originalField);
     return internalGetNextFieldSignature(renamedField);
diff --git a/src/main/java/com/android/tools/r8/optimize/FieldRebindingIdentityLens.java b/src/main/java/com/android/tools/r8/optimize/FieldRebindingIdentityLens.java
index d949ab2..e63eb5e 100644
--- a/src/main/java/com/android/tools/r8/optimize/FieldRebindingIdentityLens.java
+++ b/src/main/java/com/android/tools/r8/optimize/FieldRebindingIdentityLens.java
@@ -71,11 +71,6 @@
   }
 
   @Override
-  public DexMethod getOriginalMethodSignature(DexMethod method) {
-    return getPrevious().getOriginalMethodSignature(method);
-  }
-
-  @Override
   public DexField getRenamedFieldSignature(DexField originalField) {
     return getPrevious().getRenamedFieldSignature(originalField);
   }
diff --git a/src/main/java/com/android/tools/r8/optimize/MemberRebindingIdentityLens.java b/src/main/java/com/android/tools/r8/optimize/MemberRebindingIdentityLens.java
index 8873add..0e6b99f 100644
--- a/src/main/java/com/android/tools/r8/optimize/MemberRebindingIdentityLens.java
+++ b/src/main/java/com/android/tools/r8/optimize/MemberRebindingIdentityLens.java
@@ -100,11 +100,6 @@
   }
 
   @Override
-  public DexMethod getOriginalMethodSignature(DexMethod method) {
-    return getPrevious().getOriginalMethodSignature(method);
-  }
-
-  @Override
   public DexField getRenamedFieldSignature(DexField originalField) {
     return getPrevious().getRenamedFieldSignature(originalField);
   }
diff --git a/src/main/java/com/android/tools/r8/optimize/MemberRebindingLens.java b/src/main/java/com/android/tools/r8/optimize/MemberRebindingLens.java
index d202af8..8861f6c 100644
--- a/src/main/java/com/android/tools/r8/optimize/MemberRebindingLens.java
+++ b/src/main/java/com/android/tools/r8/optimize/MemberRebindingLens.java
@@ -68,11 +68,6 @@
   }
 
   @Override
-  public DexMethod getOriginalMethodSignature(DexMethod method) {
-    return getPrevious().getOriginalMethodSignature(method);
-  }
-
-  @Override
   public DexField getRenamedFieldSignature(DexField originalField) {
     return getPrevious().getRenamedFieldSignature(originalField);
   }
diff --git a/src/main/java/com/android/tools/r8/optimize/bridgehoisting/BridgeHoistingLens.java b/src/main/java/com/android/tools/r8/optimize/bridgehoisting/BridgeHoistingLens.java
index 6a6c3bb..c387c1c 100644
--- a/src/main/java/com/android/tools/r8/optimize/bridgehoisting/BridgeHoistingLens.java
+++ b/src/main/java/com/android/tools/r8/optimize/bridgehoisting/BridgeHoistingLens.java
@@ -27,11 +27,6 @@
   }
 
   @Override
-  public DexMethod getOriginalMethodSignature(DexMethod method) {
-    return getPrevious().getOriginalMethodSignature(internalGetPreviousMethodSignature(method));
-  }
-
-  @Override
   public DexMethod getRenamedMethodSignature(DexMethod originalMethod, GraphLens applied) {
     DexMethod renamedMethod = getPrevious().getRenamedMethodSignature(originalMethod, applied);
     return bridgeToHoistedBridgeMap.getOrDefault(renamedMethod, renamedMethod);
diff --git a/src/main/java/com/android/tools/r8/shaking/VerticalClassMergerGraphLens.java b/src/main/java/com/android/tools/r8/shaking/VerticalClassMergerGraphLens.java
index f2732f6..ea9f971 100644
--- a/src/main/java/com/android/tools/r8/shaking/VerticalClassMergerGraphLens.java
+++ b/src/main/java/com/android/tools/r8/shaking/VerticalClassMergerGraphLens.java
@@ -95,12 +95,6 @@
   }
 
   @Override
-  public DexMethod getOriginalMethodSignature(DexMethod method) {
-    return super.getOriginalMethodSignature(
-        originalMethodSignaturesForBridges.getOrDefault(method, method));
-  }
-
-  @Override
   public MethodLookupResult internalDescribeLookupMethod(
       MethodLookupResult previous, DexMethod context) {
     assert context != null || verifyIsContextFreeForMethod(previous.getReference());
@@ -135,6 +129,12 @@
   }
 
   @Override
+  protected DexMethod internalGetPreviousMethodSignature(DexMethod method) {
+    return super.internalGetPreviousMethodSignature(
+        originalMethodSignaturesForBridges.getOrDefault(method, method));
+  }
+
+  @Override
   protected Type mapInvocationType(DexMethod newMethod, DexMethod originalMethod, Type type) {
     return mapVirtualInterfaceInvocationTypes(appView, newMethod, originalMethod, type);
   }
