Index: trunk/src/org/openstreetmap/josm/command/DeleteCommand.java
===================================================================
--- trunk/src/org/openstreetmap/josm/command/DeleteCommand.java	(revision 1462)
+++ trunk/src/org/openstreetmap/josm/command/DeleteCommand.java	(revision 1463)
@@ -232,5 +232,5 @@
         for (Way w : waysToBeChanged) {
             Way wnew = new Way(w);
-            wnew.nodes.removeAll(del);
+            wnew.removeNodes(del);
             if (wnew.nodes.size() < 2) {
                 del.add(w);
Index: trunk/src/org/openstreetmap/josm/data/osm/Way.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/Way.java	(revision 1462)
+++ trunk/src/org/openstreetmap/josm/data/osm/Way.java	(revision 1463)
@@ -9,4 +9,5 @@
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collection;
 import java.util.List;
 
@@ -132,4 +133,29 @@
     }
 
+    public void removeNode(Node n)
+    {
+        Boolean closed = (lastNode() == n && firstNode() == n);
+        int i;
+        while((i = nodes.indexOf(n)) >= 0)
+            nodes.remove(i);
+        i = nodes.size();
+        if(closed && i > 2) // close again
+            addNode(firstNode());
+        // prevent closed ways with less than 3 different nodes
+        else if(i >= 2 && i <= 3 && nodes.get(0) == nodes.get(i-1))
+            nodes.remove(i-1);
+    }
+
+    public void removeNodes(Collection<? extends OsmPrimitive> selection)
+    {
+       for(OsmPrimitive p : selection)
+       {
+           if(p instanceof Node)
+           {
+               removeNode((Node)p);
+           }
+       }
+    }
+
     public void addNode(Node n)
     {
