Index: trunk/src/org/openstreetmap/josm/data/osm/DataSet.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/DataSet.java	(revision 3457)
+++ trunk/src/org/openstreetmap/josm/data/osm/DataSet.java	(revision 3458)
@@ -431,15 +431,16 @@
      */
     public void setSelected(Collection<? extends PrimitiveId> selection, boolean fireSelectionChangeEvent) {
-        boolean wasEmpty;
+        boolean changed;
         synchronized (selectionLock) {
-            wasEmpty = selectedPrimitives.isEmpty();
+            boolean wasEmpty = selectedPrimitives.isEmpty();
             selectedPrimitives = new LinkedHashSet<OsmPrimitive>();
-            addSelected(selection, fireSelectionChangeEvent);
-            if (!wasEmpty && selectedPrimitives.isEmpty()) {
+            changed = addSelected(selection, false)
+                            || (!wasEmpty && selectedPrimitives.isEmpty());
+            if (changed) {
                 selectionSnapshot = null;
             }
         }
 
-        if (!wasEmpty && selectedPrimitives.isEmpty() && fireSelectionChangeEvent) {
+        if (changed && fireSelectionChangeEvent) {
             // If selection is not empty then event was already fired in addSelecteds
             fireSelectionChanged();
@@ -486,6 +487,7 @@
      * @param selection the selection
      * @param fireSelectionChangeEvent true, if the selection change listeners are to be notified; false, otherwise
-     */
-    public void addSelected(Collection<? extends PrimitiveId> selection, boolean fireSelectionChangeEvent) {
+     * @return if the selection was changed in the process
+     */
+    private boolean addSelected(Collection<? extends PrimitiveId> selection, boolean fireSelectionChangeEvent) {
         boolean changed = false;
         synchronized (selectionLock) {
@@ -503,4 +505,5 @@
             fireSelectionChanged();
         }
+        return changed;
     }
 
