diff --git a/scope4j/src/main/jastadd/ProgramToScopeTree.jrag b/scope4j/src/main/jastadd/ProgramToScopeTree.jrag
index 4695a2fe3e3723a4ecfcc6185be7cbc5e91bea5b..d472e0d0ad48cb60634988e101e6d5f60f314c5d 100644
--- a/scope4j/src/main/jastadd/ProgramToScopeTree.jrag
+++ b/scope4j/src/main/jastadd/ProgramToScopeTree.jrag
@@ -18,11 +18,11 @@ aspect ProgramToScopeTree {
       to ASTNode.scope()
       for containingScope();
   ClassDecl contributes protectedScope()
-      when !isInnerClass() && superclass().isClassDecl() && superclass().compilationUnit().fromSource() && !accessibleFromPackage(superclass().hostPackage())
+      when !isInnerClass() && superclass().isClassDecl() && superclass().compilationUnit().fromSource() && !hostPackage().equals(superclass().hostPackage())
       to ClassDecl.protectedScope()
       for superclass();
   ClassDecl contributes protectedScope()
-      when !isInnerClass() && superclass().isClassDecl() && superclass().compilationUnit().fromSource() && accessibleFromPackage(superclass().hostPackage())
+      when !isInnerClass() && superclass().isClassDecl() && superclass().compilationUnit().fromSource() &&  hostPackage().equals(superclass().hostPackage())
       to ClassDecl.packageScope()
       for superclass();
   Block contributes scope() to ASTNode.scope() for containingScope();
diff --git a/scope4j/src/test/java/org/extendj/InnerTest.java b/scope4j/src/test/java/org/extendj/InnerTest.java
index c5c187104159e7d1faa85bbb4a8e9437416b5a31..f07851f479bd3ca8711604597377be973c8a6f7e 100644
--- a/scope4j/src/test/java/org/extendj/InnerTest.java
+++ b/scope4j/src/test/java/org/extendj/InnerTest.java
@@ -17,24 +17,24 @@ public class InnerTest extends ScopeAnalysisTest {
     System.out.println(findings);
 
     // anonymous class
-    assertShadow(findings, "fieldA", 11, 13);
-    assertShadow(findings, "fieldA", 13, 3);
+    assertShadow(findings, "fieldA", "ClassA", 11, "ClassA", 13);
+    assertShadow(findings, "fieldA", "ClassA", 13, "ClassA", 3);
 
     // local inner class
-    assertShadow(findings, "fieldA", 27, 29);
-    assertShadow(findings, "fieldA", 29, 3);
-    assertShadow(findings, "changingVar", 25, 19);
+    assertShadow(findings, "fieldA", "ClassA", 27, "ClassA", 29);
+    assertShadow(findings, "fieldA", "ClassA", 29, "ClassA", 3);
+    assertShadow(findings, "changingVar", "ClassA", 25, "ClassA", 19);
 
     // static member class
-    assertShadow(findings, "fieldA", 37, 35);
-    assertShadow(findings, "fieldA", 35, 3);
+    assertShadow(findings, "fieldA", "ClassA", 37, "ClassA", 35);
+    assertShadow(findings, "fieldA", "ClassA", 35, "ClassA", 3);
 
     // member class
-    assertShadow(findings, "fieldA", 44, 42);
-    assertShadow(findings, "fieldA", 42, 3);
+    assertShadow(findings, "fieldA", "ClassA", 44, "ClassA", 42);
+    assertShadow(findings, "fieldA", "ClassA", 42, "ClassA", 3);
 
     // anonymous class defined in other class
-    assertShadow(findings, "fieldB", 5, 10);
+    assertShadow(findings, "fieldB", "ClassB", 5, "ClassB", 10);
     // this finding is currently not found
 //    assertShadow(findings, "fieldB", 10, 4);
 
diff --git a/scope4j/src/test/java/org/extendj/ProtectedTest.java b/scope4j/src/test/java/org/extendj/ProtectedTest.java
index 2ed5d96afd5aea830ebea2dc1d645725018138de..3d53bb46300f7188caf02a89e8bff8c4a775d975 100644
--- a/scope4j/src/test/java/org/extendj/ProtectedTest.java
+++ b/scope4j/src/test/java/org/extendj/ProtectedTest.java
@@ -78,20 +78,20 @@ public class ProtectedTest extends ScopeAnalysisTest {
     assertShadow(findings, "fProtected", classD, 15, classA, 11);
     assertShadow(findings, "fPublic", classD, 16, classA, 12);
     // D.D()
-    assertShadow(findings, "fPrivate", classD, 19, classA, 13);
-    assertShadow(findings, "fPackage", classD, 20, classA, 14);
-    assertShadow(findings, "fProtected", classD, 21, classA, 15);
-    assertShadow(findings, "fPublic", classD, 22, classA, 16);
+    assertNotShadow(findings, "fPrivate", classD, 19, classA, 9); // true, but not helpful
+    assertNotShadow(findings, "fPackage", classD, 20, classA, 10); // true, but not helpful
+    assertShadow(findings, "fProtected", classD, 21, classD, 15);
+    assertShadow(findings, "fPublic", classD, 22, classD, 16);
     // D.foo()
-    assertShadow(findings, "fPrivate", classD, 26, classA, 13);
-    assertShadow(findings, "fPackage", classD, 27, classA, 14);
-    assertShadow(findings, "fProtected", classD, 28, classA, 15);
-    assertShadow(findings, "fPublic", classD, 29, classA, 16);
+    assertNotShadow(findings, "fPrivate", classD, 26, classA, 9); // true, but not helpful
+    assertNotShadow(findings, "fPackage", classD, 27, classA, 10); // true, but not helpful
+    assertShadow(findings, "fProtected", classD, 28, classD, 15);
+    assertShadow(findings, "fPublic", classD, 29, classD, 16);
     // D.bar()
-    assertShadow(findings, "fPrivate", classD, 32, classA, 13);
-    assertShadow(findings, "fPackage", classD, 33, classA, 14);
-    assertShadow(findings, "fProtected", classD, 34, classA, 15);
-    assertShadow(findings, "fPublic", classD, 35, classA, 16);
+    assertNotShadow(findings, "fPrivate", classD, 32, classA, 9); // true, but not helpful
+    assertNotShadow(findings, "fPackage", classD, 33, classA, 10); // true, but not helpful
+    assertShadow(findings, "fProtected", classD, 34, classD, 15);
+    assertShadow(findings, "fPublic", classD, 35, classD, 16);
 
     // within class E
     // E.E()
diff --git a/scope4j/src/test/java/org/extendj/ScopeAnalysisTest.java b/scope4j/src/test/java/org/extendj/ScopeAnalysisTest.java
index 32936e35476af347224087c70d4ec66e07ca0090..f54ba0fa2060ac9b76c155824a91153a42e83c09 100644
--- a/scope4j/src/test/java/org/extendj/ScopeAnalysisTest.java
+++ b/scope4j/src/test/java/org/extendj/ScopeAnalysisTest.java
@@ -23,22 +23,13 @@ public abstract class ScopeAnalysisTest {
     Assertions.fail(failMessage.get());
   }
 
-  static void assertShadow(Set<AbstractFinding> findings, String name, int shadowerLine, int shadowedLine) {
-    assertShadow(findings,
-        (shadower, shadowed) ->
-            shadowed.getName().equals(name) &&
-                shadowed.lineNumber() == shadowedLine &&
-                shadower.lineNumber() == shadowerLine,
-        () -> "No shadow finding found for name '" + name + "' in lines " + shadowerLine + " > " + shadowedLine);
-  }
-
   static void assertShadow(Set<AbstractFinding> findings, String name, String shadowerSourceFile, int shadowerLine, String shadowedSourceFile, int shadowedLine) {
     assertShadow(findings,
         (shadower, shadowed) ->
             shadowed.getName().equals(name) &&
-                shadowed.sourceFile().equals(shadowedSourceFile) &&
+                shadowed.sourceFile().contains(shadowedSourceFile) &&
                 shadowed.lineNumber() == shadowedLine &&
-                shadower.sourceFile().equals(shadowerSourceFile) &&
+                shadower.sourceFile().contains(shadowerSourceFile) &&
                 shadower.lineNumber() == shadowerLine,
         () -> "No shadow finding found for name '" + name + "' in " +shadowerSourceFile + ":" + shadowerLine + " > " + shadowedSourceFile + ":" + shadowedLine);
   }
@@ -55,18 +46,9 @@ public abstract class ScopeAnalysisTest {
     Assertions.fail("No multi-decl finding found for name '" + name + "' in line " + declLine);
   }
 
-  static void assertNotShadow(Set<AbstractFinding> findings, String name, int shadowerLine, int shadowedLine) {
-    try {
-      assertShadow(findings, name, shadowerLine, shadowedLine);
-    } catch (AssertionError e) {
-      return;
-    }
-    Assertions.fail("There should not be a shadow finding for name '" + name + "' in lines " + shadowerLine + " > " + shadowedLine);
-  }
-
   static void assertNotShadow(Set<AbstractFinding> findings, String name, String shadowerSourceFile, int shadowerLine, String shadowedSourceFile, int shadowedLine) {
     try {
-      assertShadow(findings, name, shadowerLine, shadowedLine);
+      assertShadow(findings, name, shadowerSourceFile, shadowerLine, shadowedSourceFile, shadowedLine);
     } catch (AssertionError e) {
       return;
     }
diff --git a/scope4j/src/test/java/org/extendj/SimpleScopeTest.java b/scope4j/src/test/java/org/extendj/SimpleScopeTest.java
index 5c537c3b6b8fa220ae98017c856b1e97bb26eaba..ae16c02891af19193758b8400ce236aebdd34bf9 100644
--- a/scope4j/src/test/java/org/extendj/SimpleScopeTest.java
+++ b/scope4j/src/test/java/org/extendj/SimpleScopeTest.java
@@ -14,11 +14,11 @@ public class SimpleScopeTest extends ScopeAnalysisTest {
     ScopeAnalysis scopeAnalysis = new ScopeAnalysis();
     Set<AbstractFinding> findings = scopeAnalysis.analyze("src/test/resources/simple", true, false);
 
-    assertShadow(findings, "localVarA", 19, 11);
-    assertShadow(findings, "localVarB", 33, 12);
-    assertShadow(findings, "localVarC", 24, 13);
-    assertShadow(findings, "fieldA", 29, 3);
-    assertShadow(findings, "fieldB", 36, 4);
+    assertShadow(findings, "localVarA", "ClassA", 19, "ClassA", 11);
+    assertShadow(findings, "localVarB", "ClassA", 33, "ClassA", 12);
+    assertShadow(findings, "localVarC", "ClassA", 24, "ClassA", 13);
+    assertShadow(findings, "fieldA", "ClassA", 29, "ClassA", 3);
+    assertShadow(findings, "fieldB", "ClassA", 36, "ClassA", 4);
 
     Assertions.assertEquals(5, findings.size());
   }
diff --git a/scope4j/src/test/java/org/extendj/SuperclassFieldsTest.java b/scope4j/src/test/java/org/extendj/SuperclassFieldsTest.java
index db6801480975694a6a521c223488930fd7994a18..6f01c7e2daf89de2df98953194d1d9e23d0c1b36 100644
--- a/scope4j/src/test/java/org/extendj/SuperclassFieldsTest.java
+++ b/scope4j/src/test/java/org/extendj/SuperclassFieldsTest.java
@@ -16,9 +16,9 @@ public class SuperclassFieldsTest extends ScopeAnalysisTest {
     Set<AbstractFinding> findings = scopeAnalysis.analyze("src/test/resources/superclassFields", false, false);
 
 
-    assertShadow(findings, "fieldC", 19, 3);
-    assertShadow(findings, "fieldB", 21, 2);
-    assertShadow(findings, "fieldB", 2, 4);
+    assertShadow(findings, "fieldC", "ClassB", 19, "ClassB", 3);
+    assertShadow(findings, "fieldB", "ClassB", 21, "ClassB", 2);
+    assertShadow(findings, "fieldB", "ClassB", 2, "ClassA", 4);
 
     Assertions.assertEquals(3, findings.size());