Index: /trunk/src/org/openstreetmap/josm/data/validation/tests/CrossingWays.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/validation/tests/CrossingWays.java	(revision 17429)
+++ /trunk/src/org/openstreetmap/josm/data/validation/tests/CrossingWays.java	(revision 17430)
@@ -119,6 +119,8 @@
             if (isBuilding(w1) && isBuilding(w2))
                 return true; // handled by mapcss tests
-            if (((isResidentialArea(w1) || w1.hasKey(BARRIER, HIGHWAY, RAILWAY, WATERWAY)) && isResidentialArea(w2))
-             || ((isResidentialArea(w2) || w2.hasKey(BARRIER, HIGHWAY, RAILWAY, WATERWAY)) && isResidentialArea(w1)))
+            if (((isResidentialArea(w1) || w1.hasKey(BARRIER, HIGHWAY, RAILWAY, WATERWAY) || isWaterArea(w1))
+                    && isResidentialArea(w2))
+                    || ((isResidentialArea(w2) || w2.hasKey(BARRIER, HIGHWAY, RAILWAY, WATERWAY) || isWaterArea(w2))
+                            && isResidentialArea(w1)))
                 return true;
             if (isWaterArea(w1) && isWaterArea(w2))
Index: /trunk/test/unit/org/openstreetmap/josm/data/validation/tests/CrossingWaysTest.java
===================================================================
--- /trunk/test/unit/org/openstreetmap/josm/data/validation/tests/CrossingWaysTest.java	(revision 17429)
+++ /trunk/test/unit/org/openstreetmap/josm/data/validation/tests/CrossingWaysTest.java	(revision 17430)
@@ -47,4 +47,10 @@
     private static void testMessage(int code, CrossingWays test, String tags1, String tags2) {
         assertEquals(code, test.createMessage(TestUtils.newWay(tags1), TestUtils.newWay(tags2)).code);
+    }
+
+    private static void testIgnore(boolean expected, CrossingWays test, String tags1, String tags2) {
+        // test both possible combinations
+        assertEquals(expected, test.ignoreWaySegmentCombination(TestUtils.newWay(tags1), TestUtils.newWay(tags2)));
+        assertEquals(expected, test.ignoreWaySegmentCombination(TestUtils.newWay(tags2), TestUtils.newWay(tags1)));
     }
 
@@ -156,4 +162,7 @@
         testMessage(665, test, "barrier=hedge", "natural=water");
 
+        testIgnore(true, test, "landuse=residential", "natural=water");
+        testIgnore(false, test, "landuse=residential", "building=yes");
+
         assertFalse(test.isPrimitiveUsable(newUsableWay("amenity=restaurant")));
         assertFalse(test.isPrimitiveUsable(TestUtils.newWay("barrier=yes"))); // Unusable (0 node)
