diff -r 523ce6a60abb src/share/classes/com/sun/tools/javac/comp/LambdaToMethod.java --- a/src/share/classes/com/sun/tools/javac/comp/LambdaToMethod.java Wed Jan 09 20:34:20 2013 +0100 +++ b/src/share/classes/com/sun/tools/javac/comp/LambdaToMethod.java Sun Jan 13 10:15:36 2013 -0800 @@ -1674,11 +1674,11 @@ } boolean inInterface = translatedSym.owner.isInterface(); boolean thisReferenced = !getSymbolMap(CAPTURED_THIS).isEmpty(); - boolean needInstance = thisReferenced || inInterface; + boolean needInstance = thisReferenced; // If instance access isn't needed, make it static // Interface methods much be public default methods, otherwise make it private - translatedSym.flags_field = SYNTHETIC | (needInstance? 0 : STATIC) | (inInterface? PUBLIC | DEFAULT : PRIVATE); + translatedSym.flags_field = SYNTHETIC | PRIVATE | (needInstance? (inInterface? DEFAULT : 0) : STATIC); //compute synthetic params ListBuffer params = ListBuffer.lb(); diff -r 523ce6a60abb src/share/classes/com/sun/tools/javac/jvm/Pool.java --- a/src/share/classes/com/sun/tools/javac/jvm/Pool.java Wed Jan 09 20:34:20 2013 +0100 +++ b/src/share/classes/com/sun/tools/javac/jvm/Pool.java Sun Jan 13 10:15:36 2013 -0800 @@ -293,6 +293,7 @@ expectedKind = Kinds.MTH; break; case ClassFile.REF_invokeStatic: + interfaceOwner = true; // Beginning in JDK 8 staticOk = true; case ClassFile.REF_invokeVirtual: case ClassFile.REF_invokeSpecial: