diff --git a/src/main/java/com/android/tools/r8/naming/MethodNamingState.java b/src/main/java/com/android/tools/r8/naming/MethodNamingState.java
index 2b78da9..e758dfc 100644
--- a/src/main/java/com/android/tools/r8/naming/MethodNamingState.java
+++ b/src/main/java/com/android/tools/r8/naming/MethodNamingState.java
@@ -6,8 +6,9 @@
 import com.android.tools.r8.graph.DexMethod;
 import com.android.tools.r8.graph.DexString;
 import com.android.tools.r8.naming.MethodNamingState.InternalNewNameState;
-import com.google.common.collect.BiMap;
-import com.google.common.collect.HashBiMap;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
 import java.util.Set;
 import java.util.function.BiPredicate;
 import java.util.function.Function;
@@ -69,8 +70,8 @@
   }
 
   boolean isAvailable(DexString candidate, DexMethod method) {
-    DexString usedBy = getUsedBy(candidate, method);
-    if (usedBy != null && usedBy.equals(method.name)) {
+    Set<DexString> usedBy = getUsedBy(candidate, method);
+    if (usedBy != null && usedBy.contains(method.name)) {
       return true;
     }
     boolean isReserved = reservationState.isReserved(candidate, method);
@@ -86,9 +87,9 @@
     return false;
   }
 
-  private DexString getUsedBy(DexString name, DexMethod method) {
+  private Set<DexString> getUsedBy(DexString name, DexMethod method) {
     InternalNewNameState internalState = getInternalState(method);
-    DexString nameUsedBy = null;
+    Set<DexString> nameUsedBy = null;
     if (internalState != null) {
       nameUsedBy = internalState.getUsedBy(name);
     }
@@ -122,7 +123,8 @@
   static class InternalNewNameState implements InternalNamingState {
 
     private final InternalNewNameState parentInternalState;
-    private BiMap<DexString, DexString> originalToRenamedNames = HashBiMap.create();
+    private Map<DexString, DexString> originalToRenamedNames = new HashMap<>();
+    private Map<DexString, Set<DexString>> usedBy = new HashMap<>();
 
     private static final int INITIAL_NAME_COUNT = 1;
     private static final int INITIAL_DICTIONARY_INDEX = 0;
@@ -151,8 +153,8 @@
       return dictionaryIndex++;
     }
 
-    DexString getUsedBy(DexString name) {
-      return originalToRenamedNames.inverse().get(name);
+    Set<DexString> getUsedBy(DexString name) {
+      return usedBy.get(name);
     }
 
     DexString getAssignedName(DexString originalName) {
@@ -161,6 +163,7 @@
 
     void addRenaming(DexString newName, DexMethod method) {
       originalToRenamedNames.put(method.name, newName);
+      usedBy.computeIfAbsent(newName, ignore -> new HashSet<>()).add(method.name);
     }
 
     private boolean checkParentPublicNameCountIsLessThanOrEqual() {
diff --git a/src/main/java/com/android/tools/r8/naming/ProguardMapMinifier.java b/src/main/java/com/android/tools/r8/naming/ProguardMapMinifier.java
index e25d81e..37e5f39 100644
--- a/src/main/java/com/android/tools/r8/naming/ProguardMapMinifier.java
+++ b/src/main/java/com/android/tools/r8/naming/ProguardMapMinifier.java
@@ -478,7 +478,8 @@
               source.toSourceString(),
               name.toString(),
               memberNaming == null ? Position.UNKNOWN : memberNaming.position);
-      reporter.error(applyMappingError);
+      // TODO(b/136694827) Enable when we have proper support
+      // reporter.error(applyMappingError);
     }
   }
 }
diff --git a/src/main/java/com/android/tools/r8/naming/SeedMapper.java b/src/main/java/com/android/tools/r8/naming/SeedMapper.java
index 8d0ece57..d7f36da 100644
--- a/src/main/java/com/android/tools/r8/naming/SeedMapper.java
+++ b/src/main/java/com/android/tools/r8/naming/SeedMapper.java
@@ -107,20 +107,21 @@
                 descriptorToInternalName(classNaming.renamedName),
                 classNaming.position));
       }
-      Map<Signature, MemberNaming> seenMembers = new HashMap<>();
-      classNaming.forAllMemberNaming(
-          memberNaming -> {
-            MemberNaming existingMember =
-                seenMembers.put(memberNaming.renamedSignature, memberNaming);
-            if (existingMember != null) {
-              reporter.error(
-                  ProguardMapError.duplicateTargetSignature(
-                      existingMember.signature,
-                      memberNaming.signature,
-                      memberNaming.getRenamedName(),
-                      memberNaming.position));
-            }
-          });
+      // TODO(b/136694827) Enable when we have proper support
+      // Map<Signature, MemberNaming> seenMembers = new HashMap<>();
+      // classNaming.forAllMemberNaming(
+      //     memberNaming -> {
+      //       MemberNaming existingMember =
+      //           seenMembers.put(memberNaming.renamedSignature, memberNaming);
+      //       if (existingMember != null) {
+      //         reporter.error(
+      //             ProguardMapError.duplicateTargetSignature(
+      //                 existingMember.signature,
+      //                 memberNaming.signature,
+      //                 memberNaming.getRenamedName(),
+      //                 memberNaming.position));
+      //       }
+      //     });
     }
     reporter.failIfPendingErrors();
   }
