Index: src/org/openstreetmap/josm/data/validation/tests/MultipolygonTest.java
===================================================================
--- src/org/openstreetmap/josm/data/validation/tests/MultipolygonTest.java	(revision 16375)
+++ src/org/openstreetmap/josm/data/validation/tests/MultipolygonTest.java	(working copy)
@@ -73,6 +73,10 @@
     public static final int RINGS_SHARE_NODES = 1617;
     /** Incomplete multipolygon was modified */
     public static final int MODIFIED_INCOMPLETE = 1618;
+    /** No further tags for multipolygon */
+    public static final int NO_TAGS = 1619;
+    /** No area tag for multipolygon */
+    public static final int NO_AREA_TAG = 1620;
 
     private static final int FOUND_INSIDE = 1;
     private static final int FOUND_OUTSIDE = 2;
@@ -108,6 +112,7 @@
                     findIntersectingWaysIncomplete(r);
                 } else {
                     Multipolygon polygon = new Multipolygon(r);
+                    tagTest(r);
                     checkStyleConsistency(r, polygon);
                     checkGeometryAndRoles(r, polygon);
                     // see #17010: don't report problems twice
@@ -119,9 +124,30 @@
     }
 
     /**
+     * Check if there is any useful tag on a multipolygon relation.
+     * @param r relation
+     */
+    private void tagTest(Relation r) {
+        if (!r.isBoundary()) {
+            if (r.getInterestingTags().size() <= 1) {
+                errors.add(TestError.builder(this, Severity.ERROR, NO_TAGS)
+                        .message(tr("No further tags for multipolygon"))
+                        .primitives(r)
+                        .build());
+            } else if (!r.concernsArea()) {
+                errors.add(TestError.builder(this, Severity.WARNING, NO_AREA_TAG)
+                        .message(tr("No area tag for multipolygon"))
+                        .primitives(r)
+                        .build());
+            }
+        }
+    }
+
+    /**
      * Various style-related checks:<ul>
+     * <li>{@link #NO_STYLE}: No area style for multipolygon</li>
      * <li>{@link #INNER_STYLE_MISMATCH}: With the currently used mappaint style the style for inner way equals the multipolygon style</li>
-     * <li>{@link #OUTER_STYLE_MISMATCH}: Style for outer way mismatches</li>
+     * <li>{@link #OUTER_STYLE_MISMATCH}: With the currently used mappaint style the style for outer way mismatches the area style</li>
      * <li>{@link #OUTER_STYLE}: Area style on outer way</li>
      * </ul>
      * @param r relation
@@ -128,29 +154,16 @@
      * @param polygon multipolygon
      */
     private void checkStyleConsistency(Relation r, Multipolygon polygon) {
-        ElemStyles styles = MapPaintStyles.getStyles();
-        if (styles != null && !r.isBoundary()) {
+        if (MapPaintStyles.getStyles() != null && !r.isBoundary()) {
             AreaElement area = ElemStyles.getAreaElemStyle(r, false);
-            boolean areaStyle = area != null;
-            // If area style was not found for relation then use style of ways
             if (area == null) {
-                for (Way w : polygon.getOuterWays()) {
-                    area = ElemStyles.getAreaElemStyle(w, true);
-                    if (area != null) {
-                        break;
-                    }
-                }
-                if (area == null) {
-                    errors.add(TestError.builder(this, Severity.OTHER, NO_STYLE)
-                            .message(tr("No area style for multipolygon"))
-                            .primitives(r)
-                            .build());
-                }
-            }
-
-            if (area != null) {
+                errors.add(TestError.builder(this, Severity.OTHER, NO_STYLE)
+                        .message(tr("No area style for multipolygon"))
+                        .primitives(r)
+                        .build());
+            } else {
                 for (Way wInner : polygon.getInnerWays()) {
-                    if (area.equals(ElemStyles.getAreaElemStyle(wInner, false))) {
+                    if (wInner.isClosed() && area.equals(ElemStyles.getAreaElemStyle(wInner, false))) {
                         errors.add(TestError.builder(this, Severity.OTHER, INNER_STYLE_MISMATCH)
                                 .message(tr("With the currently used mappaint style the style for inner way equals the multipolygon style"))
                                 .primitives(Arrays.asList(r, wInner))
@@ -159,17 +172,17 @@
                     }
                 }
                 for (Way wOuter : polygon.getOuterWays()) {
+                    if (!wOuter.isArea())
+                        continue;
                     AreaElement areaOuter = ElemStyles.getAreaElemStyle(wOuter, false);
                     if (areaOuter != null) {
                         if (!area.equals(areaOuter)) {
-                            String message = !areaStyle ? tr("Style for outer way mismatches")
-                                    : tr("With the currently used mappaint style the style for outer way mismatches the area style");
                             errors.add(TestError.builder(this, Severity.OTHER, OUTER_STYLE_MISMATCH)
-                                    .message(message)
+                                    .message(tr("With the currently used mappaint style the style for outer way mismatches the area style"))
                                     .primitives(Arrays.asList(r, wOuter))
                                     .highlight(wOuter)
                                     .build());
-                        } else if (areaStyle) { /* style on outer way of multipolygon, but equal to polygon */
+                        } else { /* style on outer way of multipolygon, but equal to polygon */
                             errors.add(TestError.builder(this, Severity.WARNING, OUTER_STYLE)
                                     .message(tr("Area style on outer way"))
                                     .primitives(Arrays.asList(r, wOuter))
@@ -913,7 +926,7 @@
             boolean hasRepeatedMembers = checkRepeatedWayMembers(r);
             if (!hasRepeatedMembers) {
                 polygon = new Multipolygon(r);
-                // don't check style consistency here
+                // don't check style tags or consistency here
                 checkGeometryAndRoles(r, polygon);
             }
             createdRelation = null; // makes sure that repeatCheck is only set once
Index: src/org/openstreetmap/josm/data/validation/tests/UnclosedWays.java
===================================================================
--- src/org/openstreetmap/josm/data/validation/tests/UnclosedWays.java	(revision 16375)
+++ src/org/openstreetmap/josm/data/validation/tests/UnclosedWays.java	(working copy)
@@ -9,9 +9,7 @@
 import java.util.HashSet;
 import java.util.Set;
 
-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;
 import org.openstreetmap.josm.data.validation.Severity;
 import org.openstreetmap.josm.data.validation.Test;
@@ -179,11 +177,6 @@
         if (!w.isUsable() || w.isArea())
             return;
 
-        for (OsmPrimitive parent: w.getReferrers()) {
-            if (parent instanceof Relation && ((Relation) parent).isMultipolygon())
-                return;
-        }
-
         for (UnclosedWaysCheck c : checks) {
             TestError error = c.getTestError(w, this);
             if (error != null) {
