Index: /trunk/src/org/openstreetmap/josm/data/osm/Way.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/osm/Way.java	(revision 5489)
+++ /trunk/src/org/openstreetmap/josm/data/osm/Way.java	(revision 5490)
@@ -471,4 +471,24 @@
         return nodes.length >= 3 && nodes[nodes.length-1] == nodes[0];
     }
+    
+    /**
+     * Determines if this way denotes an area (closed way with at least three distinct nodes).
+     * @return {@code true} if this way is closed and contains at least three distinct nodes
+     * @see #isClosed
+     * @since 5490
+     */
+    public boolean isArea() {
+        if (this.nodes.length >= 4 && isClosed()) {
+            Node distinctNode = null;
+            for (int i=1; i<nodes.length-1; i++) {
+                if (distinctNode == null && nodes[i] != nodes[0]) {
+                    distinctNode = nodes[i];
+                } else if (distinctNode != null && nodes[i] != nodes[0] && nodes[i] != distinctNode) {
+                    return true;
+                }
+            }
+        }
+        return false;
+    }
 
     /**
@@ -627,5 +647,5 @@
             if (lastN != null) {
                 LatLon lastNcoor = lastN.getCoor();
-            	LatLon coor = n.getCoor();
+                LatLon coor = n.getCoor();
                 if (lastNcoor != null && coor != null) {
                     length += coor.greatCircleDistance(lastNcoor);
Index: /trunk/src/org/openstreetmap/josm/data/validation/tests/DuplicateWay.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/validation/tests/DuplicateWay.java	(revision 5489)
+++ /trunk/src/org/openstreetmap/josm/data/validation/tests/DuplicateWay.java	(revision 5490)
@@ -177,4 +177,6 @@
             }
             wNodesToUse.add(wNodes.get(lowestIndex));
+        } else {
+        	wNodesToUse.addAll(wNodes);
         }
         // Build the list of lat/lon
Index: /trunk/src/org/openstreetmap/josm/data/validation/tests/MultipolygonTest.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/validation/tests/MultipolygonTest.java	(revision 5489)
+++ /trunk/src/org/openstreetmap/josm/data/validation/tests/MultipolygonTest.java	(revision 5490)
@@ -116,5 +116,5 @@
     @Override
     public void visit(Way w) {
-        if (!w.isClosed() && ElemStyles.hasAreaElemStyle(w, false)) {
+        if (!w.isArea() && ElemStyles.hasAreaElemStyle(w, false)) {
             List<Node> nodes = w.getNodes();
             if (nodes.size()<1) return; // fix zero nodes bug
Index: /trunk/src/org/openstreetmap/josm/data/validation/tests/OverlappingAreas.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/validation/tests/OverlappingAreas.java	(revision 5489)
+++ /trunk/src/org/openstreetmap/josm/data/validation/tests/OverlappingAreas.java	(revision 5490)
@@ -27,5 +27,5 @@
     @Override
     public void visit(Way w) {
-        if (w.isUsable() && w.isClosed() && ElemStyles.hasAreaElemStyle(w, false)) {
+        if (w.isUsable() && w.isArea() && ElemStyles.hasAreaElemStyle(w, false)) {
             index.add(w);
         }
Index: /trunk/src/org/openstreetmap/josm/data/validation/tests/UnclosedWays.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/validation/tests/UnclosedWays.java	(revision 5489)
+++ /trunk/src/org/openstreetmap/josm/data/validation/tests/UnclosedWays.java	(revision 5490)
@@ -107,5 +107,5 @@
         }
 
-        if (type != null && !w.isClosed()) {
+        if (type != null && !w.isArea()) {
             for (OsmPrimitive parent: w.getReferrers()) {
                 if (parent instanceof Relation && ((Relation)parent).isMultipolygon())
