Index: trunk/src/org/openstreetmap/josm/data/validation/tests/RelationChecker.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/validation/tests/RelationChecker.java	(revision 5640)
+++ trunk/src/org/openstreetmap/josm/data/validation/tests/RelationChecker.java	(revision 5641)
@@ -6,7 +6,10 @@
 
 import java.text.MessageFormat;
+import java.util.Arrays;
 import java.util.Collection;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.LinkedList;
+import java.util.Set;
 
 import org.openstreetmap.josm.data.osm.Node;
@@ -160,14 +163,25 @@
                         }
                     }
-                    if (ri != null && r.types != null) {
-                        Collection<OsmPrimitive> wrongTypes = new LinkedList<OsmPrimitive>();
-                        if (!r.types.contains(PresetType.WAY)) {
-                            wrongTypes.addAll(r.types.contains(PresetType.CLOSEDWAY) ? ri.openways : ri.ways);
-                        }
-                        if (!r.types.contains(PresetType.NODE)) {
-                            wrongTypes.addAll(ri.nodes);
-                        }
-                        if (!r.types.contains(PresetType.RELATION)) {
-                            wrongTypes.addAll(ri.relations);
+                    if (ri != null) {
+                        Set<OsmPrimitive> wrongTypes = new HashSet<OsmPrimitive>();
+                        if (r.types != null) {
+                            if (!r.types.contains(PresetType.WAY)) {
+                                wrongTypes.addAll(r.types.contains(PresetType.CLOSEDWAY) ? ri.openways : ri.ways);
+                            }
+                            if (!r.types.contains(PresetType.NODE)) {
+                                wrongTypes.addAll(ri.nodes);
+                            }
+                            if (!r.types.contains(PresetType.RELATION)) {
+                                wrongTypes.addAll(ri.relations);
+                            }
+                        }
+                        if (r.memberExpression != null) {
+                            for (Collection<OsmPrimitive> c : Arrays.asList(new Collection[]{ri.nodes, ri.ways, ri.relations})) {
+                                for (OsmPrimitive p : c) {
+                                    if (!r.memberExpression.match(p)) {
+                                        wrongTypes.add(p);
+                                    }
+                                }
+                            }
                         }
                         if (!wrongTypes.isEmpty()) {
