Index: src/org/openstreetmap/josm/actions/CopyAction.java
===================================================================
--- src/org/openstreetmap/josm/actions/CopyAction.java	(revision 1826)
+++ src/org/openstreetmap/josm/actions/CopyAction.java	(working copy)
@@ -128,8 +128,8 @@
     }
 
     @Override
-    protected void updateEnabledState() {
-        setEnabled(getCurrentDataSet() != null && ! getCurrentDataSet().getSelected().isEmpty());
+    protected void updateEnabledState(Collection<? extends OsmPrimitive> Selection) {
+        setEnabled(Selection != null && !Selection.isEmpty());
     }
 
     private boolean isEmptySelection() {
Index: src/org/openstreetmap/josm/actions/RedoAction.java
===================================================================
--- src/org/openstreetmap/josm/actions/RedoAction.java	(revision 1826)
+++ src/org/openstreetmap/josm/actions/RedoAction.java	(working copy)
@@ -5,8 +5,10 @@
 
 import java.awt.event.ActionEvent;
 import java.awt.event.KeyEvent;
+import java.util.Collection;
 
 import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.tools.Shortcut;
 
 /**
@@ -33,7 +35,7 @@
     }
 
     @Override
-    protected void updateEnabledState() {
+    protected void updateEnabledState(Collection<? extends OsmPrimitive> Selection) {
         setEnabled(Main.map != null);
     }
 }
Index: src/org/openstreetmap/josm/actions/SelectAllAction.java
===================================================================
--- src/org/openstreetmap/josm/actions/SelectAllAction.java	(revision 1826)
+++ src/org/openstreetmap/josm/actions/SelectAllAction.java	(working copy)
@@ -5,9 +5,9 @@
 
 import java.awt.event.ActionEvent;
 import java.awt.event.KeyEvent;
+import java.util.Collection;
 
-import org.openstreetmap.josm.gui.layer.Layer;
-import org.openstreetmap.josm.gui.layer.Layer.LayerChangeListener;
+import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.tools.Shortcut;
 
 public class SelectAllAction extends JosmAction {
@@ -28,7 +28,7 @@
      * 
      */
     @Override
-    protected void updateEnabledState() {
+    protected void updateEnabledState(Collection<? extends OsmPrimitive> Selection) {
         setEnabled(getEditLayer() != null);
     }
 }
Index: src/org/openstreetmap/josm/actions/DownloadReferrersAction.java
===================================================================
--- src/org/openstreetmap/josm/actions/DownloadReferrersAction.java	(revision 1826)
+++ src/org/openstreetmap/josm/actions/DownloadReferrersAction.java	(working copy)
@@ -164,7 +164,7 @@
      *
      */
     @Override
-    protected void updateEnabledState() {
-        setEnabled(getCurrentDataSet() != null && ! getCurrentDataSet().getSelected().isEmpty());
+    protected void updateEnabledState(Collection<? extends OsmPrimitive> Selection) {
+        setEnabled(Selection != null && !Selection.isEmpty());
     }
 }
Index: src/org/openstreetmap/josm/actions/UnGlueAction.java
===================================================================
--- src/org/openstreetmap/josm/actions/UnGlueAction.java	(revision 1826)
+++ src/org/openstreetmap/josm/actions/UnGlueAction.java	(working copy)
@@ -410,7 +410,7 @@
     }
 
     @Override
-    protected void updateEnabledState() {
-        setEnabled(getCurrentDataSet() != null && !getCurrentDataSet().getSelected().isEmpty());
+    protected void updateEnabledState(Collection<? extends OsmPrimitive> Selection) {
+        setEnabled(Selection != null && !Selection.isEmpty());
     }
 }
Index: src/org/openstreetmap/josm/actions/UploadAction.java
===================================================================
--- src/org/openstreetmap/josm/actions/UploadAction.java	(revision 1826)
+++ src/org/openstreetmap/josm/actions/UploadAction.java	(working copy)
@@ -159,7 +159,7 @@
      *
      */
     @Override
-    protected void updateEnabledState() {
+    protected void updateEnabledState(Collection<? extends OsmPrimitive> Selection) {
         setEnabled(getEditLayer() != null);
     }
 
Index: src/org/openstreetmap/josm/actions/UnselectAllAction.java
===================================================================
--- src/org/openstreetmap/josm/actions/UnselectAllAction.java	(revision 1826)
+++ src/org/openstreetmap/josm/actions/UnselectAllAction.java	(working copy)
@@ -5,9 +5,12 @@
 
 import java.awt.event.ActionEvent;
 import java.awt.event.KeyEvent;
+import java.util.Collection;
+
 import javax.swing.JComponent;
 
 import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.gui.layer.Layer;
 import org.openstreetmap.josm.gui.layer.Layer.LayerChangeListener;
 import org.openstreetmap.josm.tools.Shortcut;
@@ -48,7 +51,7 @@
      * 
      */
     @Override
-    protected void updateEnabledState() {
+    protected void updateEnabledState(Collection<? extends OsmPrimitive> Selection) {
         setEnabled(getEditLayer() != null);
     }
 }
Index: src/org/openstreetmap/josm/actions/SplitWayAction.java
===================================================================
--- src/org/openstreetmap/josm/actions/SplitWayAction.java	(revision 1826)
+++ src/org/openstreetmap/josm/actions/SplitWayAction.java	(working copy)
@@ -23,8 +23,6 @@
 import org.openstreetmap.josm.command.ChangeCommand;
 import org.openstreetmap.josm.command.Command;
 import org.openstreetmap.josm.command.SequenceCommand;
-import org.openstreetmap.josm.data.SelectionChangedListener;
-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.Relation;
@@ -33,8 +31,6 @@
 import org.openstreetmap.josm.data.osm.visitor.AbstractVisitor;
 import org.openstreetmap.josm.data.osm.visitor.Visitor;
 import org.openstreetmap.josm.gui.PrimitiveNameFormatter;
-import org.openstreetmap.josm.gui.layer.Layer;
-import org.openstreetmap.josm.gui.layer.Layer.LayerChangeListener;
 import org.openstreetmap.josm.tools.Shortcut;
 
 /**
@@ -338,11 +334,11 @@
     }
 
     @Override
-    protected void updateEnabledState() {
+    protected void updateEnabledState(Collection<? extends OsmPrimitive> Selection) {
         if (getCurrentDataSet() == null) {
             setEnabled(false);
             return;
         }
-        setEnabled(checkSelection(getCurrentDataSet().getSelected()));
+        setEnabled(checkSelection(Selection));
     }
 }
Index: src/org/openstreetmap/josm/actions/DistributeAction.java
===================================================================
--- src/org/openstreetmap/josm/actions/DistributeAction.java	(revision 1826)
+++ src/org/openstreetmap/josm/actions/DistributeAction.java	(working copy)
@@ -129,7 +129,7 @@
     }
 
     @Override
-    protected void updateEnabledState() {
-        setEnabled(getCurrentDataSet() != null && !getCurrentDataSet().getSelected().isEmpty());
+    protected void updateEnabledState(Collection<? extends OsmPrimitive> Selection) {
+        setEnabled(Selection != null && !Selection.isEmpty());
     }
 }
Index: src/org/openstreetmap/josm/actions/AutoScaleAction.java
===================================================================
--- src/org/openstreetmap/josm/actions/AutoScaleAction.java	(revision 1826)
+++ src/org/openstreetmap/josm/actions/AutoScaleAction.java	(working copy)
@@ -118,7 +118,7 @@
     }
 
     @Override
-    protected void updateEnabledState() {
+    protected void updateEnabledState(Collection<? extends OsmPrimitive> Selection) {
         setEnabled(Main.map != null);
     }
 
Index: src/org/openstreetmap/josm/actions/MirrorAction.java
===================================================================
--- src/org/openstreetmap/josm/actions/MirrorAction.java	(revision 1826)
+++ src/org/openstreetmap/josm/actions/MirrorAction.java	(working copy)
@@ -72,7 +72,8 @@
     }
 
     @Override
-    protected void updateEnabledState() {
-        setEnabled(getCurrentDataSet() != null && ! getCurrentDataSet().getSelected().isEmpty());
+    protected void updateEnabledState(Collection<? extends OsmPrimitive> Selection) {
+        setEnabled(Selection != null && !Selection.isEmpty());
     }
+
 }
Index: src/org/openstreetmap/josm/actions/OrthogonalizeAction.java
===================================================================
--- src/org/openstreetmap/josm/actions/OrthogonalizeAction.java	(revision 1826)
+++ src/org/openstreetmap/josm/actions/OrthogonalizeAction.java	(working copy)
@@ -280,7 +280,7 @@
     }
 
     @Override
-    protected void updateEnabledState() {
-        setEnabled(getCurrentDataSet() != null && ! getCurrentDataSet().getSelected().isEmpty());
+    protected void updateEnabledState(Collection<? extends OsmPrimitive> Selection) {
+        setEnabled(Selection != null && !Selection.isEmpty());
     }
 }
Index: src/org/openstreetmap/josm/actions/UndoAction.java
===================================================================
--- src/org/openstreetmap/josm/actions/UndoAction.java	(revision 1826)
+++ src/org/openstreetmap/josm/actions/UndoAction.java	(working copy)
@@ -5,8 +5,10 @@
 
 import java.awt.event.ActionEvent;
 import java.awt.event.KeyEvent;
+import java.util.Collection;
 
 import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.tools.Shortcut;
 
 /**
@@ -33,7 +35,7 @@
     }
 
     @Override
-    protected void updateEnabledState() {
+    protected void updateEnabledState(Collection<? extends OsmPrimitive> Selection) {
         setEnabled(Main.map != null);
     }
 }
Index: src/org/openstreetmap/josm/actions/JosmAction.java
===================================================================
--- src/org/openstreetmap/josm/actions/JosmAction.java	(revision 1826)
+++ src/org/openstreetmap/josm/actions/JosmAction.java	(working copy)
@@ -148,7 +148,7 @@
         selectionChangeAdapter = new SelectionChangeAdapter();
         Layer.listeners.add(layerChangeAdapter);
         DataSet.selListeners.add(selectionChangeAdapter);
-        updateEnabledState();
+        updateEnabledState((getCurrentDataSet() != null) ? getCurrentDataSet().getSelected() : null);
     }
 
     /**
@@ -161,7 +161,7 @@
      * also {@see #getEditLayer()}).
      * 
      */
-    protected void updateEnabledState() {
+    protected void updateEnabledState(Collection<? extends OsmPrimitive> Selection) {
         // override in subclasses
     }
 
@@ -171,15 +171,15 @@
      */
     private class LayerChangeAdapter implements LayerChangeListener {
         public void activeLayerChange(Layer oldLayer, Layer newLayer) {
-            updateEnabledState();
+            updateEnabledState((getCurrentDataSet() != null) ? getCurrentDataSet().getSelected() : null);
         }
 
         public void layerAdded(Layer newLayer) {
-            updateEnabledState();
+            updateEnabledState((getCurrentDataSet() != null) ? getCurrentDataSet().getSelected() : null);
         }
 
         public void layerRemoved(Layer oldLayer) {
-            updateEnabledState();
+            updateEnabledState((getCurrentDataSet() != null) ? getCurrentDataSet().getSelected() : null);
         }
     }
 
@@ -189,7 +189,7 @@
      */
     private class SelectionChangeAdapter implements SelectionChangedListener {
         public void selectionChanged(Collection<? extends OsmPrimitive> newSelection) {
-            updateEnabledState();
+            updateEnabledState(newSelection);
         }
     }
 }
Index: src/org/openstreetmap/josm/actions/PasteAction.java
===================================================================
--- src/org/openstreetmap/josm/actions/PasteAction.java	(revision 1826)
+++ src/org/openstreetmap/josm/actions/PasteAction.java	(working copy)
@@ -118,18 +118,18 @@
     }
 
     @Override
-    protected void updateEnabledState() {
-        if (getCurrentDataSet() == null || getCurrentDataSet().getSelected().isEmpty()) {
+    protected void updateEnabledState(Collection<? extends OsmPrimitive> Selection) {
+        if (getEditLayer() == null || Main.pasteBuffer == null) {
             setEnabled(false);
             return;
         }
-        if (Main.pasteBuffer == null) {
-            setEnabled(false);
-        }
         setEnabled(
-                !Main.pasteBuffer.nodes.isEmpty()
-                || !Main.pasteBuffer.ways.isEmpty()
-                || !Main.pasteBuffer.relations.isEmpty()
+                getEditLayer() != null
+                && (
+                        !Main.pasteBuffer.nodes.isEmpty()
+                        || !Main.pasteBuffer.ways.isEmpty()
+                        || !Main.pasteBuffer.relations.isEmpty()
+                )
         );
     }
 }
Index: src/org/openstreetmap/josm/actions/mapmode/DrawAction.java
===================================================================
--- src/org/openstreetmap/josm/actions/mapmode/DrawAction.java	(revision 1826)
+++ src/org/openstreetmap/josm/actions/mapmode/DrawAction.java	(working copy)
@@ -131,7 +131,7 @@
                         break;
                     default:
                         Main.map.mapView.setCursor(cursorCrosshair);
-                    break;
+                        break;
                     }
                 }
             });
