Index: trunk/src/org/openstreetmap/josm/data/osm/DataSelectionListener.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/DataSelectionListener.java	(revision 12112)
+++ trunk/src/org/openstreetmap/josm/data/osm/DataSelectionListener.java	(revision 12113)
@@ -133,5 +133,5 @@
         public SelectionReplaceEvent(DataSet source, Set<OsmPrimitive> old, Stream<OsmPrimitive> newSelection) {
             super(source, old);
-            this.current = newSelection.collect(Collectors.toSet());
+            this.current = newSelection.collect(Collectors.toCollection(LinkedHashSet::new));
         }
 
@@ -144,5 +144,7 @@
         public synchronized Set<OsmPrimitive> getRemoved() {
             if (removed == null) {
-                removed = getOldSelection().stream().filter(p -> !current.contains(p)).collect(Collectors.toSet());
+                removed = getOldSelection().stream()
+                        .filter(p -> !current.contains(p))
+                        .collect(Collectors.toCollection(LinkedHashSet::new));
             }
             return removed;
@@ -152,5 +154,6 @@
         public synchronized Set<OsmPrimitive> getAdded() {
             if (added == null) {
-                added = current.stream().filter(p -> !getOldSelection().contains(p)).collect(Collectors.toSet());
+                added = current.stream()
+                        .filter(p -> !getOldSelection().contains(p)).collect(Collectors.toCollection(LinkedHashSet::new));
             }
             return added;
@@ -175,5 +178,7 @@
         public SelectionAddEvent(DataSet source, Set<OsmPrimitive> old, Stream<OsmPrimitive> toAdd) {
             super(source, old);
-            this.add = toAdd.filter(p -> !old.contains(p)).collect(Collectors.toSet());
+            this.add = toAdd
+                    .filter(p -> !old.contains(p))
+                    .collect(Collectors.toCollection(LinkedHashSet::new));
             if (this.add.isEmpty()) {
                 this.current = this.getOldSelection();
@@ -217,5 +222,7 @@
         public SelectionRemoveEvent(DataSet source, Set<OsmPrimitive> old, Stream<OsmPrimitive> toRemove) {
             super(source, old);
-            this.remove = toRemove.filter(old::contains).collect(Collectors.toSet());
+            this.remove = toRemove
+                    .filter(old::contains)
+                    .collect(Collectors.toCollection(LinkedHashSet::new));
             if (this.remove.isEmpty()) {
                 this.current = this.getOldSelection();
