Index: /trunk/src/org/openstreetmap/josm/actions/JosmAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/JosmAction.java	(revision 13924)
+++ /trunk/src/org/openstreetmap/josm/actions/JosmAction.java	(revision 13925)
@@ -17,9 +17,8 @@
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.command.Command;
-import org.openstreetmap.josm.data.SelectionChangedListener;
+import org.openstreetmap.josm.data.osm.DataSelectionListener;
 import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.OsmUtils;
-import org.openstreetmap.josm.data.osm.event.DatasetEventManager.FireMode;
 import org.openstreetmap.josm.data.osm.event.SelectionEventManager;
 import org.openstreetmap.josm.gui.ConditionalOptionPaneUtil;
@@ -46,5 +45,5 @@
  * layer/selection listeners that call {@link #updateEnabledState()} whenever the global context is changed.
  *
- * A JosmAction can register a {@link LayerChangeListener} and a {@link SelectionChangedListener}. Upon
+ * A JosmAction can register a {@link LayerChangeListener} and a {@link DataSelectionListener}. Upon
  * a layer change event or a selection change event it invokes {@link #updateEnabledState()}.
  * Subclasses can override {@link #updateEnabledState()} in order to update the {@link #isEnabled()}-state
@@ -203,6 +202,5 @@
         if (listenToSelectionChange()) {
             selectionChangeAdapter = new SelectionChangeAdapter();
-            SelectionEventManager.getInstance()
-                .addSelectionListener(selectionChangeAdapter, FireMode.IN_EDT_CONSOLIDATED);
+            SelectionEventManager.getInstance().addSelectionListenerForEdt(selectionChangeAdapter);
         }
         initEnabledState();
@@ -220,5 +218,5 @@
     /**
      * Overwrite this if {@link #updateEnabledState()} should be called when the selection changed. Default is true.
-     * @return <code>true</code> if a {@link SelectionChangedListener} should be registered.
+     * @return <code>true</code> if a {@link DataSelectionListener} should be registered.
      * @since 10353
      */
@@ -237,5 +235,5 @@
         }
         if (selectionChangeAdapter != null) {
-            DataSet.removeSelectionListener(selectionChangeAdapter);
+            SelectionEventManager.getInstance().removeSelectionListener(selectionChangeAdapter);
         }
     }
@@ -417,8 +415,8 @@
      * Adapter for selection change events. Runs updateEnabledState() whenever the selection changed.
      */
-    protected class SelectionChangeAdapter implements SelectionChangedListener {
-        @Override
-        public void selectionChanged(Collection<? extends OsmPrimitive> newSelection) {
-            updateEnabledState(newSelection);
+    protected class SelectionChangeAdapter implements DataSelectionListener {
+        @Override
+        public void selectionChanged(SelectionChangeEvent event) {
+            updateEnabledState(event.getSelection());
         }
 
Index: /trunk/src/org/openstreetmap/josm/actions/mapmode/ImproveWayAccuracyAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/mapmode/ImproveWayAccuracyAction.java	(revision 13924)
+++ /trunk/src/org/openstreetmap/josm/actions/mapmode/ImproveWayAccuracyAction.java	(revision 13925)
@@ -29,6 +29,6 @@
 import org.openstreetmap.josm.command.SequenceCommand;
 import org.openstreetmap.josm.data.Bounds;
-import org.openstreetmap.josm.data.SelectionChangedListener;
 import org.openstreetmap.josm.data.coor.EastNorth;
+import org.openstreetmap.josm.data.osm.DataSelectionListener;
 import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.Node;
@@ -36,4 +36,5 @@
 import org.openstreetmap.josm.data.osm.Way;
 import org.openstreetmap.josm.data.osm.WaySegment;
+import org.openstreetmap.josm.data.osm.event.SelectionEventManager;
 import org.openstreetmap.josm.data.preferences.CachingProperty;
 import org.openstreetmap.josm.data.preferences.IntegerProperty;
@@ -59,6 +60,5 @@
  * @author Alexander Kachkaev &lt;alexander@kachkaev.ru&gt;, 2011
  */
-public class ImproveWayAccuracyAction extends MapMode implements
-        SelectionChangedListener, ModifierExListener {
+public class ImproveWayAccuracyAction extends MapMode implements DataSelectionListener, ModifierExListener {
 
     private static final String CROSSHAIR = /* ICON(cursor/)*/ "crosshair";
@@ -154,5 +154,5 @@
         map.mapView.addMouseMotionListener(this);
         map.mapView.addTemporaryLayer(temporaryLayer);
-        DataSet.addSelectionListener(this);
+        SelectionEventManager.getInstance().addSelectionListener(this);
 
         map.keyDetector.addModifierExListener(this);
@@ -172,5 +172,5 @@
         map.mapView.removeMouseMotionListener(this);
         map.mapView.removeTemporaryLayer(temporaryLayer);
-        DataSet.removeSelectionListener(this);
+        SelectionEventManager.getInstance().removeSelectionListener(this);
 
         map.keyDetector.removeModifierExListener(this);
@@ -368,5 +368,5 @@
 
     @Override
-    public void selectionChanged(Collection<? extends OsmPrimitive> newSelection) {
+    public void selectionChanged(SelectionChangeEvent event) {
         if (selectionChangedBlocked) {
             return;
Index: /trunk/src/org/openstreetmap/josm/actions/relation/AddSelectionToRelations.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/relation/AddSelectionToRelations.java	(revision 13924)
+++ /trunk/src/org/openstreetmap/josm/actions/relation/AddSelectionToRelations.java	(revision 13925)
@@ -13,5 +13,5 @@
 import org.openstreetmap.josm.command.Command;
 import org.openstreetmap.josm.command.SequenceCommand;
-import org.openstreetmap.josm.data.SelectionChangedListener;
+import org.openstreetmap.josm.data.osm.DataSelectionListener;
 import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
@@ -28,5 +28,5 @@
  * @since 5799
  */
-public class AddSelectionToRelations extends AbstractRelationAction implements SelectionChangedListener {
+public class AddSelectionToRelations extends AbstractRelationAction implements DataSelectionListener {
     /**
     * Constructs a new <code>AddSelectionToRelation</code>.
@@ -69,8 +69,12 @@
     }
 
-    @Override
-    public void selectionChanged(final Collection<? extends OsmPrimitive> newSelection) {
+    private void selectionChanged(final Collection<? extends OsmPrimitive> newSelection) {
         GuiHelper.runInEDT(() -> setEnabled(newSelection != null && !newSelection.isEmpty()
                 && OsmUtils.isOsmCollectionEditable(relations)));
     }
+
+    @Override
+    public void selectionChanged(SelectionChangeEvent event) {
+        selectionChanged(event.getSelection());
+    }
 }
Index: /trunk/src/org/openstreetmap/josm/data/SelectionChangedListener.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/SelectionChangedListener.java	(revision 13924)
+++ /trunk/src/org/openstreetmap/josm/data/SelectionChangedListener.java	(revision 13925)
@@ -30,5 +30,7 @@
      * Informs the listener that the selection in the dataset has changed.
      * @param newSelection The new selection.
+     * @deprecated use {@link DataSelectionListener} instead
      */
+    @Deprecated
     void selectionChanged(Collection<? extends OsmPrimitive> newSelection);
 }
Index: /trunk/src/org/openstreetmap/josm/data/osm/DataSet.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/osm/DataSet.java	(revision 13924)
+++ /trunk/src/org/openstreetmap/josm/data/osm/DataSet.java	(revision 13925)
@@ -548,5 +548,7 @@
      * themselves for any dataset selection changes that occur, regardless of the current active
      * dataset. (However, the selection does only change in the active layer)
-     */
+     * @deprecated to be removed
+     */
+    @Deprecated
     private static final Collection<SelectionChangedListener> selListeners = new CopyOnWriteArrayList<>();
 
@@ -556,5 +558,7 @@
      * @see #addSelectionListener(DataSelectionListener)
      * @see SelectionEventManager#removeSelectionListener(SelectionChangedListener)
-     */
+     * @deprecated Use {@link SelectionEventManager#addSelectionListener(DataSelectionListener)} instead
+     */
+    @Deprecated
     public static void addSelectionListener(SelectionChangedListener listener) {
         ((CopyOnWriteArrayList<SelectionChangedListener>) selListeners).addIfAbsent(listener);
@@ -566,9 +570,16 @@
      * @see #removeSelectionListener(DataSelectionListener)
      * @see SelectionEventManager#removeSelectionListener(SelectionChangedListener)
-     */
+     * @deprecated Use {@link SelectionEventManager#removeSelectionListener(DataSelectionListener)} instead
+     */
+    @Deprecated
     public static void removeSelectionListener(SelectionChangedListener listener) {
         selListeners.remove(listener);
     }
 
+    /**
+     * @deprecated to be removed
+     * @param currentSelection current selection
+     */
+    @Deprecated
     private static void fireSelectionChange(Collection<? extends OsmPrimitive> currentSelection) {
         for (SelectionChangedListener l : selListeners) {
Index: /trunk/src/org/openstreetmap/josm/data/osm/OsmData.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/osm/OsmData.java	(revision 13924)
+++ /trunk/src/org/openstreetmap/josm/data/osm/OsmData.java	(revision 13925)
@@ -11,5 +11,4 @@
 import org.openstreetmap.josm.data.DataSource;
 import org.openstreetmap.josm.data.ProjectionBounds;
-import org.openstreetmap.josm.data.SelectionChangedListener;
 import org.openstreetmap.josm.data.osm.event.SelectionEventManager;
 import org.openstreetmap.josm.data.osm.visitor.BoundingXYVisitor;
@@ -398,5 +397,5 @@
     /**
      * Sets the current selection to the primitives in <code>selection</code>
-     * and notifies all {@link SelectionChangedListener}.
+     * and notifies all {@link DataSelectionListener}.
      *
      * @param selection the selection
@@ -406,5 +405,5 @@
     /**
      * Sets the current selection to the primitives in <code>osm</code>
-     * and notifies all {@link SelectionChangedListener}.
+     * and notifies all {@link DataSelectionListener}.
      *
      * @param osm the primitives to set. <code>null</code> values are ignored for now, but this may be removed in the future.
@@ -414,5 +413,5 @@
     /**
      * Adds the primitives in <code>selection</code> to the current selection
-     * and notifies all {@link SelectionChangedListener}.
+     * and notifies all {@link DataSelectionListener}.
      *
      * @param selection the selection
@@ -422,5 +421,5 @@
     /**
      * Adds the primitives in <code>osm</code> to the current selection
-     * and notifies all {@link SelectionChangedListener}.
+     * and notifies all {@link DataSelectionListener}.
      *
      * @param osm the primitives to add
@@ -449,6 +448,5 @@
      * @param listener The listener.
      * @see #removeSelectionListener(DataSelectionListener)
-     * @see SelectionEventManager#addSelectionListener(SelectionChangedListener,
-     *      org.openstreetmap.josm.data.osm.event.DatasetEventManager.FireMode)
+     * @see SelectionEventManager#addSelectionListener(DataSelectionListener)
      *      To add a global listener.
      */
Index: /trunk/src/org/openstreetmap/josm/data/osm/event/SelectionEventManager.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/osm/event/SelectionEventManager.java	(revision 13924)
+++ /trunk/src/org/openstreetmap/josm/data/osm/event/SelectionEventManager.java	(revision 13925)
@@ -48,4 +48,8 @@
     }
 
+    /**
+     * @deprecated to be removed
+     */
+    @Deprecated
     private static class OldListenerInfo implements ListenerInfo {
         private final SelectionChangedListener listener;
@@ -130,5 +134,7 @@
      * @param fireMode Set this to IN_EDT_CONSOLIDATED if you want the event to be fired in the EDT thread.
      *                 Set it to IMMEDIATELY if you want the event to fire in the thread that caused the selection update.
-     */
+     * @deprecated Use {@link #addSelectionListener(DataSelectionListener)} or {@link #addSelectionListenerForEdt(DataSelectionListener)}
+     */
+    @Deprecated
     public void addSelectionListener(SelectionChangedListener listener, FireMode fireMode) {
         if (fireMode == FireMode.IN_EDT) {
@@ -163,5 +169,7 @@
      * Unregisters a {@code SelectionChangedListener}.
      * @param listener listener to remove
-     */
+     * @deprecated use {@link #removeSelectionListener(DataSelectionListener)}
+     */
+    @Deprecated
     public void removeSelectionListener(SelectionChangedListener listener) {
         remove(new OldListenerInfo(listener));
Index: /trunk/src/org/openstreetmap/josm/data/osm/visitor/paint/relations/MultipolygonCache.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/osm/visitor/paint/relations/MultipolygonCache.java	(revision 13924)
+++ /trunk/src/org/openstreetmap/josm/data/osm/visitor/paint/relations/MultipolygonCache.java	(revision 13925)
@@ -10,5 +10,5 @@
 
 import org.openstreetmap.josm.Main;
-import org.openstreetmap.josm.data.SelectionChangedListener;
+import org.openstreetmap.josm.data.osm.DataSelectionListener;
 import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.Node;
@@ -23,4 +23,5 @@
 import org.openstreetmap.josm.data.osm.event.PrimitivesRemovedEvent;
 import org.openstreetmap.josm.data.osm.event.RelationMembersChangedEvent;
+import org.openstreetmap.josm.data.osm.event.SelectionEventManager;
 import org.openstreetmap.josm.data.osm.event.TagsChangedEvent;
 import org.openstreetmap.josm.data.osm.event.WayNodesChangedEvent;
@@ -39,5 +40,5 @@
  * @since 4623
  */
-public final class MultipolygonCache implements DataSetListener, LayerChangeListener, ProjectionChangeListener, SelectionChangedListener {
+public final class MultipolygonCache implements DataSetListener, LayerChangeListener, ProjectionChangeListener, DataSelectionListener {
 
     private static final MultipolygonCache INSTANCE = new MultipolygonCache();
@@ -49,5 +50,5 @@
     private MultipolygonCache() {
         Main.addProjectionChangeListener(this);
-        DataSet.addSelectionListener(this);
+        SelectionEventManager.getInstance().addSelectionListener(this);
         MainApplication.getLayerManager().addLayerChangeListener(this);
     }
@@ -294,5 +295,5 @@
 
     @Override
-    public synchronized void selectionChanged(Collection<? extends OsmPrimitive> newSelection) {
+    public synchronized void selectionChanged(SelectionChangeEvent event) {
 
         for (Iterator<PolyData> it = selectedPolyData.iterator(); it.hasNext();) {
@@ -303,5 +304,5 @@
         DataSet ds = null;
         Collection<Map<Relation, Multipolygon>> maps = null;
-        for (OsmPrimitive p : newSelection) {
+        for (OsmPrimitive p : event.getSelection()) {
             if (p instanceof Way && p.getDataSet() != null) {
                 if (ds == null) {
Index: /trunk/src/org/openstreetmap/josm/gui/MapStatus.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/MapStatus.java	(revision 13924)
+++ /trunk/src/org/openstreetmap/josm/gui/MapStatus.java	(revision 13925)
@@ -60,5 +60,4 @@
 
 import org.openstreetmap.josm.Main;
-import org.openstreetmap.josm.data.SelectionChangedListener;
 import org.openstreetmap.josm.data.SystemOfMeasurement;
 import org.openstreetmap.josm.data.SystemOfMeasurement.SoMChangeListener;
@@ -68,4 +67,5 @@
 import org.openstreetmap.josm.data.coor.conversion.ICoordinateFormat;
 import org.openstreetmap.josm.data.coor.conversion.ProjectedCoordinateFormat;
+import org.openstreetmap.josm.data.osm.DataSelectionListener;
 import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.DefaultNameFormatter;
@@ -121,5 +121,5 @@
  */
 public final class MapStatus extends JPanel implements
-    Helpful, Destroyable, PreferenceChangedListener, SoMChangeListener, SelectionChangedListener, DataSetListener, ZoomChangeListener {
+    Helpful, Destroyable, PreferenceChangedListener, SoMChangeListener, DataSelectionListener, DataSetListener, ZoomChangeListener {
 
     private final DecimalFormat DECIMAL_FORMAT = new DecimalFormat(Config.getPref().get("statusbar.decimal-format", "0.0"));
@@ -952,5 +952,5 @@
         Config.getPref().addPreferenceChangeListener(this);
         DatasetEventManager.getInstance().addDatasetListener(this, FireMode.IN_EDT);
-        SelectionEventManager.getInstance().addSelectionListener(this, FireMode.IN_EDT_CONSOLIDATED);
+        SelectionEventManager.getInstance().addSelectionListenerForEdt(this);
 
         mvComponentAdapter = new ComponentAdapter() {
@@ -1204,6 +1204,6 @@
 
     @Override
-    public void selectionChanged(Collection<? extends OsmPrimitive> newSelection) {
-        refreshDistText(newSelection);
+    public void selectionChanged(SelectionChangeEvent event) {
+        refreshDistText(event.getSelection());
     }
 
Index: /trunk/src/org/openstreetmap/josm/gui/dialogs/RelationListDialog.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/dialogs/RelationListDialog.java	(revision 13924)
+++ /trunk/src/org/openstreetmap/josm/gui/dialogs/RelationListDialog.java	(revision 13925)
@@ -61,4 +61,5 @@
 import org.openstreetmap.josm.data.osm.event.PrimitivesRemovedEvent;
 import org.openstreetmap.josm.data.osm.event.RelationMembersChangedEvent;
+import org.openstreetmap.josm.data.osm.event.SelectionEventManager;
 import org.openstreetmap.josm.data.osm.event.TagsChangedEvent;
 import org.openstreetmap.josm.data.osm.event.WayNodesChangedEvent;
@@ -239,5 +240,5 @@
         newAction.updateEnabledState();
         DatasetEventManager.getInstance().addDatasetListener(this, FireMode.IN_EDT);
-        DataSet.addSelectionListener(addSelectionToRelations);
+        SelectionEventManager.getInstance().addSelectionListener(addSelectionToRelations);
         dataChanged(null);
         ExpertToggleAction.addExpertModeChangeListener(this);
@@ -251,5 +252,5 @@
         MapView.removeZoomChangeListener(this);
         DatasetEventManager.getInstance().removeDatasetListener(this);
-        DataSet.removeSelectionListener(addSelectionToRelations);
+        SelectionEventManager.getInstance().removeSelectionListener(addSelectionToRelations);
         ExpertToggleAction.removeExpertModeChangeListener(this);
     }
Index: /trunk/src/org/openstreetmap/josm/gui/dialogs/SelectionListDialog.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/dialogs/SelectionListDialog.java	(revision 13924)
+++ /trunk/src/org/openstreetmap/josm/gui/dialogs/SelectionListDialog.java	(revision 13925)
@@ -42,5 +42,5 @@
 import org.openstreetmap.josm.actions.relation.EditRelationAction;
 import org.openstreetmap.josm.actions.relation.SelectInRelationListAction;
-import org.openstreetmap.josm.data.SelectionChangedListener;
+import org.openstreetmap.josm.data.osm.DataSelectionListener;
 import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.DefaultNameFormatter;
@@ -65,6 +65,6 @@
 import org.openstreetmap.josm.data.osm.visitor.BoundingXYVisitor;
 import org.openstreetmap.josm.gui.MainApplication;
+import org.openstreetmap.josm.gui.PopupMenuHandler;
 import org.openstreetmap.josm.gui.PrimitiveRenderer;
-import org.openstreetmap.josm.gui.PopupMenuHandler;
 import org.openstreetmap.josm.gui.SideButton;
 import org.openstreetmap.josm.gui.datatransfer.PrimitiveTransferable;
@@ -165,6 +165,6 @@
     @Override
     public void showNotify() {
-        SelectionEventManager.getInstance().addSelectionListener(actShowHistory, FireMode.IN_EDT_CONSOLIDATED);
-        SelectionEventManager.getInstance().addSelectionListener(model, FireMode.IN_EDT_CONSOLIDATED);
+        SelectionEventManager.getInstance().addSelectionListenerForEdt(actShowHistory);
+        SelectionEventManager.getInstance().addSelectionListenerForEdt(model);
         DatasetEventManager.getInstance().addDatasetListener(model, FireMode.IN_EDT);
         MainApplication.getLayerManager().addActiveLayerChangeListener(actSearch);
@@ -339,5 +339,5 @@
      * The action for showing history information of the current history item.
      */
-    class ShowHistoryAction extends AbstractAction implements ListSelectionListener, SelectionChangedListener {
+    class ShowHistoryAction extends AbstractAction implements ListSelectionListener, DataSelectionListener {
         /**
          * Constructs a new {@code ShowHistoryAction}.
@@ -372,6 +372,6 @@
 
         @Override
-        public void selectionChanged(Collection<? extends OsmPrimitive> newSelection) {
-            updateEnabledState(newSelection.size());
+        public void selectionChanged(SelectionChangeEvent event) {
+            updateEnabledState(event.getSelection().size());
         }
     }
@@ -461,5 +461,5 @@
      */
     static class SelectionListModel extends AbstractListModel<OsmPrimitive>
-    implements ActiveLayerChangeListener, SelectionChangedListener, DataSetListener {
+    implements ActiveLayerChangeListener, DataSelectionListener, DataSetListener {
 
         private static final int SELECTION_HISTORY_SIZE = 10;
@@ -673,9 +673,9 @@
 
         /* ------------------------------------------------------------------------ */
-        /* interface SelectionChangedListener                                       */
+        /* interface DataSelectionListener                                          */
         /* ------------------------------------------------------------------------ */
         @Override
-        public void selectionChanged(Collection<? extends OsmPrimitive> newSelection) {
-            setJOSMSelection(newSelection);
+        public void selectionChanged(SelectionChangeEvent event) {
+            setJOSMSelection(event.getSelection());
         }
 
Index: /trunk/src/org/openstreetmap/josm/gui/dialogs/ValidatorDialog.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/dialogs/ValidatorDialog.java	(revision 13924)
+++ /trunk/src/org/openstreetmap/josm/gui/dialogs/ValidatorDialog.java	(revision 13925)
@@ -34,9 +34,10 @@
 import org.openstreetmap.josm.actions.relation.EditRelationAction;
 import org.openstreetmap.josm.command.Command;
-import org.openstreetmap.josm.data.SelectionChangedListener;
+import org.openstreetmap.josm.data.osm.DataSelectionListener;
 import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.WaySegment;
+import org.openstreetmap.josm.data.osm.event.SelectionEventManager;
 import org.openstreetmap.josm.data.osm.visitor.BoundingXYVisitor;
 import org.openstreetmap.josm.data.osm.visitor.PrimitiveVisitor;
@@ -72,5 +73,5 @@
  * @author frsantos
  */
-public class ValidatorDialog extends ToggleDialog implements SelectionChangedListener, ActiveLayerChangeListener {
+public class ValidatorDialog extends ToggleDialog implements DataSelectionListener, ActiveLayerChangeListener {
 
     /** The display tree */
@@ -181,5 +182,5 @@
     @Override
     public void showNotify() {
-        DataSet.addSelectionListener(this);
+        SelectionEventManager.getInstance().addSelectionListener(this);
         DataSet ds = MainApplication.getLayerManager().getActiveDataSet();
         if (ds != null) {
@@ -192,5 +193,5 @@
     public void hideNotify() {
         MainApplication.getLayerManager().removeActiveLayerChangeListener(this);
-        DataSet.removeSelectionListener(this);
+        SelectionEventManager.getInstance().removeSelectionListener(this);
     }
 
@@ -585,6 +586,6 @@
 
     @Override
-    public void selectionChanged(Collection<? extends OsmPrimitive> newSelection) {
-        updateSelection(newSelection);
+    public void selectionChanged(SelectionChangeEvent event) {
+        updateSelection(event.getSelection());
     }
 
Index: /trunk/src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesDialog.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesDialog.java	(revision 13924)
+++ /trunk/src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesDialog.java	(revision 13925)
@@ -59,6 +59,6 @@
 import org.openstreetmap.josm.command.ChangePropertyCommand;
 import org.openstreetmap.josm.command.Command;
-import org.openstreetmap.josm.data.SelectionChangedListener;
 import org.openstreetmap.josm.data.osm.AbstractPrimitive;
+import org.openstreetmap.josm.data.osm.DataSelectionListener;
 import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.DefaultNameFormatter;
@@ -124,5 +124,5 @@
  */
 public class PropertiesDialog extends ToggleDialog
-implements SelectionChangedListener, ActiveLayerChangeListener, DataSetListenerAdapter.Listener {
+implements DataSelectionListener, ActiveLayerChangeListener, DataSetListenerAdapter.Listener {
 
     /**
@@ -512,5 +512,5 @@
     public void showNotify() {
         DatasetEventManager.getInstance().addDatasetListener(dataChangedAdapter, FireMode.IN_EDT_CONSOLIDATED);
-        SelectionEventManager.getInstance().addSelectionListener(this, FireMode.IN_EDT_CONSOLIDATED);
+        SelectionEventManager.getInstance().addSelectionListenerForEdt(this);
         MainApplication.getLayerManager().addActiveLayerChangeListener(this);
         for (JosmAction action : josmActions) {
@@ -549,5 +549,5 @@
 
     @Override
-    public void selectionChanged(Collection<? extends OsmPrimitive> newSelection) {
+    public void selectionChanged(SelectionChangeEvent event) {
         if (!isVisible())
             return;
Index: /trunk/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTableModel.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTableModel.java	(revision 13924)
+++ /trunk/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTableModel.java	(revision 13925)
@@ -21,6 +21,5 @@
 import javax.swing.table.AbstractTableModel;
 
-import org.openstreetmap.josm.data.SelectionChangedListener;
-import org.openstreetmap.josm.data.osm.DataSet;
+import org.openstreetmap.josm.data.osm.DataSelectionListener;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.Relation;
@@ -33,4 +32,5 @@
 import org.openstreetmap.josm.data.osm.event.PrimitivesRemovedEvent;
 import org.openstreetmap.josm.data.osm.event.RelationMembersChangedEvent;
+import org.openstreetmap.josm.data.osm.event.SelectionEventManager;
 import org.openstreetmap.josm.data.osm.event.TagsChangedEvent;
 import org.openstreetmap.josm.data.osm.event.WayNodesChangedEvent;
@@ -53,5 +53,5 @@
  */
 public class MemberTableModel extends AbstractTableModel
-implements TableModelListener, SelectionChangedListener, DataSetListener, OsmPrimitivesTableModel {
+implements TableModelListener, DataSelectionListener, DataSetListener, OsmPrimitivesTableModel {
 
     /**
@@ -97,5 +97,5 @@
      */
     public void register() {
-        DataSet.addSelectionListener(this);
+        SelectionEventManager.getInstance().addSelectionListener(this);
         getLayer().data.addDataSetListener(this);
     }
@@ -105,13 +105,13 @@
      */
     public void unregister() {
-        DataSet.removeSelectionListener(this);
+        SelectionEventManager.getInstance().removeSelectionListener(this);
         getLayer().data.removeDataSetListener(this);
     }
 
     /* --------------------------------------------------------------------------- */
-    /* Interface SelectionChangedListener                                          */
+    /* Interface DataSelectionListener                                             */
     /* --------------------------------------------------------------------------- */
     @Override
-    public void selectionChanged(Collection<? extends OsmPrimitive> newSelection) {
+    public void selectionChanged(SelectionChangeEvent event) {
         if (MainApplication.getLayerManager().getActiveDataLayer() != this.layer) return;
         // just trigger a repaint
Index: /trunk/src/org/openstreetmap/josm/gui/dialogs/relation/SelectionTableModel.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/dialogs/relation/SelectionTableModel.java	(revision 13924)
+++ /trunk/src/org/openstreetmap/josm/gui/dialogs/relation/SelectionTableModel.java	(revision 13925)
@@ -7,7 +7,7 @@
 import javax.swing.table.AbstractTableModel;
 
-import org.openstreetmap.josm.data.SelectionChangedListener;
-import org.openstreetmap.josm.data.osm.DataSet;
+import org.openstreetmap.josm.data.osm.DataSelectionListener;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
+import org.openstreetmap.josm.data.osm.event.SelectionEventManager;
 import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.gui.layer.LayerManager.LayerAddEvent;
@@ -22,6 +22,7 @@
 /**
  * This table shows the primitives that are currently selected in the main OSM view.
+ * @since 1790
  */
-public class SelectionTableModel extends AbstractTableModel implements SelectionChangedListener, ActiveLayerChangeListener, LayerChangeListener {
+public class SelectionTableModel extends AbstractTableModel implements DataSelectionListener, ActiveLayerChangeListener, LayerChangeListener {
 
     /** this selection table model only displays selected primitives in this layer */
@@ -46,5 +47,5 @@
      */
     public void register() {
-        DataSet.addSelectionListener(this);
+        SelectionEventManager.getInstance().addSelectionListener(this);
         MainApplication.getLayerManager().addActiveLayerChangeListener(this);
     }
@@ -54,5 +55,5 @@
      */
     public void unregister() {
-        DataSet.removeSelectionListener(this);
+        SelectionEventManager.getInstance().removeSelectionListener(this);
         MainApplication.getLayerManager().removeActiveLayerChangeListener(this);
     }
@@ -106,5 +107,9 @@
 
     @Override
-    public void selectionChanged(Collection<? extends OsmPrimitive> newSelection) {
+    public void selectionChanged(SelectionChangeEvent event) {
+        selectionChanged(event.getSelection());
+    }
+
+    private void selectionChanged(Collection<? extends OsmPrimitive> newSelection) {
         if (layer == MainApplication.getLayerManager().getActiveDataLayer()) {
             cache.clear();
@@ -116,4 +121,8 @@
     }
 
+    /**
+     * Returns the selected primitives.
+     * @return the selected primitives
+     */
     public List<OsmPrimitive> getSelection() {
         return cache;
Index: /trunk/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresetSearchDialog.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresetSearchDialog.java	(revision 13924)
+++ /trunk/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresetSearchDialog.java	(revision 13925)
@@ -7,5 +7,5 @@
 
 import org.openstreetmap.josm.Main;
-import org.openstreetmap.josm.data.osm.DataSet;
+import org.openstreetmap.josm.data.osm.event.SelectionEventManager;
 import org.openstreetmap.josm.gui.ExtendedDialog;
 
@@ -35,5 +35,5 @@
         selector = new TaggingPresetSelector(true, true);
         setContent(selector, false);
-        DataSet.addSelectionListener(selector);
+        SelectionEventManager.getInstance().addSelectionListener(selector);
         selector.setDblClickListener(e -> buttonAction(0, null));
     }
Index: /trunk/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresetSelector.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresetSelector.java	(revision 13924)
+++ /trunk/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresetSelector.java	(revision 13925)
@@ -35,5 +35,5 @@
 
 import org.openstreetmap.josm.Main;
-import org.openstreetmap.josm.data.SelectionChangedListener;
+import org.openstreetmap.josm.data.osm.DataSelectionListener;
 import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
@@ -53,5 +53,5 @@
  * @since 6068
  */
-public class TaggingPresetSelector extends SearchTextResultListPanel<TaggingPreset> implements SelectionChangedListener {
+public class TaggingPresetSelector extends SearchTextResultListPanel<TaggingPreset> implements DataSelectionListener {
 
     private static final int CLASSIFICATION_IN_FAVORITES = 300;
@@ -370,5 +370,5 @@
 
     @Override
-    public void selectionChanged(Collection<? extends OsmPrimitive> newSelection) {
+    public void selectionChanged(SelectionChangeEvent event) {
         typesInSelectionDirty = true;
     }
Index: /trunk/test/unit/org/openstreetmap/josm/data/osm/event/SelectionEventManagerTest.java
===================================================================
--- /trunk/test/unit/org/openstreetmap/josm/data/osm/event/SelectionEventManagerTest.java	(revision 13924)
+++ /trunk/test/unit/org/openstreetmap/josm/data/osm/event/SelectionEventManagerTest.java	(revision 13925)
@@ -27,4 +27,5 @@
  * @since 12048
  */
+@SuppressWarnings("deprecation")
 public class SelectionEventManagerTest {
     private final class SelectionListener implements SelectionChangedListener, DataSelectionListener {
