Index: /trunk/data/validator/geometry.mapcss
===================================================================
--- /trunk/data/validator/geometry.mapcss	(revision 7279)
+++ /trunk/data/validator/geometry.mapcss	(revision 7280)
@@ -28,5 +28,7 @@
 }
 
-area:closed:areaStyle.water_area ⧉ area:closed:areaStyle.water_area {
+/* area:closed:areaStyle.water_area ⧉ area:closed:areaStyle.water_area -- does not work for now -- see ticket#10215 */
+area:closed:areaStyle[natural =~ /^(water|wetland|coastline)$/] ⧉ area:closed:areaStyle.water_area,
+area:closed:areaStyle[landuse=reservoir]                        ⧉ area:closed:areaStyle.water_area {
   throwWarning: tr("Overlapping Water Areas");
 }
Index: /trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/Selector.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/Selector.java	(revision 7279)
+++ /trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/Selector.java	(revision 7280)
@@ -225,5 +225,5 @@
             @Override
             public void visit(Way w) {
-                if (e.child == null && left.matches(e.withPrimitive(w))) {
+                if (e.child == null && left.matches(new Environment().withPrimitive(w))) {
                     if (e.osm instanceof Way && Geometry.PolygonIntersection.CROSSING.equals(Geometry.polygonIntersection(w.getNodes(), ((Way) e.osm).getNodes()))) {
                         e.child = w;
@@ -241,5 +241,5 @@
             @Override
             public void visit(Node n) {
-                if (e.child == null && left.matches(e.withPrimitive(n))) {
+                if (e.child == null && left.matches(new Environment().withPrimitive(n))) {
                     if (e.osm instanceof Way && Geometry.nodeInsidePolygon(n, ((Way) e.osm).getNodes())
                             || e.osm instanceof Relation && ((Relation) e.osm).isMultipolygon() && Geometry.isNodeInsideMultiPolygon(n, (Relation) e.osm, null)) {
@@ -251,5 +251,5 @@
             @Override
             public void visit(Way w) {
-                if (e.child == null && left.matches(e.withPrimitive(w))) {
+                if (e.child == null && left.matches(new Environment().withPrimitive(w))) {
                     if (e.osm instanceof Way && Geometry.PolygonIntersection.FIRST_INSIDE_SECOND.equals(Geometry.polygonIntersection(w.getNodes(), ((Way) e.osm).getNodes()))
                             || e.osm instanceof Relation && ((Relation) e.osm).isMultipolygon() && Geometry.isPolygonInsideMultiPolygon(w.getNodes(), (Relation) e.osm, null)) {
@@ -284,5 +284,5 @@
                     final Relation multipolygon = multipolygons.iterator().next();
                     if (multipolygon == null) throw new NoSuchElementException();
-                    containsFinder = new ContainsFinder(e.withPrimitive(multipolygon)) {
+                    containsFinder = new ContainsFinder(new Environment().withPrimitive(multipolygon)) {
                         @Override
                         public boolean isPrimitiveUsable(OsmPrimitive p) {