@@ -830,14 +830,14 @@
 
         default:
             EastNorth P = n.getEastNorth();
-        seg = segs.iterator().next();
-        A = seg.a.getEastNorth();
-        B = seg.b.getEastNorth();
-        double a = P.distanceSq(B);
-        double b = P.distanceSq(A);
-        double c = A.distanceSq(B);
-        q = (a - b + c) / (2*c);
-        n.setEastNorth(new EastNorth(B.east() + q * (A.east() - B.east()), B.north() + q * (A.north() - B.north())));
+            seg = segs.iterator().next();
+            A = seg.a.getEastNorth();
+            B = seg.b.getEastNorth();
+            double a = P.distanceSq(B);
+            double b = P.distanceSq(A);
+            double c = A.distanceSq(B);
+            q = (a - b + c) / (2*c);
+            n.setEastNorth(new EastNorth(B.east() + q * (A.east() - B.east()), B.north() + q * (A.north() - B.north())));
         }
     }
 
@@ -959,7 +959,7 @@
     }
 
     @Override
-    protected void updateEnabledState() {
+    protected void updateEnabledState(Collection<? extends OsmPrimitive> Selection) {
         setEnabled(getEditLayer() != null);
     }
 }
Index: src/org/openstreetmap/josm/actions/mapmode/DeleteAction.java
===================================================================
--- src/org/openstreetmap/josm/actions/mapmode/DeleteAction.java	(revision 1826)
+++ src/org/openstreetmap/josm/actions/mapmode/DeleteAction.java	(working copy)
@@ -7,6 +7,7 @@
 import java.awt.event.InputEvent;
 import java.awt.event.KeyEvent;
 import java.awt.event.MouseEvent;
