diff --git a/src/main/java/com/android/tools/r8/Version.java b/src/main/java/com/android/tools/r8/Version.java
index 40eaf83..62988d6 100644
--- a/src/main/java/com/android/tools/r8/Version.java
+++ b/src/main/java/com/android/tools/r8/Version.java
@@ -11,7 +11,7 @@
 
   // This field is accessed from release scripts using simple pattern matching.
   // Therefore, changing this field could break our release scripts.
-  public static final String LABEL = "2.0.21";
+  public static final String LABEL = "2.0.22";
 
   private Version() {
   }
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/IRConverter.java b/src/main/java/com/android/tools/r8/ir/conversion/IRConverter.java
index 1971ae0..7b6df447 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/IRConverter.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/IRConverter.java
@@ -400,10 +400,11 @@
     }
   }
 
-  private void synthesizeLambdaClasses(Builder<?> builder, ExecutorService executorService)
+  private void synthesizeLambdaClasses(
+      Builder<?> builder, OptimizationFeedback feedback, ExecutorService executorService)
       throws ExecutionException {
     if (lambdaRewriter != null) {
-      lambdaRewriter.adjustAccessibility(this);
+      lambdaRewriter.adjustAccessibility(this, feedback);
       lambdaRewriter.synthesizeLambdaClasses(builder);
       lambdaRewriter.optimizeSynthesizedClasses(this, executorService);
     }
@@ -467,7 +468,7 @@
     builder.setHighestSortingString(highestSortingString);
 
     desugarNestBasedAccess(builder, executor);
-    synthesizeLambdaClasses(builder, executor);
+    synthesizeLambdaClasses(builder, simpleOptimizationFeedback, executor);
     desugarInterfaceMethods(builder, simpleOptimizationFeedback, ExcludeDexResources, executor);
     synthesizeTwrCloseResourceUtilityClass(builder, executor);
     synthesizeJava8UtilityClass(builder, executor);
@@ -714,7 +715,7 @@
     builder.setHighestSortingString(highestSortingString);
 
     printPhase("Lambda class synthesis");
-    synthesizeLambdaClasses(builder, executorService);
+    synthesizeLambdaClasses(builder, feedback, executorService);
 
     printPhase("Interface method desugaring");
     desugarInterfaceMethods(builder, feedback, IncludeAllResources, executorService);
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/LambdaClass.java b/src/main/java/com/android/tools/r8/ir/desugar/LambdaClass.java
index 18edf5f..4254d23 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/LambdaClass.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/LambdaClass.java
@@ -28,6 +28,7 @@
 import com.android.tools.r8.ir.code.Invoke;
 import com.android.tools.r8.ir.code.Invoke.Type;
 import com.android.tools.r8.ir.conversion.IRConverter;
+import com.android.tools.r8.ir.optimize.info.OptimizationFeedback;
 import com.android.tools.r8.ir.synthetic.SynthesizedCode;
 import com.android.tools.r8.origin.SynthesizedOrigin;
 import com.android.tools.r8.utils.InternalOptions;
@@ -510,7 +511,7 @@
     }
 
     // Ensure access of the referenced symbol(s).
-    abstract void ensureAccessibility(IRConverter converter);
+    abstract void ensureAccessibility(IRConverter converter, OptimizationFeedback feedback);
 
     DexClass definitionFor(DexType type) {
       return rewriter.getAppInfo().app().definitionFor(type);
@@ -553,7 +554,7 @@
     }
 
     @Override
-    void ensureAccessibility(IRConverter converter) {}
+    void ensureAccessibility(IRConverter converter, OptimizationFeedback feedback) {}
   }
 
   // Used for static private lambda$ methods. Only needs access relaxation.
@@ -564,7 +565,7 @@
     }
 
     @Override
