Index: trunk/resources/data/validator/combinations.mapcss
===================================================================
--- trunk/resources/data/validator/combinations.mapcss	(revision 17177)
+++ trunk/resources/data/validator/combinations.mapcss	(revision 17209)
@@ -222,6 +222,5 @@
 }
 
-/* {0.key} without {1.key}, {2.key} or {3.key}, #17253, #19821 */
-way[oneway   ][!highway][!railway][!aerialway][attraction!=summer_toboggan][aeroway!~/^(runway|taxiway)$/][leisure!=track],
+/* {0.key} without {1.key}, {2.key} or {3.key} */
 *[snowplowing][!highway][!amenity][!leisure] {
   throwWarning: tr("{0} without {1}, {2} or {3}", "{0.key}", "{1.key}", "{2.key}", "{3.key}");
@@ -406,5 +405,6 @@
 }
 
-/* {0} on suspicious object, #17255, #19650, #19572 */
+/* {0} on suspicious object, #17255, #19650, #19572, #17253, #19821, #15667, #19930 */
+way[oneway ][!highway][!railway][!aerialway][attraction!=summer_toboggan][aeroway!~/^(runway|taxiway)$/][leisure!=track][waterway !~ /^(canal|fairway|lock|river|tidal_channel)$/],
 node[lanes ][!barrier][!ford][highway!=mini_roundabout][!junction][leisure!~/^(bowling_alley|slipway|swimming_pool|track)$/][!traffic_calming]!.only_one_tag,
 way[lanes  ][!barrier][!ford][!highway                ][!junction][leisure!~/^(bowling_alley|slipway|swimming_pool|track)$/][!traffic_calming]!.only_one_tag,
@@ -416,4 +416,10 @@
 way[incline][!highway][!railway][aeroway!~/^(runway|taxiway)$/][attraction!=summer_toboggan][leisure!=slipway] {
   throwWarning: tr("{0} on suspicious object", "{0.key}");
+  group: tr("suspicious tag combination");
+}
+
+/* #15667, #19930 */
+way[waterway][oneway][waterway =~ /^(canal|fairway|lock|river|tidal_channel)$/] {
+  throwOther: tr("{0} together with {1}. The flow direction is defined by the way direction. Use {1} on {0} only in the rare case of a access restriction.", "{0.key}", "{1.key}");
   group: tr("suspicious tag combination");
 }
Index: trunk/resources/data/validator/deprecated.mapcss
===================================================================
--- trunk/resources/data/validator/deprecated.mapcss	(revision 17177)
+++ trunk/resources/data/validator/deprecated.mapcss	(revision 17209)
@@ -545,6 +545,6 @@
 }
 
-/* #10346, #15667 (waterway has its own rules in unnecessary.mapcss) */
-way[oneway=1][!waterway] {
+/* #10346 */
+way[oneway=1] {
   throwWarning: tr("{0} is deprecated", "{0.tag}");
   suggestAlternative: "oneway=yes";
@@ -553,6 +553,6 @@
 }
 
-/* #11329, #15667 */
-way[oneway=-1][!waterway] {
+/* #11329 */
+way[oneway=-1] {
   throwWarning: tr("{0} is not recommended. Use the Reverse Ways function from the Tools menu.", "{0.tag}");
 }
Index: trunk/resources/data/validator/unnecessary.mapcss
===================================================================
--- trunk/resources/data/validator/unnecessary.mapcss	(revision 17177)
+++ trunk/resources/data/validator/unnecessary.mapcss	(revision 17209)
@@ -67,15 +67,4 @@
   group: tr("unnecessary tag");
   fixRemove: "payment:cash";
-}
-
-/* see #10346, #15667 */
-way[waterway][oneway?] {
-  throwWarning: tr("{0} is unnecessary for {1}", "{1.key}", "{0.key}");
-  group: tr("unnecessary tag");
-  fixRemove: "{1.key}";
-}
-way[waterway][oneway=-1] {
-  throwWarning: tr("{0} is unnecessary for {1}. The flow direction is defined by the way direction.", "{1.key}", "{0.key}");
-  group: tr("unnecessary tag");
 }
 