+import java.util.Collection;
 import java.util.Collections;
 
 import org.openstreetmap.josm.Main;
@@ -138,7 +139,7 @@
     }
 
     @Override
-    protected void updateEnabledState() {
+    protected void updateEnabledState(Collection<? extends OsmPrimitive> Selection) {
         setEnabled(Main.map != null && Main.map.mapView != null && Main.map.mapView.isActiveLayerDrawable());
     }
 }
Index: src/org/openstreetmap/josm/actions/UpdateDataAction.java
===================================================================
--- src/org/openstreetmap/josm/actions/UpdateDataAction.java	(revision 1826)
+++ src/org/openstreetmap/josm/actions/UpdateDataAction.java	(working copy)
@@ -7,6 +7,7 @@
 import java.awt.event.KeyEvent;
 import java.awt.geom.Area;
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.List;
 
 import javax.swing.JOptionPane;
@@ -14,6 +15,7 @@
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.actions.downloadtasks.DownloadOsmTaskList;
 import org.openstreetmap.josm.data.osm.DataSource;
+import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.gui.layer.Layer;
 import org.openstreetmap.josm.gui.layer.Layer.LayerChangeListener;
 import org.openstreetmap.josm.tools.Shortcut;
@@ -35,7 +37,7 @@
      * 
      */
     @Override
