Index: /applications/editors/josm/plugins/validator/src/org/openstreetmap/josm/plugins/validator/Test.java
===================================================================
--- /applications/editors/josm/plugins/validator/src/org/openstreetmap/josm/plugins/validator/Test.java	(revision 18087)
+++ /applications/editors/josm/plugins/validator/src/org/openstreetmap/josm/plugins/validator/Test.java	(revision 18088)
@@ -8,5 +8,7 @@
 import javax.swing.JPanel;
 
+import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.command.Command;
+import org.openstreetmap.josm.data.osm.BackreferencedDataSet;
 import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
@@ -56,7 +58,12 @@
     /** Whether the test is run on a partial selection data */
     protected boolean partialSelection;
-    
+
     /** the progress monitor to use */
     protected ProgressMonitor progressMonitor;
+
+    /**
+     * the data structure with child->parent references
+     */
+    protected BackreferencedDataSet backreferenceDataSet;
 
     /**
@@ -93,11 +100,13 @@
      */
     public void startTest(ProgressMonitor progressMonitor) {
-    	if (progressMonitor == null) {
-    		this.progressMonitor = NullProgressMonitor.INSTANCE;
-    	} else {
-    		this.progressMonitor = progressMonitor;
-    	}
-    	this.progressMonitor.beginTask(tr("Running test {0}", name));
-    	errors = new ArrayList<TestError>(30);
+        backreferenceDataSet = new BackreferencedDataSet(Main.main.getCurrentDataSet());
+        backreferenceDataSet.build();
+        if (progressMonitor == null) {
+                this.progressMonitor = NullProgressMonitor.INSTANCE;
+        } else {
+                this.progressMonitor = progressMonitor;
+        }
+        this.progressMonitor.beginTask(tr("Running test {0}", name));
+        errors = new ArrayList<TestError>(30);
     }
 
@@ -125,6 +134,7 @@
      */
     public void endTest() {
-    	progressMonitor.finishTask();
-    	progressMonitor = null;
+        progressMonitor.finishTask();
+        progressMonitor = null;
+        backreferenceDataSet = null;
     }
 
@@ -137,5 +147,5 @@
     public void visit(Collection<OsmPrimitive> selection)
     {
-    	progressMonitor.setTicksCount(selection.size());
+        progressMonitor.setTicksCount(selection.size());
         for (OsmPrimitive p : selection) {
             if( p.isUsable() )
Index: /applications/editors/josm/plugins/validator/src/org/openstreetmap/josm/plugins/validator/tests/UnclosedWays.java
===================================================================
--- /applications/editors/josm/plugins/validator/src/org/openstreetmap/josm/plugins/validator/tests/UnclosedWays.java	(revision 18087)
+++ /applications/editors/josm/plugins/validator/src/org/openstreetmap/josm/plugins/validator/tests/UnclosedWays.java	(revision 18088)
@@ -11,4 +11,5 @@
 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.gui.progress.ProgressMonitor;
@@ -36,5 +37,5 @@
     @Override
     public void startTest(ProgressMonitor monitor) {
-    	super.startTest(monitor);
+        super.startTest(monitor);
         _errorWays = new Bag<Way, Way>();
     }
@@ -108,4 +109,8 @@
         if (type != null && !w.isClosed())
         {
+            for (OsmPrimitive parent: this.backreferenceDataSet.getParents(w)) {
+                if (parent instanceof Relation && "multipolygon".equals(parent.get("type")))
+                    return;
+            }
             Node f = w.getNode(0);
             Node l = w.getNode(w.getNodesCount() - 1);
Index: /applications/editors/josm/plugins/validator/src/org/openstreetmap/josm/plugins/validator/tests/UntaggedWay.java
===================================================================
--- /applications/editors/josm/plugins/validator/src/org/openstreetmap/josm/plugins/validator/tests/UntaggedWay.java	(revision 18087)
+++ /applications/editors/josm/plugins/validator/src/org/openstreetmap/josm/plugins/validator/tests/UntaggedWay.java	(revision 18088)
@@ -90,5 +90,5 @@
                     if( !hasName && !isRoundabout)
                         errors.add( new TestError(this, Severity.WARNING, tr("Unnamed ways"), UNNAMED_WAY, w) );
-		    else if(isRoundabout)
+                    else if(isRoundabout)
                         errors.add( new TestError(this, Severity.WARNING, tr("Unnamed junction"), UNNAMED_JUNCTION, w) );
                 }
@@ -115,5 +115,5 @@
     public void startTest(ProgressMonitor monitor)
     {
-    	super.startTest(monitor);
+        super.startTest(monitor);
         multipolygonways = new LinkedList<Way>();
         for (final Relation r : Main.main.getCurrentDataSet().relations)
