Index: src/org/openstreetmap/josm/data/validation/tests/CrossingWays.java
===================================================================
--- src/org/openstreetmap/josm/data/validation/tests/CrossingWays.java	(revision 18225)
+++ src/org/openstreetmap/josm/data/validation/tests/CrossingWays.java	(working copy)
@@ -15,6 +15,8 @@
 import java.util.stream.Collectors;
 
 import org.openstreetmap.josm.data.coor.EastNorth;
+import org.openstreetmap.josm.data.osm.DataSet;
+import org.openstreetmap.josm.data.osm.OsmDataManager;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.OsmUtils;
 import org.openstreetmap.josm.data.osm.Relation;
@@ -80,6 +82,7 @@
     private final Map<Point2D, List<WaySegment>> cellSegments = new HashMap<>(1000);
     /** The already detected ways in error */
     private final Map<List<Way>, List<WaySegment>> seenWays = new HashMap<>(50);
+    protected boolean isSurroundingTest;
 
     protected final int code;
 
@@ -298,6 +301,7 @@
     @Override
     public void startTest(ProgressMonitor monitor) {
         super.startTest(monitor);
+        isSurroundingTest = false;
         cellSegments.clear();
         seenWays.clear();
     }
@@ -304,6 +308,15 @@
 
     @Override
     public void endTest() {
+        // see #20680: if only a selection was tested, test it also against the other suitable ways
+        if (partialSelection && !cellSegments.isEmpty() && !(this instanceof SelfCrossing)) {
+            isSurroundingTest = true; // don't add more ways to the spatial index
+            DataSet ds = OsmDataManager.getInstance().getActiveDataSet();
+            for (Way w : ds.getWays()) {
+                if (isPrimitiveUsable(w))
+                    visit(w);
+            }
+        }
         super.endTest();
         cellSegments.clear();
         seenWays.clear();
@@ -390,7 +403,8 @@
                         highlight.add(es2);
                     }
                 }
-                segments.add(es1);
+                if (!isSurroundingTest)
+                    segments.add(es1);
             }
         }
     }