-    protected void updateEnabledState() {
+    protected void updateEnabledState(Collection<? extends OsmPrimitive> Selection) {
         setEnabled(getEditLayer() != null);
     }
 
Index: src/org/openstreetmap/josm/actions/CombineWayAction.java
===================================================================
--- src/org/openstreetmap/josm/actions/CombineWayAction.java	(revision 1826)
+++ src/org/openstreetmap/josm/actions/CombineWayAction.java	(working copy)
@@ -293,15 +293,14 @@
     }
 
     @Override
-    protected void updateEnabledState() {
+    protected void updateEnabledState(Collection<? extends OsmPrimitive> Selection) {
         if (getCurrentDataSet() == null) {
             setEnabled(false);
             return;
         }
-        Collection<OsmPrimitive> selection = getCurrentDataSet().getSelected();
         int numWays = 0;
 
-        for (OsmPrimitive osm : selection)
+        for (OsmPrimitive osm : Selection)
             if (osm instanceof Way) {
                 numWays++;
             }
Index: src/org/openstreetmap/josm/actions/ReverseWayAction.java
===================================================================
--- src/org/openstreetmap/josm/actions/ReverseWayAction.java	(revision 1826)
+++ src/org/openstreetmap/josm/actions/ReverseWayAction.java	(working copy)
@@ -17,22 +17,16 @@
 import org.openstreetmap.josm.command.SequenceCommand;
 import org.openstreetmap.josm.corrector.ReverseWayTagCorrector;
 import org.openstreetmap.josm.corrector.UserCancelException;
-import org.openstreetmap.josm.data.SelectionChangedListener;
 import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.Way;
-import org.openstreetmap.josm.gui.layer.Layer;
-import org.openstreetmap.josm.gui.layer.Layer.LayerChangeListener;
 import org.openstreetmap.josm.tools.Shortcut;
 
-public final class ReverseWayAction extends JosmAction implements SelectionChangedListener, LayerChangeListener {
+public final class ReverseWayAction extends JosmAction {
 
     public ReverseWayAction() {
         super(tr("Reverse Ways"), "wayflip", tr("Reverse the direction of all selected ways."),
                 Shortcut.registerShortcut("tools:reverse", tr("Tool: {0}", tr("Reverse Ways")), KeyEvent.VK_R, Shortcut.GROUP_EDIT), true);
-        DataSet.selListeners.add(this);
-        Layer.listeners.add(this);
-        refreshEnabled();
     }
 
     public void actionPerformed(ActionEvent e) {
@@ -81,10 +75,10 @@
         Main.map.repaint();
     }
 
-    protected int getNumWaysInSelection() {
-        if (getCurrentDataSet() == null) return 0;
+    protected int getNumWaysInSelection(Collection<? extends OsmPrimitive> Selection) {
+        if (Selection == null) return 0;
         int ret = 0;
-        for (OsmPrimitive primitive : getCurrentDataSet().getSelected()) {
+        for (OsmPrimitive primitive : Selection) {
             if (primitive instanceof Way) {
                 ret++;
             }
@@ -92,24 +86,8 @@
         return ret;
     }
 
-    protected void refreshEnabled() {
-        setEnabled(getNumWaysInSelection() > 0);
-    }
-
-    public void activeLayerChange(Layer oldLayer, Layer newLayer) {
-        refreshEnabled();
-    }
-
-    public void layerAdded(Layer newLayer) {
-        refreshEnabled();
-
-    }
-
-    public void layerRemoved(Layer oldLayer) {
-        refreshEnabled();
-    }
-
-    public void selectionChanged(Collection<? extends OsmPrimitive> newSelection) {
-        refreshEnabled();
+    @Override
+    protected void updateEnabledState(Collection<? extends OsmPrimitive> Selection) {
+        setEnabled(getNumWaysInSelection(Selection) > 0);
     }
 }
Index: src/org/openstreetmap/josm/actions/UpdateSelectionAction.java
===================================================================
--- src/org/openstreetmap/josm/actions/UpdateSelectionAction.java	(revision 1826)
+++ src/org/openstreetmap/josm/actions/UpdateSelectionAction.java	(working copy)
@@ -190,10 +190,8 @@
      *
      */
     @Override
-    protected void updateEnabledState() {
-        setEnabled(getCurrentDataSet() != null
-                && ! getCurrentDataSet().getSelected().isEmpty()
-        );
+    protected void updateEnabledState(Collection<? extends OsmPrimitive> Selection) {
+        setEnabled(Selection != null && !Selection.isEmpty());
     }
 
     /**
Index: src/org/openstreetmap/josm/actions/AbstractInfoAction.java
===================================================================
--- src/org/openstreetmap/josm/actions/AbstractInfoAction.java	(revision 1826)
+++ src/org/openstreetmap/josm/actions/AbstractInfoAction.java	(working copy)
@@ -5,6 +5,7 @@
 
 import java.awt.event.ActionEvent;
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.Iterator;
 import java.util.regex.Pattern;
 
@@ -86,7 +87,7 @@
     protected abstract String createInfoUrl(OsmPrimitive primitive);
 
     @Override
-    protected void updateEnabledState() {
-        setEnabled(getCurrentDataSet() != null && !getCurrentDataSet().getSelected().isEmpty());
+    protected void updateEnabledState(Collection<? extends OsmPrimitive> Selection) {
+        setEnabled(Selection != null && !Selection.isEmpty());
     }
 }
Index: src/org/openstreetmap/josm/actions/SaveActionBase.java
===================================================================
--- src/org/openstreetmap/josm/actions/SaveActionBase.java	(revision 1826)
+++ src/org/openstreetmap/josm/actions/SaveActionBase.java	(working copy)
@@ -13,6 +13,7 @@
 import java.io.OutputStreamWriter;
 import java.io.PrintWriter;
 import java.io.Writer;
+import java.util.Collection;
 import java.util.zip.GZIPOutputStream;
 
 import javax.swing.JOptionPane;
@@ -272,7 +273,7 @@
      * 
      */
     @Override
-    protected void updateEnabledState() {
+    protected void updateEnabledState(Collection<? extends OsmPrimitive> Selection) {
         boolean check =  Main.map != null
         && Main.map.mapView !=null
         && Main.map.mapView.getActiveLayer() != null;
Index: src/org/openstreetmap/josm/actions/JoinNodeWayAction.java
===================================================================
--- src/org/openstreetmap/josm/actions/JoinNodeWayAction.java	(revision 1826)
+++ src/org/openstreetmap/josm/actions/JoinNodeWayAction.java	(working copy)
@@ -87,7 +87,7 @@
     }
 
     @Override
-    protected void updateEnabledState() {
-        setEnabled(getCurrentDataSet() != null && ! getCurrentDataSet().getSelected().isEmpty());
+    protected void updateEnabledState(Collection<? extends OsmPrimitive> Selection) {
+        setEnabled(Selection != null && !Selection.isEmpty());
     }
 }
Index: src/org/openstreetmap/josm/actions/DeleteAction.java
===================================================================
--- src/org/openstreetmap/josm/actions/DeleteAction.java	(revision 1826)
+++ src/org/openstreetmap/josm/actions/DeleteAction.java	(working copy)
@@ -5,8 +5,10 @@
 
 import java.awt.event.ActionEvent;
 import java.awt.event.KeyEvent;
+import java.util.Collection;
 
 import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.tools.Shortcut;
 
 public final class DeleteAction extends JosmAction {
@@ -26,7 +28,7 @@
     }
 
     @Override
-    protected void updateEnabledState() {
-        setEnabled(getCurrentDataSet() != null && ! getCurrentDataSet().getSelected().isEmpty());
+    protected void updateEnabledState(Collection<? extends OsmPrimitive> Selection) {
+        setEnabled(Selection != null && !Selection.isEmpty());
     }
 }
Index: src/org/openstreetmap/josm/actions/MoveAction.java
===================================================================
--- src/org/openstreetmap/josm/actions/MoveAction.java	(revision 1826)
+++ src/org/openstreetmap/josm/actions/MoveAction.java	(working copy)
@@ -111,7 +111,7 @@
     }
 
     @Override
-    protected void updateEnabledState() {
-        setEnabled(getCurrentDataSet() != null && ! getCurrentDataSet().getSelected().isEmpty());
+    protected void updateEnabledState(Collection<? extends OsmPrimitive> Selection) {
+        setEnabled(Selection != null && !Selection.isEmpty());
     }
 }
Index: src/org/openstreetmap/josm/actions/DuplicateAction.java
===================================================================
--- src/org/openstreetmap/josm/actions/DuplicateAction.java	(revision 1826)
+++ src/org/openstreetmap/josm/actions/DuplicateAction.java	(working copy)
@@ -6,7 +6,9 @@
 
 import java.awt.event.ActionEvent;
 import java.awt.event.KeyEvent;
+import java.util.Collection;
 
+import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.tools.Shortcut;
 
 public final class DuplicateAction extends JosmAction{
@@ -23,7 +25,7 @@
 
 
     @Override
-    protected void updateEnabledState() {
-        setEnabled(getCurrentDataSet() != null && ! getCurrentDataSet().getSelected().isEmpty());
+    protected void updateEnabledState(Collection<? extends OsmPrimitive> Selection) {
+        setEnabled(Selection != null && !Selection.isEmpty());
     }
 }
Index: src/org/openstreetmap/josm/actions/AlignInCircleAction.java
===================================================================
--- src/org/openstreetmap/josm/actions/AlignInCircleAction.java	(revision 1826)
+++ src/org/openstreetmap/josm/actions/AlignInCircleAction.java	(working copy)
@@ -212,7 +212,7 @@
     }
 
     @Override
-    protected void updateEnabledState() {
-        setEnabled(getCurrentDataSet() != null && !getCurrentDataSet().getSelected().isEmpty());
+    protected void updateEnabledState(Collection<? extends OsmPrimitive> Selection) {
+        setEnabled(Selection != null && !Selection.isEmpty());
     }
 }
Index: src/org/openstreetmap/josm/actions/GpxExportAction.java
===================================================================
--- src/org/openstreetmap/josm/actions/GpxExportAction.java	(revision 1826)
+++ src/org/openstreetmap/josm/actions/GpxExportAction.java	(working copy)
@@ -12,6 +12,7 @@
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.util.Calendar;
+import java.util.Collection;
 
 import javax.swing.JButton;
 import javax.swing.JCheckBox;
@@ -27,6 +28,7 @@
 
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.gpx.GpxData;
+import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.gui.ExtendedDialog;
 import org.openstreetmap.josm.gui.layer.GpxLayer;
 import org.openstreetmap.josm.gui.layer.Layer;
@@ -330,7 +332,7 @@
      * 
      */
     @Override
-    protected void updateEnabledState() {
+    protected void updateEnabledState(Collection<? extends OsmPrimitive> Selection) {
         boolean check = Main.main != null
         && Main.map != null
         && Main.map.mapView !=null
Index: src/org/openstreetmap/josm/actions/PasteTagsAction.java
===================================================================
--- src/org/openstreetmap/josm/actions/PasteTagsAction.java	(revision 1826)
+++ src/org/openstreetmap/josm/actions/PasteTagsAction.java	(working copy)
@@ -122,11 +122,11 @@
     }
 
     @Override
-    protected void updateEnabledState() {
-        if (getCurrentDataSet() == null || Main.pasteBuffer == null) {
+    protected void updateEnabledState(Collection<? extends OsmPrimitive> Selection) {
+        if (getEditLayer() == null || Selection == null || Main.pasteBuffer == null) {
             setEnabled(false);
             return;
         }
-        possiblyEnable(getCurrentDataSet().getSelected(), Main.pasteBuffer);
+        possiblyEnable(Selection, Main.pasteBuffer);
     }
 }
Index: src/org/openstreetmap/josm/actions/AlignInLineAction.java
===================================================================
--- src/org/openstreetmap/josm/actions/AlignInLineAction.java	(revision 1826)
+++ src/org/openstreetmap/josm/actions/AlignInLineAction.java	(working copy)
@@ -128,7 +128,7 @@
     }
 
     @Override
-    protected void updateEnabledState() {
-        setEnabled(getCurrentDataSet() != null && !getCurrentDataSet().getSelected().isEmpty());
+    protected void updateEnabledState(Collection<? extends OsmPrimitive> Selection) {
+        setEnabled(Selection != null && !Selection.isEmpty());
     }
 }
Index: src/org/openstreetmap/josm/actions/AddNodeAction.java
===================================================================
--- src/org/openstreetmap/josm/actions/AddNodeAction.java	(revision 1826)
+++ src/org/openstreetmap/josm/actions/AddNodeAction.java	(working copy)
@@ -6,6 +6,7 @@
 import java.awt.GridBagLayout;
 import java.awt.event.ActionEvent;
 import java.awt.event.KeyEvent;
+import java.util.Collection;
 
 import javax.swing.JLabel;
 import javax.swing.JOptionPane;
@@ -16,6 +17,7 @@
 import org.openstreetmap.josm.command.AddCommand;
 import org.openstreetmap.josm.data.coor.LatLon;
 import org.openstreetmap.josm.data.osm.Node;
+import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.tools.GBC;
 import org.openstreetmap.josm.tools.Shortcut;
 
@@ -73,7 +75,7 @@
     }
 
     @Override
-    protected void updateEnabledState() {
+    protected void updateEnabledState(Collection<? extends OsmPrimitive> Selection) {
         setEnabled(getEditLayer() != null);
     }
 
Index: src/org/openstreetmap/josm/actions/MergeNodesAction.java
===================================================================
--- src/org/openstreetmap/josm/actions/MergeNodesAction.java	(revision 1826)
+++ src/org/openstreetmap/josm/actions/MergeNodesAction.java	(working copy)
@@ -295,17 +295,17 @@
      * Enable the "Merge Nodes" menu option if more then one node is selected
      */
     @Override
-    public void updateEnabledState() {
-        if (getCurrentDataSet() == null || getCurrentDataSet().getSelected().isEmpty()) {
+    public void updateEnabledState(Collection<? extends OsmPrimitive> Selection) {
+        if (Selection == null || Selection.isEmpty()) {
             setEnabled(false);
             return;
         }
         boolean ok = true;
-        if (getCurrentDataSet().getSelected().size() < 2) {
+        if (Selection.size() < 2) {
             setEnabled(false);
             return;
         }
-        for (OsmPrimitive osm : getCurrentDataSet().getSelected()) {
+        for (OsmPrimitive osm : Selection) {
             if (!(osm instanceof Node)) {
                 ok = false;
                 break;
Index: src/org/openstreetmap/josm/actions/CreateCircleAction.java
===================================================================
--- src/org/openstreetmap/josm/actions/CreateCircleAction.java	(revision 1826)
+++ src/org/openstreetmap/josm/actions/CreateCircleAction.java	(working copy)
@@ -269,7 +269,7 @@
     }
 
     @Override
-    protected void updateEnabledState() {
-        setEnabled(getCurrentDataSet() != null && !getCurrentDataSet().getSelected().isEmpty());
+    protected void updateEnabledState(Collection<? extends OsmPrimitive> Selection) {
+        setEnabled(Selection != null && !Selection.isEmpty());
     }
 }
Index: src/org/openstreetmap/josm/actions/search/SearchAction.java
===================================================================
--- src/org/openstreetmap/josm/actions/search/SearchAction.java	(revision 1826)
+++ src/org/openstreetmap/josm/actions/search/SearchAction.java	(working copy)
@@ -236,7 +236,7 @@
      * 
      */
     @Override
-    protected void updateEnabledState() {
+    protected void updateEnabledState(Collection<? extends OsmPrimitive> Selection) {
         setEnabled(getEditLayer() != null);
     }
 }
