Index: trunk/src/org/openstreetmap/josm/data/osm/Way.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/Way.java	(revision 4052)
+++ trunk/src/org/openstreetmap/josm/data/osm/Way.java	(revision 4053)
@@ -58,5 +58,5 @@
                 this.nodes = nodes.toArray(new Node[nodes.size()]);
             }
-            for (Node node:this.nodes) {
+            for (Node node: this.nodes) {
                 node.addReferrer(this);
             }
@@ -67,4 +67,21 @@
             writeUnlock(locked);
         }
+    }
+
+    /**
+     * Prevent directly following identical nodes in ways.
+     */
+    private List<Node> removeDouble(List<Node> nodes) {
+        Node last = null;
+        int count = nodes.size();
+        for(int i = 0; i < count && count > 2; ++i) {
+            Node n = nodes.get(i);
+            if(last == n) {
+                nodes.remove(i);
+                --count;
+            }
+            last = n;
+        }
+        return nodes;
     }
 
@@ -278,5 +295,5 @@
                 copy.remove(i-1);
             }
-            setNodes(copy);
+            setNodes(removeDouble(copy));
         } finally {
             writeUnlock(locked);
@@ -303,5 +320,5 @@
                 copy.remove(i-1);
             }
-            setNodes(copy);
+            setNodes(removeDouble(copy));
         } finally {
             writeUnlock(locked);
