Index: /trunk/src/org/openstreetmap/josm/data/validation/tests/UntaggedWay.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/validation/tests/UntaggedWay.java	(revision 5351)
+++ /trunk/src/org/openstreetmap/josm/data/validation/tests/UntaggedWay.java	(revision 5352)
@@ -5,5 +5,4 @@
 
 import java.util.HashSet;
-import java.util.LinkedList;
 import java.util.Map;
 import java.util.Set;
@@ -11,4 +10,5 @@
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.command.Command;
+import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.Relation;
 import org.openstreetmap.josm.data.osm.RelationMember;
@@ -39,5 +39,5 @@
     protected static final int COMMENTED_WAY = 306;
 
-    private LinkedList<Way> multipolygonways;
+    private Set<Way> waysUsedInRelations;
 
     /** Ways that must have a name */
@@ -51,4 +51,14 @@
         NAMED_WAYS.add( "residential" );
         NAMED_WAYS.add( "pedestrian" ); ;
+    }
+    
+    /** Whitelist of roles allowed to reference an untagged way */
+    public static final Set<String> WHITELIST = new HashSet<String>();
+    static {
+        WHITELIST.add( "outer" );
+        WHITELIST.add( "inner" );
+        WHITELIST.add( "perimeter" );
+        WHITELIST.add( "edge" );
+        WHITELIST.add( "outline" );
     }
 
@@ -93,5 +103,5 @@
         }
 
-        if (!w.isTagged() && !multipolygonways.contains(w)) {
+        if (!w.isTagged() && !waysUsedInRelations.contains(w)) {
             if (w.hasKeys()) {
                 errors.add(new TestError(this, Severity.WARNING, tr("Untagged ways (commented)"), COMMENTED_WAY, w));
@@ -111,11 +121,13 @@
     public void startTest(ProgressMonitor monitor) {
         super.startTest(monitor);
-        multipolygonways = new LinkedList<Way>();
+        waysUsedInRelations = new HashSet<Way>();
         for (Relation r : Main.main.getCurrentDataSet().getRelations()) {
-            if (r.isUsable() && r.isMultipolygon()) {
+            if (r.isUsable()) {
                 for (RelationMember m : r.getMembers()) {
-                    if (m.getMember() != null && m.getMember() instanceof Way &&
-                            m.getMember().isUsable() && !m.getMember().isTagged()) {
-                        multipolygonways.add((Way)m.getMember());
+                    if (r.isMultipolygon() || WHITELIST.contains(m.getRole())) {
+                        OsmPrimitive member = m.getMember();
+                        if (member != null && member instanceof Way && member.isUsable() && !member.isTagged()) {
+                            waysUsedInRelations.add((Way)member);
+                        }
                     }
                 }
@@ -126,5 +138,5 @@
     @Override
     public void endTest() {
-        multipolygonways = null;
+        waysUsedInRelations = null;
         super.endTest();
     }
