diff --git a/src/main/java/com/android/tools/r8/Version.java b/src/main/java/com/android/tools/r8/Version.java
index 6f2d5c3..5224657 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 = "1.6.66";
+  public static final String LABEL = "1.6.67";
 
   private Version() {
   }
diff --git a/src/main/java/com/android/tools/r8/graph/ResolutionResult.java b/src/main/java/com/android/tools/r8/graph/ResolutionResult.java
index 253d014..ae016be 100644
--- a/src/main/java/com/android/tools/r8/graph/ResolutionResult.java
+++ b/src/main/java/com/android/tools/r8/graph/ResolutionResult.java
@@ -83,10 +83,7 @@
       //   }
       //
       DexEncodedMethod singleTarget = asSingleTarget();
-      if (singleTarget.getCode() != null
-          && appInfo.hasAnyInstantiatedLambdas(singleTarget.method.holder)) {
-        result.add(singleTarget);
-      }
+      addIfDefaultMethodWithLambdaInstantiations(appInfo, singleTarget, result);
     }
 
     DexEncodedMethod encodedMethod = asResultOfResolve();
@@ -98,10 +95,8 @@
           }
         };
     // Default methods are looked up when looking at a specific subtype that does not override
-    // them.
-    // Otherwise, we would look up default methods that are actually never used. However, we have
-    // to
-    // add bridge methods, otherwise we can remove a bridge that will be used.
+    // them. Otherwise, we would look up default methods that are actually never used. However, we
+    // have to add bridge methods, otherwise we can remove a bridge that will be used.
     Consumer<DexEncodedMethod> addIfNotAbstractAndBridge =
         m -> {
           if (!m.accessFlags.isAbstract() && m.accessFlags.isBridge()) {
@@ -114,6 +109,9 @@
       DexClass clazz = appInfo.definitionFor(type);
       if (clazz.isInterface()) {
         ResolutionResult targetMethods = appInfo.resolveMethodOnInterface(clazz, method);
+        if (targetMethods.hasSingleTarget()) {
+          addIfDefaultMethodWithLambdaInstantiations(appInfo, targetMethods.asSingleTarget(), result);
+        }
         targetMethods.forEachTarget(addIfNotAbstractAndBridge);
       } else {
         ResolutionResult targetMethods = appInfo.resolveMethodOnClass(clazz, method);
@@ -123,6 +121,18 @@
     return result;
   }
 
+  default void addIfDefaultMethodWithLambdaInstantiations(
+      AppInfoWithSubtyping appInfo, DexEncodedMethod method, Set<DexEncodedMethod> result) {
+    if (method == null) {
+      return;
+    }
+    if (method.hasCode()) {
+      if (appInfo.hasAnyInstantiatedLambdas(method.method.holder)) {
+        result.add(method);
+      }
+    }
+  }
+
   class MultiResult implements ResolutionResult {
 
     private final ImmutableList<DexEncodedMethod> methods;
diff --git a/src/main/java/com/android/tools/r8/shaking/Enqueuer.java b/src/main/java/com/android/tools/r8/shaking/Enqueuer.java
index f602541..674db97 100644
--- a/src/main/java/com/android/tools/r8/shaking/Enqueuer.java
+++ b/src/main/java/com/android/tools/r8/shaking/Enqueuer.java
@@ -1929,6 +1929,7 @@
       return;
     }
 
+    // TODO(mkroghj): Remove pinnedItems check here.
     if (instantiatedTypes.contains(clazz)
         || instantiatedInterfaceTypes.contains(clazz)
         || pinnedItems.contains(clazz.type)) {
@@ -1944,8 +1945,8 @@
         if (currentClass == null || currentClass.lookupVirtualMethod(possibleTarget) != null) {
           continue;
         }
-        // TODO(zerny): Why does not not confer with lambdas and pinned too?
-        if (instantiatedTypes.contains(currentClass)) {
+        if (instantiatedTypes.contains(currentClass)
+            || instantiatedInterfaceTypes.contains(currentClass)) {
           markVirtualMethodAsLive(clazz, encodedPossibleTarget, reason);
           break;
         }