-    void ensureAccessibility(IRConverter converter) {
+    void ensureAccessibility(IRConverter converter, OptimizationFeedback feedback) {
       // We already found the static method to be called, just relax its accessibility.
       assert descriptor.getAccessibility() != null;
       descriptor.getAccessibility().unsetPrivate();
@@ -584,7 +585,7 @@
     }
 
     @Override
-    void ensureAccessibility(IRConverter converter) {
+    void ensureAccessibility(IRConverter converter, OptimizationFeedback feedback) {
       // For all instantiation points for which the compiler creates lambda$
       // methods, it creates these methods in the same class/interface.
       DexMethod implMethod = descriptor.implHandle.asMethod();
@@ -610,7 +611,7 @@
                   encodedMethod.parameterAnnotationsList,
                   encodedMethod.getCode(),
                   true);
-          newMethod.copyMetadata(encodedMethod);
+          newMethod.copyMetadata(encodedMethod, feedback);
           rewriter.methodMapping.put(encodedMethod.method, callTarget);
 
           DexEncodedMethod.setDebugInfoWithFakeThisParameter(
@@ -632,7 +633,7 @@
     }
 
     @Override
-    void ensureAccessibility(IRConverter converter) {
+    void ensureAccessibility(IRConverter converter, OptimizationFeedback feedback) {
       // For all instantiation points for which the compiler creates lambda$
       // methods, it creates these methods in the same class/interface.
       DexMethod implMethod = descriptor.implHandle.asMethod();
@@ -655,7 +656,7 @@
                   encodedMethod.parameterAnnotationsList,
                   encodedMethod.getCode(),
                   true);
-          newMethod.copyMetadata(encodedMethod);
+          newMethod.copyMetadata(encodedMethod, feedback);
           rewriter.methodMapping.put(encodedMethod.method, callTarget);
           // Move the method from the direct methods to the virtual methods set.
           implMethodHolder.removeDirectMethod(i);
@@ -675,7 +676,7 @@
     }
 
     @Override
-    void ensureAccessibility(IRConverter converter) {
+    void ensureAccessibility(IRConverter converter, OptimizationFeedback feedback) {
       // Create a static accessor with proper accessibility.
       DexProgramClass accessorClass = programDefinitionFor(callTarget.holder);
       assert accessorClass != null;
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/LambdaRewriter.java b/src/main/java/com/android/tools/r8/ir/desugar/LambdaRewriter.java
index 92d04f0..7a2a30f 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/LambdaRewriter.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/LambdaRewriter.java
@@ -33,6 +33,7 @@
 import com.android.tools.r8.ir.code.Value;
 import com.android.tools.r8.ir.conversion.IRConverter;
 import com.android.tools.r8.ir.conversion.LensCodeRewriter;
+import com.android.tools.r8.ir.optimize.info.OptimizationFeedback;
 import com.android.tools.r8.ir.optimize.info.OptimizationFeedbackDelayed;
 import com.android.tools.r8.shaking.AppInfoWithLiveness;
 import com.android.tools.r8.utils.DescriptorUtils;
@@ -250,13 +251,13 @@
   }
 
   /** Adjust accessibility of referenced application symbols or creates necessary accessors. */
-  public void adjustAccessibility(IRConverter converter) {
+  public void adjustAccessibility(IRConverter converter, OptimizationFeedback feedback) {
     // For each lambda class perform necessary adjustment of the
     // referenced symbols to make them accessible. This can result in
     // method access relaxation or creation of accessor method.
     for (LambdaClass lambdaClass : knownLambdaClasses.values()) {
       // This call may cause methodMapping to be updated.
-      lambdaClass.target.ensureAccessibility(converter);
+      lambdaClass.target.ensureAccessibility(converter, feedback);
     }
     if (getAppView().enableWholeProgramOptimizations() && !methodMapping.isEmpty()) {
       getAppView()
diff --git a/src/main/java/com/android/tools/r8/naming/IdentifierMinifier.java b/src/main/java/com/android/tools/r8/naming/IdentifierMinifier.java
index 481a46c..dad4c94 100644
--- a/src/main/java/com/android/tools/r8/naming/IdentifierMinifier.java
+++ b/src/main/java/com/android/tools/r8/naming/IdentifierMinifier.java
@@ -157,7 +157,13 @@
           || (encodedMethod.getCode().isCfCode()
               && encodedMethod.getCode().asCfCode().instructions.stream()
                   .noneMatch(CfInstruction::isDexItemBasedConstString));
-      return;
+      // This return statement is commented out on the 2.0 branch. The change merged to fix
+      // b/147718617 (version 2.0.21) revealed that there could be other places where the
+      // identifier name string marker is not propagated. Due to changes to desugaring on the 2.1
+      // version line coverage of the propagation of this flag is unknown. Conservatively looking
+      // at all code for identifier name string instructions is safer.
+      //
+      // return;
     }
     Code code = encodedMethod.getCode();
     assert code != null;
