Index: trunk/src/org/openstreetmap/josm/data/UndoRedoHandler.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/UndoRedoHandler.java	(revision 17397)
+++ trunk/src/org/openstreetmap/josm/data/UndoRedoHandler.java	(revision 17399)
@@ -4,8 +4,6 @@
 import java.util.Collections;
 import java.util.EventObject;
-import java.util.HashMap;
 import java.util.LinkedList;
 import java.util.List;
-import java.util.Map;
 import java.util.Objects;
 
@@ -13,6 +11,4 @@
 import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.OsmDataManager;
-import org.openstreetmap.josm.gui.MainApplication;
-import org.openstreetmap.josm.gui.layer.OsmDataLayer;
 import org.openstreetmap.josm.gui.util.GuiHelper;
 import org.openstreetmap.josm.spi.preferences.Config;
@@ -45,7 +41,5 @@
 
     private static class InstanceHolder {
-        static final UndoRedoHandler NO_DATA_SET_INSTANCE = new UndoRedoHandler();
-        static final Map<DataSet, UndoRedoHandler> map = new HashMap<>();
-
+        static final UndoRedoHandler INSTANCE = new UndoRedoHandler();
     }
 
@@ -56,9 +50,5 @@
      */
     public static UndoRedoHandler getInstance() {
-        OsmDataLayer editLayer = MainApplication.getLayerManager().getEditLayer();
-        if (editLayer != null && editLayer == MainApplication.getLayerManager().getActiveLayer()) {
-            return InstanceHolder.map.computeIfAbsent(editLayer.data, k -> new UndoRedoHandler());
-        }
-        return InstanceHolder.NO_DATA_SET_INSTANCE;
+        return InstanceHolder.INSTANCE;
     }
 
@@ -443,10 +433,4 @@
             l.commandChanged(commands.size(), redoCommands.size());
         }
-        if (getInstance() != InstanceHolder.NO_DATA_SET_INSTANCE) {
-            for (final CommandQueueListener l : InstanceHolder.NO_DATA_SET_INSTANCE.listenerCommands) {
-                l.commandChanged(commands.size(), redoCommands.size());
-            }
-
-        }
     }
 
@@ -470,10 +454,13 @@
      * @since 12718
      */
-    public static synchronized void clean(DataSet dataSet) {
+    public synchronized void clean(DataSet dataSet) {
         if (dataSet == null)
             return;
-        UndoRedoHandler old = InstanceHolder.map.remove(dataSet);
-        if (old != null) {
-            old.clean();
+        boolean changed = false;
+        changed |= commands.removeIf(c -> c.getAffectedDataSet() == dataSet);
+        changed |= redoCommands.removeIf(c -> c.getAffectedDataSet() == dataSet);
+        if (changed) {
+            fireEvent(new CommandQueueCleanedEvent(this, dataSet));
+            fireCommandsChanged();
         }
     }
Index: trunk/src/org/openstreetmap/josm/gui/MainApplication.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/MainApplication.java	(revision 17397)
+++ trunk/src/org/openstreetmap/josm/gui/MainApplication.java	(revision 17399)
@@ -222,5 +222,5 @@
             Layer layer = e.getRemovedLayer();
             if (layer instanceof OsmDataLayer) {
-                UndoRedoHandler.clean(((OsmDataLayer) layer).getDataSet());
+                UndoRedoHandler.getInstance().clean(((OsmDataLayer) layer).getDataSet());
             }
         }
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/CommandStackDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/CommandStackDialog.java	(revision 17397)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/CommandStackDialog.java	(revision 17399)
@@ -51,6 +51,4 @@
 import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.gui.SideButton;
-import org.openstreetmap.josm.gui.layer.MainLayerManager.ActiveLayerChangeEvent;
-import org.openstreetmap.josm.gui.layer.MainLayerManager.ActiveLayerChangeListener;
 import org.openstreetmap.josm.gui.layer.OsmDataLayer;
 import org.openstreetmap.josm.gui.widgets.PopupMenuLauncher;
@@ -65,5 +63,5 @@
  * @since 94
  */
-public class CommandStackDialog extends ToggleDialog implements CommandQueuePreciseListener, ActiveLayerChangeListener {
+public class CommandStackDialog extends ToggleDialog implements CommandQueuePreciseListener {
 
     private final DefaultTreeModel undoTreeModel = new DefaultTreeModel(new DefaultMutableTreeNode());
@@ -147,5 +145,4 @@
         InputMapUtils.addEnterAction(undoTree, selectAndZoomAction);
         InputMapUtils.addEnterAction(redoTree, selectAndZoomAction);
-        MainApplication.getLayerManager().addActiveLayerChangeListener(this);
     }
 
@@ -556,9 +553,3 @@
         }
     }
-
-    @Override
-    public void activeOrEditLayerChanged(ActiveLayerChangeEvent e) {
-        hideNotify();
-        showNotify();
-    }
 }
Index: trunk/src/org/openstreetmap/josm/gui/io/AsynchronousUploadPrimitivesTask.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/io/AsynchronousUploadPrimitivesTask.java	(revision 17397)
+++ trunk/src/org/openstreetmap/josm/gui/io/AsynchronousUploadPrimitivesTask.java	(revision 17399)
@@ -121,5 +121,5 @@
         GuiHelper.runInEDTAndWait(() -> {
             // Remove the commands from the undo stack
-            UndoRedoHandler.clean(uploadDataLayer.getDataSet());
+            UndoRedoHandler.getInstance().clean(uploadDataLayer.getDataSet());
             MainApplication.getLayerManager().prepareLayerForUpload(uploadDataLayer);
 
Index: trunk/src/org/openstreetmap/josm/gui/layer/OsmDataLayer.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/layer/OsmDataLayer.java	(revision 17397)
+++ trunk/src/org/openstreetmap/josm/gui/layer/OsmDataLayer.java	(revision 17399)
@@ -654,5 +654,5 @@
             return;
 
-        UndoRedoHandler.clean(data);
+        UndoRedoHandler.getInstance().clean(data);
 
         // if uploaded, clean the modified flags as well
