Index: trunk/src/org/openstreetmap/josm/data/osm/DataSelectionListener.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/DataSelectionListener.java	(revision 12328)
+++ trunk/src/org/openstreetmap/josm/data/osm/DataSelectionListener.java	(revision 12329)
@@ -230,5 +230,5 @@
                 HashSet<OsmPrimitive> currentSet = new LinkedHashSet<>(old);
                 currentSet.removeAll(remove);
-                current = Collections.unmodifiableSet(currentSet);
+                current = currentSet;
             }
         }
Index: trunk/src/org/openstreetmap/josm/data/osm/DataSet.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/DataSet.java	(revision 12328)
+++ trunk/src/org/openstreetmap/josm/data/osm/DataSet.java	(revision 12329)
@@ -584,4 +584,7 @@
     private void removePrimitiveImpl(OsmPrimitive primitive) {
         clearSelection(primitive.getPrimitiveId());
+        if (primitive.isSelected()) {
+            throw new DataIntegrityProblemException("Primitive was re-selected by a selection listener: " + primitive);
+        }
         super.removePrimitive(primitive);
         allPrimitives.remove(primitive);
