Index: /trunk/src/org/openstreetmap/josm/data/UndoRedoHandler.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/UndoRedoHandler.java	(revision 2538)
+++ /trunk/src/org/openstreetmap/josm/data/UndoRedoHandler.java	(revision 2539)
@@ -2,5 +2,8 @@
 package org.openstreetmap.josm.data;
 
+import java.util.ArrayList;
+import java.util.Collection;
 import java.util.Iterator;
+import java.util.List;
 import java.util.LinkedList;
 import java.util.Stack;
@@ -9,4 +12,5 @@
 import org.openstreetmap.josm.command.Command;
 import org.openstreetmap.josm.data.osm.DataSet;
+import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.gui.layer.Layer;
 import org.openstreetmap.josm.gui.layer.OsmDataLayer;
@@ -20,4 +24,8 @@
      */
     public final LinkedList<Command> commands = new LinkedList<Command>();
+    /**
+     * Selection to be restored on undo
+     */
+    public Collection<? extends OsmPrimitive> lastSelection = new ArrayList<OsmPrimitive>();
     /**
      * The stack for redoing commands
@@ -35,4 +43,5 @@
      */
     public void addNoRedraw(final Command c) {
+        lastSelection = Main.main.getCurrentDataSet().getSelected();
         c.executeCommand();
         commands.add(c);
@@ -73,5 +82,10 @@
         }
         fireCommandsChanged();
-        Main.main.getCurrentDataSet().setSelected();
+        List<OsmPrimitive> all = Main.main.getCurrentDataSet().allPrimitives();
+        for (OsmPrimitive op : lastSelection) {
+            if (all.contains(op)) {
+                Main.main.getCurrentDataSet().addSelected(op);
+            }
+        }
     }
 
