Index: trunk/src/org/openstreetmap/josm/data/UndoRedoHandler.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/UndoRedoHandler.java	(revision 2550)
+++ trunk/src/org/openstreetmap/josm/data/UndoRedoHandler.java	(revision 2552)
@@ -2,5 +2,4 @@
 package org.openstreetmap.josm.data;
 
-import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Iterator;
@@ -67,7 +66,7 @@
      */
     public void undo() {
-        Collection<? extends OsmPrimitive> lastSelection = Main.main.getCurrentDataSet().getSelected();
         if (commands.isEmpty())
             return;
+        Collection<? extends OsmPrimitive> oldSelection = Main.main.getCurrentDataSet().getSelected();
         final Command c = commands.removeLast();
         c.undoCommand();
@@ -78,9 +77,7 @@
         }
         fireCommandsChanged();
-        List<OsmPrimitive> all = Main.main.getCurrentDataSet().allPrimitives();
-        for (OsmPrimitive op : lastSelection) {
-            if (all.contains(op)) {
-                Main.main.getCurrentDataSet().addSelected(op);
-            }
+        Collection<? extends OsmPrimitive> newSelection = Main.main.getCurrentDataSet().getSelected();
+        if (!oldSelection.equals(newSelection)) {
+            Main.main.getCurrentDataSet().fireSelectionChanged();
         }
     }
@@ -93,4 +90,5 @@
         if (redoCommands.isEmpty())
             return;
+        Collection<? extends OsmPrimitive> oldSelection = Main.main.getCurrentDataSet().getSelected();
         final Command c = redoCommands.pop();
         c.executeCommand();
@@ -101,4 +99,8 @@
         }
         fireCommandsChanged();
+        Collection<? extends OsmPrimitive> newSelection = Main.main.getCurrentDataSet().getSelected();
+        if (!oldSelection.equals(newSelection)) {
+            Main.main.getCurrentDataSet().fireSelectionChanged();
+        }
     }
 
