Index: resources/data/validator/combinations.mapcss
===================================================================
--- resources/data/validator/combinations.mapcss	(revision 17912)
+++ resources/data/validator/combinations.mapcss	(working copy)
@@ -75,6 +75,20 @@
   assertMatch: "node source:addr:postcode=postman";
 }
 
+/* #9819 stricter checking for highways crossing waterways without bridges */
+way!:closed[highway][layer][layer!=0][!bridge][!tunnel][!covered][highway!~/steps|elevator/],
+way!:closed[railway][layer][layer!=0][!bridge][!tunnel][!covered],
+way!:closed[waterway][layer][layer!=0][!bridge][!tunnel][!covered] {
+  throwWarning: tr("inspect to confirm a {1} tag is necessary on this {0}. If so, add either {2}, {3}, {4} or any other tags complimentary to {5}", "{2.key}", "{3.key}", "{4.key}=*", "{5.key}=*", "{6.key}=*", "{3.key}=*");
+  group: tr("suspicious tag combination");
+  assertMatch: "way highway=tertiary layer=2";
+  assertMatch: "way waterway=stream layer=-1";
+  assertMatch: "way railway=rail layer=2";
+  assertNoMatch: "way highway=tertiary layer=2 bridge=yes";
+  assertNoMatch: "way waterway=stream layer=-1 tunnel=yes";
+  assertNoMatch: "way railway=rail layer=2 bridge=yes";
+}
+
 /* {0.key} without {1.key} (info level) */
 way[lanes:forward][!lanes:backward][oneway!=yes][oneway!=-1],
 way[lanes:backward][!lanes:forward][oneway!=yes][oneway!=-1],
@@ -573,16 +587,6 @@
   throwWarning: tr("{0} on a relation without {1}", "{0.key}", "{1.tag}");
 }
 
-/* #9182 */
-way[waterway][layer][layer=~/^(-1|-2|-3|-4|-5)$/][!tunnel][culvert!=yes][covered!=yes][pipeline!=yes][location!=underground][eval(waylength()) > 400] {
-  throwWarning: tr("Long waterway with {0} but without a tag which defines it as tunnel or underground. Remove {1} or add a tunnel tag if applicable. Also check crossing bridges and their {1} tags.", "{1.tag}", "{1.key}");
-  group: tr("suspicious tag combination");
-}
-way[waterway][layer][layer=~/^(-1|-2|-3|-4|-5)$/][!tunnel][culvert!=yes][covered!=yes][pipeline!=yes][location!=underground][eval(waylength()) <= 400] {
-  throwOther: tr("Short waterway with {0} but without a tag which defines it as tunnel or underground. Remove {1} or add a tunnel tag if applicable. Also check crossing bridges and their {1} tags.", "{1.tag}", "{1.key}");
-  group: tr("suspicious tag combination");
-}
-
 /* #13144, #15536 */
 *[unisex=yes][female=yes][male!=yes][shop=hairdresser],
 *[unisex=yes][male=yes][female!=yes][shop=hairdresser] {
Index: src/org/openstreetmap/josm/data/validation/tests/CrossingWays.java
===================================================================
--- src/org/openstreetmap/josm/data/validation/tests/CrossingWays.java	(revision 17912)
+++ src/org/openstreetmap/josm/data/validation/tests/CrossingWays.java	(working copy)
@@ -114,8 +114,6 @@
         boolean ignoreWaySegmentCombination(Way w1, Way w2) {
             if (w1 == w2)
                 return true;
-            if (areLayerOrLevelDifferent(w1, w2))
-                return true;
             if (isBuilding(w1) && isBuilding(w2))
                 return true; // handled by mapcss tests
             if (((isResidentialArea(w1) || w1.hasKey(BARRIER, HIGHWAY, RAILWAY, WATERWAY) || isWaterArea(w1))
@@ -378,13 +376,16 @@
                         highlight.add(es1);
                         highlight.add(es2);
 
-                        final MessageHelper message = createMessage(es1.getWay(), es2.getWay());
-                        errors.add(TestError.builder(this, Severity.WARNING, message.code)
-                                .message(message.message)
-                                .primitives(prims)
-                                .highlightWaySegments(highlight)
-                                .build());
-                        seenWays.put(prims, highlight);
+                        if (!areLayerOrLevelDifferent(es1.getWay(), es2.getWay()))
+                        {
+                            final MessageHelper message = createMessage(es1.getWay(), es2.getWay());
+                            errors.add(TestError.builder(this, Severity.WARNING, message.code)
+                                    .message(message.message)
+                                    .primitives(prims)
+                                    .highlightWaySegments(highlight)
+                                    .build());
+                            seenWays.put(prims, highlight);
+                        }
                     } else {
                         highlight.add(es1);
                         highlight.add(es2);
