Index: trunk/src/org/openstreetmap/josm/actions/CreateMultipolygonAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/CreateMultipolygonAction.java	(revision 6574)
+++ trunk/src/org/openstreetmap/josm/actions/CreateMultipolygonAction.java	(revision 6575)
@@ -36,5 +36,4 @@
 import org.openstreetmap.josm.tools.Pair;
 import org.openstreetmap.josm.tools.Shortcut;
-import org.openstreetmap.josm.tools.Utils;
 
 /**
@@ -147,5 +146,5 @@
             // add ways of existing relation to include them in polygon analysis
             selectedWays = new HashSet<Way>(selectedWays);
-            selectedWays.addAll(Utils.filteredCollection(selectedMultipolygonRelation.getMemberPrimitives(), Way.class));
+            selectedWays.addAll(selectedMultipolygonRelation.getMemberPrimitives(Way.class));
         }
 
Index: trunk/src/org/openstreetmap/josm/data/osm/Relation.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/Relation.java	(revision 6574)
+++ trunk/src/org/openstreetmap/josm/data/osm/Relation.java	(revision 6575)
@@ -397,4 +397,8 @@
     }
 
+    public <T extends OsmPrimitive> Collection<T> getMemberPrimitives(Class<T> tClass) {
+        return Utils.filteredCollection(getMemberPrimitives(), tClass);
+    }
+
     public List<OsmPrimitive> getMemberPrimitivesList() {
         return Utils.transform(getMembers(), new Utils.Function<RelationMember, OsmPrimitive>() {
Index: trunk/src/org/openstreetmap/josm/data/validation/tests/MultipolygonTest.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/validation/tests/MultipolygonTest.java	(revision 6574)
+++ trunk/src/org/openstreetmap/josm/data/validation/tests/MultipolygonTest.java	(revision 6575)
@@ -15,4 +15,5 @@
 
 import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.actions.CreateMultipolygonAction;
 import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
@@ -28,8 +29,10 @@
 import org.openstreetmap.josm.data.validation.Test;
 import org.openstreetmap.josm.data.validation.TestError;
+import org.openstreetmap.josm.gui.DefaultNameFormatter;
 import org.openstreetmap.josm.gui.mappaint.AreaElemStyle;
 import org.openstreetmap.josm.gui.mappaint.ElemStyles;
 import org.openstreetmap.josm.gui.mappaint.MapPaintStyles;
 import org.openstreetmap.josm.gui.progress.ProgressMonitor;
+import org.openstreetmap.josm.tools.Pair;
 
 /**
@@ -176,7 +179,24 @@
             }
 
-            for (RelationMember rm : r.getMembers()) {
-                if (!rm.getMember().isUsable())
-                    return; // Rest of checks is only for complete multipolygons
+            if (r.hasIncompleteMembers()) {
+                return; // Rest of checks is only for complete multipolygons
+            }
+
+            // Create new multipolygon using the logics from CreateMultipolygonAction and see if roles match.
+            final Pair<Relation, Relation> newMP = CreateMultipolygonAction.createMultipolygonRelation(
+                    r.getMemberPrimitives(Way.class), Collections.singleton(new Relation()));
+            if (newMP != null) {
+                for (RelationMember member : r.getMembers()) {
+                    final Collection<RelationMember> memberInNewMP = newMP.b.getMembersFor(Collections.singleton(member.getMember()));
+                    if (memberInNewMP != null && !memberInNewMP.isEmpty()) {
+                        final String roleInNewMP = memberInNewMP.iterator().next().getRole();
+                        if (!member.getRole().equals(roleInNewMP)) {
+                            addError(r, new TestError(this, Severity.WARNING, tr("Role for ''{0}'' should be ''{1}''",
+                                    member.getMember().getDisplayName(DefaultNameFormatter.getInstance()), roleInNewMP),
+                                    WRONG_MEMBER_ROLE, Collections.singleton(r), Collections.singleton(member.getMember())));
+                        }
+                    }
+                }
+
             }
 
