Index: trunk/src/org/openstreetmap/josm/data/osm/OsmUtils.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/OsmUtils.java	(revision 12985)
+++ trunk/src/org/openstreetmap/josm/data/osm/OsmUtils.java	(revision 12986)
@@ -139,3 +139,17 @@
         return p;
     }
+
+    /**
+     * Returns the layer value of primitive (null for layer 0).
+     * @param w OSM primitive
+     * @return the value of "layer" key, or null if absent or set to 0 (default value)
+     * @since 12986
+     */
+    public static String getLayer(OsmPrimitive w) {
+        String layer1 = w.get("layer");
+        if ("0".equals(layer1)) {
+            layer1 = null; // 0 is default value for layer.
+        }
+        return layer1;
+    }
 }
Index: trunk/src/org/openstreetmap/josm/data/validation/tests/CrossingWays.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/validation/tests/CrossingWays.java	(revision 12985)
+++ trunk/src/org/openstreetmap/josm/data/validation/tests/CrossingWays.java	(revision 12986)
@@ -13,4 +13,5 @@
 import org.openstreetmap.josm.data.coor.EastNorth;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
+import org.openstreetmap.josm.data.osm.OsmUtils;
 import org.openstreetmap.josm.data.osm.Relation;
 import org.openstreetmap.josm.data.osm.Way;
@@ -71,5 +72,5 @@
             if (w1 == w2)
                 return false;
-            if (!Objects.equals(getLayer(w1), getLayer(w2))) {
+            if (!Objects.equals(OsmUtils.getLayer(w1), OsmUtils.getLayer(w2))) {
                 return true;
             }
@@ -164,5 +165,5 @@
         @Override
         boolean ignoreWaySegmentCombination(Way w1, Way w2) {
-            return !Objects.equals(getLayer(w1), getLayer(w2));
+            return !Objects.equals(OsmUtils.getLayer(w1), OsmUtils.getLayer(w2));
         }
 
@@ -232,12 +233,4 @@
         cellSegments.clear();
         seenWays.clear();
-    }
-
-    static String getLayer(OsmPrimitive w) {
-        String layer1 = w.get("layer");
-        if ("0".equals(layer1)) {
-            layer1 = null; // 0 is default value for layer.
-        }
-        return layer1;
     }
 
Index: trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/Selector.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/Selector.java	(revision 12985)
+++ trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/Selector.java	(revision 12986)
@@ -8,4 +8,5 @@
 import java.util.List;
 import java.util.NoSuchElementException;
+import java.util.Objects;
 import java.util.Set;
 import java.util.function.IntFunction;
@@ -16,4 +17,5 @@
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
+import org.openstreetmap.josm.data.osm.OsmUtils;
 import org.openstreetmap.josm.data.osm.Relation;
 import org.openstreetmap.josm.data.osm.RelationMember;
@@ -258,12 +260,17 @@
 
         private final class CrossingFinder extends AbstractFinder {
+
+            private final String layer;
+
             private CrossingFinder(Environment e) {
                 super(e);
                 CheckParameterUtil.ensureThat(e.osm instanceof Way, "Only ways are supported");
+                layer = OsmUtils.getLayer(e.osm);
             }
 
             @Override
             public void visit(Way w) {
-                if (e.child == null && left.matches(new Environment(w).withParent(e.osm))
+                if (e.child == null && Objects.equals(layer, OsmUtils.getLayer(w))
+                    && left.matches(new Environment(w).withParent(e.osm))
                     && e.osm instanceof Way && Geometry.PolygonIntersection.CROSSING.equals(
                             Geometry.polygonIntersection(w.getNodes(), ((Way) e.osm).getNodes()))) {
