diff -r ec977a00cecb src/jdk.compiler/share/classes/com/sun/tools/javac/code/Scope.java
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Scope.java	Wed Apr 01 12:30:13 2015 -0700
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Scope.java	Thu Apr 30 12:18:21 2015 +0100
@@ -28,11 +28,14 @@
 import com.sun.tools.javac.code.Kinds.Kind;
 import java.util.*;
 
+import com.sun.tools.javac.code.Symbol.ClassSymbol;
 import com.sun.tools.javac.code.Symbol.TypeSymbol;
 import com.sun.tools.javac.tree.JCTree.JCImport;
 import com.sun.tools.javac.util.*;
 import com.sun.tools.javac.util.List;
 
+import javax.tools.JavaFileObject;
+
 import static com.sun.tools.javac.code.Scope.LookupKind.NON_RECURSIVE;
 import static com.sun.tools.javac.code.Scope.LookupKind.RECURSIVE;
 import java.util.stream.Stream;
@@ -166,6 +169,10 @@
         listeners = listeners.prepend(sl);
     }
 
+    public void removeScopeListener(ScopeListener sl) {
+        listeners = List.filter(listeners, sl);
+    }
+
     public interface ScopeListener {
         public void symbolAdded(Symbol sym, Scope s);
         public void symbolRemoved(Symbol sym, Scope s);
@@ -914,6 +921,11 @@
         public void prependSubScope(Scope that) {
            if (that != null) {
                 subScopes = subScopes.prepend(that);
+//                if (that.owner.kind == Kinds.Kind.TYP &&
+//                        (((ClassSymbol)that.owner).classfile == null ||
+//                                ((ClassSymbol)that.owner).classfile.getKind() == JavaFileObject.Kind.SOURCE)) {
+//                    that.addScopeListener(this);
+//                }
                 that.addScopeListener(this);
                 mark++;
                 for (ScopeListener sl : listeners) {
diff -r ec977a00cecb src/jdk.compiler/share/classes/com/sun/tools/javac/code/Types.java
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Types.java	Wed Apr 01 12:30:13 2015 -0700
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Types.java	Thu Apr 30 12:18:21 2015 +0100
@@ -2732,6 +2732,11 @@
                 ClassSymbol csym = (ClassSymbol)t.tsym;
                 Entry e = _map.get(csym);
                 if (e == null || !e.matches(skipInterface)) {
+                    if (e != null) {
+                        for (Scope s : e.compoundScope.subScopes) {
+                            s.removeScopeListener(e.compoundScope);
+                        }
+                    }
                     CompoundScope membersClosure = new CompoundScope(csym);
                     if (!skipInterface) {
                         for (Type i : interfaces(t)) {
