Index: /trunk/src/org/openstreetmap/josm/actions/AbstractInfoAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/AbstractInfoAction.java	(revision 10381)
+++ /trunk/src/org/openstreetmap/josm/actions/AbstractInfoAction.java	(revision 10382)
@@ -15,4 +15,5 @@
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.notes.Note;
+import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.gui.HelpAwareOptionPane;
@@ -99,6 +100,7 @@
     protected void launchInfoBrowsersForSelectedPrimitivesAndNote() {
         List<OsmPrimitive> primitivesToShow = new ArrayList<>();
-        if (getCurrentDataSet() != null) {
-            primitivesToShow.addAll(getCurrentDataSet().getAllSelected());
+        DataSet ds = getLayerManager().getEditDataSet();
+        if (ds != null) {
+            primitivesToShow.addAll(ds.getAllSelected());
         }
 
@@ -157,5 +159,6 @@
     @Override
     protected void updateEnabledState() {
-        setEnabled(getCurrentDataSet() != null && !getCurrentDataSet().getSelected().isEmpty());
+        DataSet ds = getLayerManager().getEditDataSet();
+        setEnabled(ds != null && !ds.getSelected().isEmpty());
     }
 
Index: /trunk/src/org/openstreetmap/josm/actions/AddNodeAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/AddNodeAction.java	(revision 10381)
+++ /trunk/src/org/openstreetmap/josm/actions/AddNodeAction.java	(revision 10382)
@@ -65,5 +65,5 @@
         // add the node
         Main.main.undoRedo.add(new AddCommand(nnew));
-        getCurrentDataSet().setSelected(nnew);
+        getLayerManager().getEditDataSet().setSelected(nnew);
         if (Main.map.mapView.getRealBounds().contains(nnew.getCoor())) {
             Main.map.mapView.repaint();
@@ -75,5 +75,5 @@
     @Override
     protected void updateEnabledState() {
-        setEnabled(getEditLayer() != null);
+        setEnabled(getLayerManager().getEditLayer() != null);
     }
 }
Index: /trunk/src/org/openstreetmap/josm/actions/AlignInCircleAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/AlignInCircleAction.java	(revision 10381)
+++ /trunk/src/org/openstreetmap/josm/actions/AlignInCircleAction.java	(revision 10382)
@@ -22,4 +22,5 @@
 import org.openstreetmap.josm.command.SequenceCommand;
 import org.openstreetmap.josm.data.coor.EastNorth;
+import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
@@ -131,5 +132,5 @@
             return;
 
-        Collection<OsmPrimitive> sel = getCurrentDataSet().getSelected();
+        Collection<OsmPrimitive> sel = getLayerManager().getEditDataSet().getSelected();
         List<Node> nodes = new LinkedList<>();
         // fixNodes: All nodes for which the angle relative to center should not be modified
@@ -374,5 +375,6 @@
     @Override
     protected void updateEnabledState() {
-        setEnabled(getCurrentDataSet() != null && !getCurrentDataSet().getSelected().isEmpty());
+        DataSet ds = getLayerManager().getEditDataSet();
+        setEnabled(ds != null && !ds.getSelected().isEmpty());
     }
 
Index: /trunk/src/org/openstreetmap/josm/actions/AlignInLineAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/AlignInLineAction.java	(revision 10381)
+++ /trunk/src/org/openstreetmap/josm/actions/AlignInLineAction.java	(revision 10382)
@@ -22,4 +22,5 @@
 import org.openstreetmap.josm.command.SequenceCommand;
 import org.openstreetmap.josm.data.coor.EastNorth;
+import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
@@ -169,6 +170,7 @@
             return;
 
-        List<Node> selectedNodes = new ArrayList<>(getCurrentDataSet().getSelectedNodes());
-        List<Way> selectedWays = new ArrayList<>(getCurrentDataSet().getSelectedWays());
+        DataSet ds = getLayerManager().getEditDataSet();
+        List<Node> selectedNodes = new ArrayList<>(ds.getSelectedNodes());
+        List<Way> selectedWays = new ArrayList<>(ds.getSelectedWays());
 
         try {
@@ -415,5 +417,6 @@
     @Override
     protected void updateEnabledState() {
-        setEnabled(getCurrentDataSet() != null && !getCurrentDataSet().getSelected().isEmpty());
+        DataSet ds = getLayerManager().getEditDataSet();
+        setEnabled(ds != null && !ds.getSelected().isEmpty());
     }
 
Index: /trunk/src/org/openstreetmap/josm/actions/AutoScaleAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/AutoScaleAction.java	(revision 10381)
+++ /trunk/src/org/openstreetmap/josm/actions/AutoScaleAction.java	(revision 10382)
@@ -279,5 +279,5 @@
         Collection<OsmPrimitive> sel = new HashSet<>();
         if ("selection".equals(mode)) {
-            sel = getCurrentDataSet().getSelected();
+            sel = getLayerManager().getEditDataSet().getSelected();
         } else {
             Conflict<? extends OsmPrimitive> c = Main.map.conflictDialog.getSelectedConflict();
@@ -312,5 +312,5 @@
             lastZoomTime = -1;
         }
-        final DataSet dataset = getCurrentDataSet();
+        final DataSet dataset = getLayerManager().getEditDataSet();
         if (dataset != null) {
             List<DataSource> dataSources = new ArrayList<>(dataset.getDataSources());
@@ -341,7 +341,8 @@
     @Override
     protected void updateEnabledState() {
+        DataSet ds = getLayerManager().getEditDataSet();
         switch (mode) {
         case "selection":
-            setEnabled(getCurrentDataSet() != null && !getCurrentDataSet().getSelected().isEmpty());
+            setEnabled(ds != null && !ds.getSelected().isEmpty());
             break;
         case "layer":
@@ -352,5 +353,5 @@
             break;
         case "download":
-            setEnabled(getCurrentDataSet() != null && !getCurrentDataSet().getDataSources().isEmpty());
+            setEnabled(ds != null && !ds.getDataSources().isEmpty());
             break;
         case "problem":
@@ -364,5 +365,5 @@
             break;
         default:
-            setEnabled(!Main.getLayerManager().getLayers().isEmpty());
+            setEnabled(!getLayerManager().getLayers().isEmpty());
         }
     }
Index: /trunk/src/org/openstreetmap/josm/actions/CombineWayAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/CombineWayAction.java	(revision 10381)
+++ /trunk/src/org/openstreetmap/josm/actions/CombineWayAction.java	(revision 10382)
@@ -28,4 +28,5 @@
 import org.openstreetmap.josm.command.SequenceCommand;
 import org.openstreetmap.josm.corrector.ReverseWayTagCorrector;
+import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
@@ -205,7 +206,8 @@
     @Override
     public void actionPerformed(ActionEvent event) {
-        if (getCurrentDataSet() == null)
+        final DataSet ds = getLayerManager().getEditDataSet();
+        if (ds == null)
             return;
-        Collection<OsmPrimitive> selection = getCurrentDataSet().getSelected();
+        Collection<OsmPrimitive> selection = ds.getSelected();
         Set<Way> selectedWays = OsmPrimitive.getFilteredSet(selection, Way.class);
         if (selectedWays.size() < 2) {
@@ -233,5 +235,5 @@
                 @Override
                 public void run() {
-                    getCurrentDataSet().setSelected(selectedWay);
+                    ds.setSelected(selectedWay);
                 }
             };
@@ -242,10 +244,10 @@
     @Override
     protected void updateEnabledState() {
-        if (getCurrentDataSet() == null) {
+        DataSet ds = getLayerManager().getEditDataSet();
+        if (ds == null) {
             setEnabled(false);
             return;
         }
-        Collection<OsmPrimitive> selection = getCurrentDataSet().getSelected();
-        updateEnabledState(selection);
+        updateEnabledState(ds.getSelected());
     }
 
Index: /trunk/src/org/openstreetmap/josm/actions/CopyAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/CopyAction.java	(revision 10381)
+++ /trunk/src/org/openstreetmap/josm/actions/CopyAction.java	(revision 10382)
@@ -13,4 +13,5 @@
 
 import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
@@ -44,7 +45,7 @@
     public void actionPerformed(ActionEvent e) {
         if (isEmptySelection()) return;
-        Collection<OsmPrimitive> selection = getCurrentDataSet().getSelected();
+        Collection<OsmPrimitive> selection = getLayerManager().getEditDataSet().getSelected();
 
-        copy(getEditLayer(), selection);
+        copy(getLayerManager().getEditLayer(), selection);
     }
 
@@ -74,8 +75,9 @@
     @Override
     protected void updateEnabledState() {
-        if (getCurrentDataSet() == null) {
+        DataSet ds = getLayerManager().getEditDataSet();
+        if (ds == null) {
             setEnabled(false);
         } else {
-            updateEnabledState(getCurrentDataSet().getSelected());
+            updateEnabledState(ds.getSelected());
         }
     }
Index: /trunk/src/org/openstreetmap/josm/actions/CreateCircleAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/CreateCircleAction.java	(revision 10381)
+++ /trunk/src/org/openstreetmap/josm/actions/CreateCircleAction.java	(revision 10382)
@@ -25,4 +25,5 @@
 import org.openstreetmap.josm.data.coor.EastNorth;
 import org.openstreetmap.josm.data.coor.LatLon;
+import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
@@ -136,5 +137,5 @@
         }
 
-        Collection<OsmPrimitive> sel = getCurrentDataSet().getSelected();
+        Collection<OsmPrimitive> sel = getLayerManager().getEditDataSet().getSelected();
         List<Node> nodes = OsmPrimitive.getFilteredList(sel, Node.class);
         List<Way> ways = OsmPrimitive.getFilteredList(sel, Way.class);
@@ -289,8 +290,9 @@
     @Override
     protected void updateEnabledState() {
-        if (getCurrentDataSet() == null) {
+        DataSet ds = getLayerManager().getEditDataSet();
+        if (ds == null) {
             setEnabled(false);
         } else {
-            updateEnabledState(getCurrentDataSet().getSelected());
+            updateEnabledState(ds.getSelected());
         }
     }
Index: /trunk/src/org/openstreetmap/josm/actions/CreateMultipolygonAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/CreateMultipolygonAction.java	(revision 10381)
+++ /trunk/src/org/openstreetmap/josm/actions/CreateMultipolygonAction.java	(revision 10382)
@@ -28,4 +28,5 @@
 import org.openstreetmap.josm.command.Command;
 import org.openstreetmap.josm.command.SequenceCommand;
+import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.MultipolygonBuilder;
 import org.openstreetmap.josm.data.osm.MultipolygonBuilder.JoinedPolygon;
@@ -260,8 +261,9 @@
     @Override
     protected void updateEnabledState() {
-        if (getCurrentDataSet() == null) {
+        DataSet ds = getLayerManager().getEditDataSet();
+        if (ds == null) {
             setEnabled(false);
         } else {
-            updateEnabledState(getCurrentDataSet().getSelected());
+            updateEnabledState(ds.getSelected());
         }
     }
@@ -274,10 +276,11 @@
     @Override
     protected void updateEnabledState(Collection<? extends OsmPrimitive> selection) {
-        if (getCurrentDataSet() == null) {
+        DataSet ds = getLayerManager().getEditDataSet();
+        if (ds == null) {
             setEnabled(false);
         } else if (update) {
             setEnabled(getSelectedMultipolygonRelation() != null);
         } else {
-            setEnabled(!getCurrentDataSet().getSelectedWays().isEmpty());
+            setEnabled(!getLayerManager().getEditDataSet().getSelectedWays().isEmpty());
         }
     }
Index: /trunk/src/org/openstreetmap/josm/actions/DeleteAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/DeleteAction.java	(revision 10381)
+++ /trunk/src/org/openstreetmap/josm/actions/DeleteAction.java	(revision 10382)
@@ -10,4 +10,5 @@
 
 import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.tools.Shortcut;
@@ -37,8 +38,9 @@
     @Override
     protected void updateEnabledState() {
-        if (getCurrentDataSet() == null) {
+        DataSet ds = getLayerManager().getEditDataSet();
+        if (ds == null) {
             setEnabled(false);
         } else {
-            updateEnabledState(getCurrentDataSet().getSelected());
+            updateEnabledState(ds.getSelected());
         }
     }
Index: /trunk/src/org/openstreetmap/josm/actions/DistributeAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/DistributeAction.java	(revision 10381)
+++ /trunk/src/org/openstreetmap/josm/actions/DistributeAction.java	(revision 10382)
@@ -20,4 +20,5 @@
 import org.openstreetmap.josm.command.MoveCommand;
 import org.openstreetmap.josm.command.SequenceCommand;
+import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
@@ -58,5 +59,5 @@
 
         // Collect user selected objects
-        Collection<OsmPrimitive> selected = getCurrentDataSet().getSelected();
+        Collection<OsmPrimitive> selected = getLayerManager().getEditDataSet().getSelected();
         Collection<Way> ways = new LinkedList<>();
         Collection<Node> nodes = new HashSet<>();
@@ -300,8 +301,9 @@
     @Override
     protected void updateEnabledState() {
-        if (getCurrentDataSet() == null) {
+        DataSet ds = getLayerManager().getEditDataSet();
+        if (ds == null) {
             setEnabled(false);
         } else {
-            updateEnabledState(getCurrentDataSet().getSelected());
+            updateEnabledState(ds.getSelected());
         }
     }
Index: /trunk/src/org/openstreetmap/josm/actions/DownloadReferrersAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/DownloadReferrersAction.java	(revision 10381)
+++ /trunk/src/org/openstreetmap/josm/actions/DownloadReferrersAction.java	(revision 10382)
@@ -11,4 +11,5 @@
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.actions.downloadtasks.DownloadReferrersTask;
+import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.gui.layer.OsmDataLayer;
@@ -61,8 +62,9 @@
     @Override
     protected void updateEnabledState() {
-        if (getCurrentDataSet() == null) {
+        DataSet ds = getLayerManager().getEditDataSet();
+        if (ds == null) {
             setEnabled(false);
         } else {
-            updateEnabledState(getCurrentDataSet().getSelected());
+            updateEnabledState(ds.getSelected());
         }
     }
Index: /trunk/src/org/openstreetmap/josm/actions/DuplicateAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/DuplicateAction.java	(revision 10381)
+++ /trunk/src/org/openstreetmap/josm/actions/DuplicateAction.java	(revision 10382)
@@ -11,4 +11,5 @@
 
 import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.PrimitiveDeepCopy;
@@ -29,13 +30,15 @@
     @Override
     public void actionPerformed(ActionEvent e) {
-        Main.main.menu.paste.pasteData(new PrimitiveDeepCopy(getCurrentDataSet().getSelected()), getEditLayer(), e);
+        Main.main.menu.paste.pasteData(
+                new PrimitiveDeepCopy(getLayerManager().getEditDataSet().getSelected()), getLayerManager().getEditLayer(), e);
     }
 
     @Override
     protected void updateEnabledState() {
-        if (getCurrentDataSet() == null) {
+        DataSet ds = getLayerManager().getEditDataSet();
+        if (ds == null) {
             setEnabled(false);
         } else {
-            updateEnabledState(getCurrentDataSet().getSelected());
+            updateEnabledState(ds.getSelected());
         }
     }
Index: /trunk/src/org/openstreetmap/josm/actions/FollowLineAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/FollowLineAction.java	(revision 10381)
+++ /trunk/src/org/openstreetmap/josm/actions/FollowLineAction.java	(revision 10382)
@@ -16,4 +16,5 @@
 import org.openstreetmap.josm.command.SelectCommand;
 import org.openstreetmap.josm.command.SequenceCommand;
+import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
@@ -47,8 +48,9 @@
     @Override
     protected void updateEnabledState() {
-        if (getCurrentDataSet() == null) {
+        DataSet ds = getLayerManager().getEditDataSet();
+        if (ds == null) {
             setEnabled(false);
         } else {
-            updateEnabledState(getCurrentDataSet().getSelected());
+            updateEnabledState(ds.getSelected());
         }
     }
Index: /trunk/src/org/openstreetmap/josm/actions/HistoryInfoAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/HistoryInfoAction.java	(revision 10381)
+++ /trunk/src/org/openstreetmap/josm/actions/HistoryInfoAction.java	(revision 10382)
@@ -37,5 +37,5 @@
     @Override
     public void actionPerformed(ActionEvent ae) {
-        DataSet set = getCurrentDataSet();
+        DataSet set = getLayerManager().getEditDataSet();
         if (set != null && !set.getAllSelected().isEmpty()) {
             HistoryBrowserDialogManager.getInstance().showHistory(set.getAllSelected());
Index: /trunk/src/org/openstreetmap/josm/actions/InfoAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/InfoAction.java	(revision 10381)
+++ /trunk/src/org/openstreetmap/josm/actions/InfoAction.java	(revision 10382)
@@ -35,5 +35,5 @@
     @Override
     public void actionPerformed(ActionEvent ae) {
-        DataSet set = getCurrentDataSet();
+        DataSet set = getLayerManager().getEditDataSet();
         if (set != null) {
             new InspectPrimitiveDialog(set.getAllSelected(), Main.main.getEditLayer()).showDialog();
@@ -43,8 +43,9 @@
     @Override
     public void updateEnabledState() {
-        if (getCurrentDataSet() == null) {
+        DataSet ds = getLayerManager().getEditDataSet();
+        if (ds == null) {
             setEnabled(false);
         } else {
-            updateEnabledState(getCurrentDataSet().getAllSelected());
+            updateEnabledState(ds.getAllSelected());
         }
     }
Index: /trunk/src/org/openstreetmap/josm/actions/JoinAreasAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/JoinAreasAction.java	(revision 10381)
+++ /trunk/src/org/openstreetmap/josm/actions/JoinAreasAction.java	(revision 10382)
@@ -955,5 +955,5 @@
 
         if (chunks.size() > 1) {
-            SplitWayResult split = SplitWayAction.splitWay(getEditLayer(), way, chunks,
+            SplitWayResult split = SplitWayAction.splitWay(getLayerManager().getEditLayer(), way, chunks,
                     Collections.<OsmPrimitive>emptyList(), SplitWayAction.Strategy.keepFirstChunk());
 
@@ -1548,8 +1548,9 @@
     @Override
     protected void updateEnabledState() {
-        if (getCurrentDataSet() == null) {
+        DataSet ds = getLayerManager().getEditDataSet();
+        if (ds == null) {
             setEnabled(false);
         } else {
-            updateEnabledState(getCurrentDataSet().getSelected());
+            updateEnabledState(ds.getSelected());
         }
     }
Index: /trunk/src/org/openstreetmap/josm/actions/JoinNodeWayAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/JoinNodeWayAction.java	(revision 10381)
+++ /trunk/src/org/openstreetmap/josm/actions/JoinNodeWayAction.java	(revision 10382)
@@ -25,4 +25,5 @@
 import org.openstreetmap.josm.command.SequenceCommand;
 import org.openstreetmap.josm.data.coor.EastNorth;
+import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
@@ -83,5 +84,5 @@
         if (!isEnabled())
             return;
-        Collection<Node> selectedNodes = getCurrentDataSet().getSelectedNodes();
+        Collection<Node> selectedNodes = getLayerManager().getEditDataSet().getSelectedNodes();
         Collection<Command> cmds = new LinkedList<>();
         Map<Way, MultiMap<Integer, Node>> data = new HashMap<>();
@@ -89,5 +90,5 @@
         // If the user has selected some ways, only join the node to these.
         boolean restrictToSelectedWays =
-                !getCurrentDataSet().getSelectedWays().isEmpty();
+                !getLayerManager().getEditDataSet().getSelectedWays().isEmpty();
 
         // Planning phase: decide where we'll insert the nodes and put it all in "data"
@@ -208,8 +209,9 @@
     @Override
     protected void updateEnabledState() {
-        if (getCurrentDataSet() == null) {
+        DataSet ds = getLayerManager().getEditDataSet();
+        if (ds == null) {
             setEnabled(false);
         } else {
-            updateEnabledState(getCurrentDataSet().getSelected());
+            updateEnabledState(ds.getSelected());
         }
     }
Index: /trunk/src/org/openstreetmap/josm/actions/MergeNodesAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/MergeNodesAction.java	(revision 10381)
+++ /trunk/src/org/openstreetmap/josm/actions/MergeNodesAction.java	(revision 10382)
@@ -26,4 +26,5 @@
 import org.openstreetmap.josm.data.coor.EastNorth;
 import org.openstreetmap.josm.data.coor.LatLon;
+import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
@@ -68,5 +69,5 @@
         if (!isEnabled())
             return;
-        Collection<OsmPrimitive> selection = getCurrentDataSet().getAllSelected();
+        Collection<OsmPrimitive> selection = getLayerManager().getEditDataSet().getAllSelected();
         List<Node> selectedNodes = OsmPrimitive.getFilteredList(selection, Node.class);
 
@@ -351,8 +352,9 @@
     @Override
     protected void updateEnabledState() {
-        if (getCurrentDataSet() == null) {
+        DataSet ds = getLayerManager().getEditDataSet();
+        if (ds == null) {
             setEnabled(false);
         } else {
-            updateEnabledState(getCurrentDataSet().getAllSelected());
+            updateEnabledState(ds.getAllSelected());
         }
     }
Index: /trunk/src/org/openstreetmap/josm/actions/MergeSelectionAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/MergeSelectionAction.java	(revision 10381)
+++ /trunk/src/org/openstreetmap/josm/actions/MergeSelectionAction.java	(revision 10382)
@@ -10,4 +10,5 @@
 import java.util.List;
 
+import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.visitor.MergeSourceBuildingVisitor;
@@ -41,7 +42,8 @@
      */
     public void mergeSelected() {
-        List<Layer> targetLayers = LayerListDialog.getInstance().getModel().getPossibleMergeTargets(getEditLayer());
+        OsmDataLayer editLayer = getLayerManager().getEditLayer();
+        List<Layer> targetLayers = LayerListDialog.getInstance().getModel().getPossibleMergeTargets(editLayer);
         if (targetLayers.isEmpty()) {
-            warnNoTargetLayersForSourceLayer(getEditLayer());
+            warnNoTargetLayersForSourceLayer(editLayer);
             return;
         }
@@ -49,11 +51,11 @@
         if (targetLayer == null)
             return;
-        if (getEditLayer().isUploadDiscouraged() && targetLayer instanceof OsmDataLayer
+        if (editLayer.isUploadDiscouraged() && targetLayer instanceof OsmDataLayer
                 && !((OsmDataLayer) targetLayer).isUploadDiscouraged()
-                && getEditLayer().data.getAllSelected().size() > 1
+                && editLayer.data.getAllSelected().size() > 1
                 && warnMergingUploadDiscouragedObjects(targetLayer)) {
             return;
         }
-        MergeSourceBuildingVisitor builder = new MergeSourceBuildingVisitor(getEditLayer().data);
+        MergeSourceBuildingVisitor builder = new MergeSourceBuildingVisitor(editLayer.data);
         ((OsmDataLayer) targetLayer).mergeFrom(builder.build());
     }
@@ -61,5 +63,6 @@
     @Override
     public void actionPerformed(ActionEvent e) {
-        if (getEditLayer() == null || getEditLayer().data.getAllSelected().isEmpty())
+        OsmDataLayer editLayer = getLayerManager().getEditLayer();
+        if (editLayer == null || editLayer.data.getAllSelected().isEmpty())
             return;
         mergeSelected();
@@ -68,8 +71,9 @@
     @Override
     protected void updateEnabledState() {
-        if (getCurrentDataSet() == null) {
+        DataSet ds = getLayerManager().getEditDataSet();
+        if (ds == null) {
             setEnabled(false);
         } else {
-            updateEnabledState(getCurrentDataSet().getAllSelected());
+            updateEnabledState(ds.getAllSelected());
         }
     }
Index: /trunk/src/org/openstreetmap/josm/actions/MirrorAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/MirrorAction.java	(revision 10381)
+++ /trunk/src/org/openstreetmap/josm/actions/MirrorAction.java	(revision 10382)
@@ -18,4 +18,5 @@
 import org.openstreetmap.josm.command.MoveCommand;
 import org.openstreetmap.josm.command.SequenceCommand;
+import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
@@ -45,5 +46,5 @@
     @Override
     public void actionPerformed(ActionEvent e) {
-        Collection<OsmPrimitive> sel = getCurrentDataSet().getSelected();
+        Collection<OsmPrimitive> sel = getLayerManager().getEditDataSet().getSelected();
         Set<Node> nodes = new HashSet<>();
 
@@ -86,8 +87,9 @@
     @Override
     protected void updateEnabledState() {
-        if (getCurrentDataSet() == null) {
+        DataSet ds = getLayerManager().getEditDataSet();
+        if (ds == null) {
             setEnabled(false);
         } else {
-            updateEnabledState(getCurrentDataSet().getSelected());
+            updateEnabledState(ds.getSelected());
         }
     }
Index: /trunk/src/org/openstreetmap/josm/actions/MoveAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/MoveAction.java	(revision 10381)
+++ /trunk/src/org/openstreetmap/josm/actions/MoveAction.java	(revision 10382)
@@ -15,4 +15,5 @@
 import org.openstreetmap.josm.command.MoveCommand;
 import org.openstreetmap.josm.data.coor.EastNorth;
+import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
@@ -116,5 +117,6 @@
         }
 
-        Collection<OsmPrimitive> selection = getCurrentDataSet().getSelected();
+        DataSet ds = getLayerManager().getEditDataSet();
+        Collection<OsmPrimitive> selection = ds.getSelected();
         Collection<Node> affectedNodes = AllNodesVisitor.getAllNodes(selection);
 
@@ -122,5 +124,5 @@
         ? Main.main.undoRedo.commands.getLast() : null;
 
-        getCurrentDataSet().beginUpdate();
+        ds.beginUpdate();
         if (c instanceof MoveCommand && affectedNodes.equals(((MoveCommand) c).getParticipatingPrimitives())) {
             ((MoveCommand) c).moveAgain(distx, disty);
@@ -129,5 +131,5 @@
             Main.main.undoRedo.add(c);
         }
-        getCurrentDataSet().endUpdate();
+        ds.endUpdate();
 
         for (Node n : affectedNodes) {
@@ -150,8 +152,9 @@
     @Override
     protected void updateEnabledState() {
-        if (getCurrentDataSet() == null) {
+        DataSet ds = getLayerManager().getEditDataSet();
+        if (ds == null) {
             setEnabled(false);
         } else {
-            updateEnabledState(getCurrentDataSet().getSelected());
+            updateEnabledState(ds.getSelected());
         }
     }
Index: /trunk/src/org/openstreetmap/josm/actions/MoveNodeAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/MoveNodeAction.java	(revision 10381)
+++ /trunk/src/org/openstreetmap/josm/actions/MoveNodeAction.java	(revision 10382)
@@ -11,4 +11,5 @@
 import org.openstreetmap.josm.command.MoveCommand;
 import org.openstreetmap.josm.data.coor.LatLon;
+import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
@@ -33,9 +34,10 @@
     @Override
     public void actionPerformed(ActionEvent e) {
-        if (!isEnabled() || (getCurrentDataSet().getSelectedNodes().size() != 1))
+        Collection<Node> selNodes = getLayerManager().getEditDataSet().getSelectedNodes();
+        if (!isEnabled() || selNodes.size() != 1)
             return;
 
         LatLonDialog dialog = new LatLonDialog(Main.parent, tr("Move Node..."), ht("/Action/MoveNode"));
-        Node n = (Node) getCurrentDataSet().getSelectedNodes().toArray()[0];
+        Node n = (Node) selNodes.toArray()[0];
         dialog.setCoordinates(n.getCoor());
         dialog.showDialog();
@@ -54,8 +56,9 @@
     @Override
     protected void updateEnabledState() {
-        if (getCurrentDataSet() == null) {
+        DataSet ds = getLayerManager().getEditDataSet();
+        if (ds == null) {
             setEnabled(false);
         } else {
-            updateEnabledState(getCurrentDataSet().getSelected());
+            updateEnabledState(ds.getSelected());
         }
     }
Index: /trunk/src/org/openstreetmap/josm/actions/OrthogonalizeAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/OrthogonalizeAction.java	(revision 10381)
+++ /trunk/src/org/openstreetmap/josm/actions/OrthogonalizeAction.java	(revision 10382)
@@ -26,4 +26,5 @@
 import org.openstreetmap.josm.command.SequenceCommand;
 import org.openstreetmap.josm.data.coor.EastNorth;
+import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
@@ -99,5 +100,5 @@
                 return;
             final Collection<Command> commands = new LinkedList<>();
-            final Collection<OsmPrimitive> sel = getCurrentDataSet().getSelected();
+            final Collection<OsmPrimitive> sel = getLayerManager().getEditDataSet().getSelected();
             try {
                 for (OsmPrimitive p : sel) {
@@ -146,5 +147,5 @@
         }
 
-        final Collection<OsmPrimitive> sel = getCurrentDataSet().getSelected();
+        final Collection<OsmPrimitive> sel = getLayerManager().getEditDataSet().getSelected();
 
         try {
@@ -617,5 +618,6 @@
     @Override
     protected void updateEnabledState() {
-        setEnabled(getCurrentDataSet() != null && !getCurrentDataSet().getSelected().isEmpty());
+        DataSet ds = getLayerManager().getEditDataSet();
+        setEnabled(ds != null && !ds.getSelected().isEmpty());
     }
 
Index: /trunk/src/org/openstreetmap/josm/actions/PasteAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/PasteAction.java	(revision 10381)
+++ /trunk/src/org/openstreetmap/josm/actions/PasteAction.java	(revision 10382)
@@ -201,5 +201,5 @@
     @Override
     protected void updateEnabledState() {
-        if (getCurrentDataSet() == null || Main.pasteBuffer == null) {
+        if (getLayerManager().getEditDataSet() == null || Main.pasteBuffer == null) {
             setEnabled(false);
             return;
Index: /trunk/src/org/openstreetmap/josm/actions/PasteTagsAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/PasteTagsAction.java	(revision 10381)
+++ /trunk/src/org/openstreetmap/josm/actions/PasteTagsAction.java	(revision 10382)
@@ -19,4 +19,5 @@
 import org.openstreetmap.josm.command.Command;
 import org.openstreetmap.josm.command.SequenceCommand;
+import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
@@ -253,5 +254,5 @@
     @Override
     public void actionPerformed(ActionEvent e) {
-        Collection<OsmPrimitive> selection = getCurrentDataSet().getSelected();
+        Collection<OsmPrimitive> selection = getLayerManager().getEditDataSet().getSelected();
 
         if (selection.isEmpty())
@@ -330,10 +331,11 @@
     @Override
     protected void updateEnabledState() {
-        if (getCurrentDataSet() == null) {
+        DataSet ds = getLayerManager().getEditDataSet();
+        if (ds == null) {
             setEnabled(false);
             return;
         }
         // buffer listening slows down the program and is not very good for arbitrary text in buffer
-        setEnabled(!getCurrentDataSet().getSelected().isEmpty());
+        setEnabled(!ds.getSelected().isEmpty());
     }
 
Index: /trunk/src/org/openstreetmap/josm/actions/PurgeAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/PurgeAction.java	(revision 10381)
+++ /trunk/src/org/openstreetmap/josm/actions/PurgeAction.java	(revision 10382)
@@ -33,4 +33,5 @@
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.command.PurgeCommand;
+import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
@@ -94,5 +95,5 @@
             return;
 
-        Collection<OsmPrimitive> sel = getCurrentDataSet().getAllSelected();
+        Collection<OsmPrimitive> sel = getLayerManager().getEditDataSet().getAllSelected();
         layer = Main.main.getEditLayer();
 
@@ -221,5 +222,5 @@
         if (clearUndoRedo) {
             Main.main.undoRedo.clean();
-            getCurrentDataSet().clearSelectionHistory();
+            getLayerManager().getEditDataSet().clearSelectionHistory();
         }
     }
@@ -303,8 +304,9 @@
     @Override
     protected void updateEnabledState() {
-        if (getCurrentDataSet() == null) {
+        DataSet ds = getLayerManager().getEditDataSet();
+        if (ds == null) {
             setEnabled(false);
         } else {
-            setEnabled(!(getCurrentDataSet().selectionEmpty()));
+            setEnabled(!ds.selectionEmpty());
         }
     }
Index: /trunk/src/org/openstreetmap/josm/actions/ReverseWayAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/ReverseWayAction.java	(revision 10381)
+++ /trunk/src/org/openstreetmap/josm/actions/ReverseWayAction.java	(revision 10382)
@@ -21,4 +21,5 @@
 import org.openstreetmap.josm.corrector.ReverseWayNoTagCorrector;
 import org.openstreetmap.josm.corrector.ReverseWayTagCorrector;
+import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
@@ -74,10 +75,9 @@
     @Override
     public void actionPerformed(ActionEvent e) {
-        if (!isEnabled())
-            return;
-        if (getCurrentDataSet() == null)
+        DataSet ds = getLayerManager().getEditDataSet();
+        if (!isEnabled() || ds == null)
             return;
 
-        final Collection<Way> sel = getCurrentDataSet().getSelectedWays();
+        final Collection<Way> sel = ds.getSelectedWays();
         if (sel.isEmpty()) {
             new Notification(
@@ -103,5 +103,5 @@
         Main.main.undoRedo.add(new SequenceCommand(tr("Reverse ways"), c));
         if (propertiesUpdated) {
-            getCurrentDataSet().fireSelectionChanged();
+            ds.fireSelectionChanged();
         }
         Main.map.repaint();
@@ -129,8 +129,9 @@
     @Override
     protected void updateEnabledState() {
-        if (getCurrentDataSet() == null) {
+        DataSet ds = getLayerManager().getEditDataSet();
+        if (ds == null) {
             setEnabled(false);
         } else {
-            updateEnabledState(getCurrentDataSet().getSelected());
+            updateEnabledState(ds.getSelected());
         }
     }
Index: /trunk/src/org/openstreetmap/josm/actions/SelectAllAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/SelectAllAction.java	(revision 10381)
+++ /trunk/src/org/openstreetmap/josm/actions/SelectAllAction.java	(revision 10382)
@@ -8,4 +8,5 @@
 import java.awt.event.KeyEvent;
 
+import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.tools.Shortcut;
 
@@ -25,5 +26,6 @@
         if (!isEnabled())
             return;
-        getCurrentDataSet().setSelected(getCurrentDataSet().allNonDeletedCompletePrimitives());
+        DataSet ds = getLayerManager().getEditDataSet();
+        ds.setSelected(ds.allNonDeletedCompletePrimitives());
     }
 
@@ -34,5 +36,5 @@
     @Override
     protected void updateEnabledState() {
-        setEnabled(getEditLayer() != null);
+        setEnabled(getLayerManager().getEditLayer() != null);
     }
 }
Index: /trunk/src/org/openstreetmap/josm/actions/SimplifyWayAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/SimplifyWayAction.java	(revision 10381)
+++ /trunk/src/org/openstreetmap/josm/actions/SimplifyWayAction.java	(revision 10382)
@@ -94,5 +94,5 @@
     @Override
     public void actionPerformed(ActionEvent e) {
-        DataSet ds = getCurrentDataSet();
+        DataSet ds = getLayerManager().getEditDataSet();
         ds.beginUpdate();
         try {
@@ -276,8 +276,9 @@
     @Override
     protected void updateEnabledState() {
-        if (getCurrentDataSet() == null) {
+        DataSet ds = getLayerManager().getEditDataSet();
+        if (ds == null) {
             setEnabled(false);
         } else {
-            updateEnabledState(getCurrentDataSet().getSelected());
+            updateEnabledState(ds.getSelected());
         }
     }
Index: /trunk/src/org/openstreetmap/josm/actions/SplitWayAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/SplitWayAction.java	(revision 10381)
+++ /trunk/src/org/openstreetmap/josm/actions/SplitWayAction.java	(revision 10382)
@@ -35,4 +35,5 @@
 import org.openstreetmap.josm.command.Command;
 import org.openstreetmap.josm.command.SequenceCommand;
+import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
@@ -139,5 +140,5 @@
         }
 
-        Collection<OsmPrimitive> selection = getCurrentDataSet().getSelected();
+        Collection<OsmPrimitive> selection = getLayerManager().getEditDataSet().getSelected();
 
         List<Node> selectedNodes = OsmPrimitive.getFilteredList(selection, Node.class);
@@ -214,7 +215,7 @@
             }
             if (wayToKeep != null) {
-                final SplitWayResult result = doSplitWay(getEditLayer(), selectedWay, wayToKeep, newWays, sel);
+                final SplitWayResult result = doSplitWay(getLayerManager().getEditLayer(), selectedWay, wayToKeep, newWays, sel);
                 Main.main.undoRedo.add(result.getCommand());
-                getCurrentDataSet().setSelected(result.getNewSelection());
+                getLayerManager().getEditDataSet().setSelected(result.getNewSelection());
             }
         }
@@ -751,8 +752,9 @@
     @Override
     protected void updateEnabledState() {
-        if (getCurrentDataSet() == null) {
+        DataSet ds = getLayerManager().getEditDataSet();
+        if (ds == null) {
             setEnabled(false);
         } else {
-            updateEnabledState(getCurrentDataSet().getSelected());
+            updateEnabledState(ds.getSelected());
         }
     }
Index: /trunk/src/org/openstreetmap/josm/actions/UnGlueAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/UnGlueAction.java	(revision 10381)
+++ /trunk/src/org/openstreetmap/josm/actions/UnGlueAction.java	(revision 10382)
@@ -32,4 +32,5 @@
 import org.openstreetmap.josm.command.Command;
 import org.openstreetmap.josm.command.SequenceCommand;
+import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
@@ -90,5 +91,5 @@
     protected void unglue(ActionEvent e) throws UserCancelException {
 
-        Collection<OsmPrimitive> selection = getCurrentDataSet().getSelected();
+        Collection<OsmPrimitive> selection = getLayerManager().getEditDataSet().getSelected();
 
         String errMsg = null;
@@ -323,5 +324,5 @@
 
         Main.main.undoRedo.add(new SequenceCommand(tr("Unglued Node"), cmds));
-        getCurrentDataSet().setSelected(n);
+        getLayerManager().getEditDataSet().setSelected(n);
         Main.map.mapView.repaint();
     }
@@ -652,13 +653,14 @@
                 trn("Dupe {0} node into {1} nodes", "Dupe {0} nodes into {1} nodes",
                         selectedNodes.size(), selectedNodes.size(), selectedNodes.size()+allNewNodes.size()), cmds));
-        getCurrentDataSet().setSelected(allNewNodes);
+        getLayerManager().getEditDataSet().setSelected(allNewNodes);
     }
 
     @Override
     protected void updateEnabledState() {
-        if (getCurrentDataSet() == null) {
+        DataSet ds = getLayerManager().getEditDataSet();
+        if (ds == null) {
             setEnabled(false);
         } else {
-            updateEnabledState(getCurrentDataSet().getSelected());
+            updateEnabledState(ds.getSelected());
         }
     }
Index: /trunk/src/org/openstreetmap/josm/actions/UnJoinNodeWayAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/UnJoinNodeWayAction.java	(revision 10381)
+++ /trunk/src/org/openstreetmap/josm/actions/UnJoinNodeWayAction.java	(revision 10382)
@@ -18,4 +18,5 @@
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.command.RemoveNodesCommand;
+import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
@@ -47,5 +48,5 @@
     public void actionPerformed(ActionEvent e) {
 
-        Collection<OsmPrimitive> selection = getCurrentDataSet().getSelected();
+        Collection<OsmPrimitive> selection = getLayerManager().getEditDataSet().getSelected();
 
         List<Node> selectedNodes = OsmPrimitive.getFilteredList(selection, Node.class);
@@ -186,8 +187,9 @@
     @Override
     protected void updateEnabledState() {
-        if (getCurrentDataSet() == null) {
+        DataSet ds = getLayerManager().getEditDataSet();
+        if (ds == null) {
             setEnabled(false);
         } else {
-            updateEnabledState(getCurrentDataSet().getSelected());
+            updateEnabledState(ds.getSelected());
         }
     }
Index: /trunk/src/org/openstreetmap/josm/actions/UnselectAllAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/UnselectAllAction.java	(revision 10381)
+++ /trunk/src/org/openstreetmap/josm/actions/UnselectAllAction.java	(revision 10382)
@@ -27,5 +27,5 @@
         if (!isEnabled())
             return;
-        getCurrentDataSet().setSelected();
+        getLayerManager().getEditDataSet().setSelected();
     }
 
@@ -35,5 +35,5 @@
     @Override
     protected void updateEnabledState() {
-        setEnabled(getEditLayer() != null);
+        setEnabled(getLayerManager().getEditLayer() != null);
     }
 }
Index: /trunk/src/org/openstreetmap/josm/actions/UpdateDataAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/UpdateDataAction.java	(revision 10381)
+++ /trunk/src/org/openstreetmap/josm/actions/UpdateDataAction.java	(revision 10382)
@@ -15,4 +15,5 @@
 import org.openstreetmap.josm.actions.downloadtasks.DownloadTaskList;
 import org.openstreetmap.josm.data.DataSource;
+import org.openstreetmap.josm.gui.layer.OsmDataLayer;
 import org.openstreetmap.josm.gui.progress.PleaseWaitProgressMonitor;
 import org.openstreetmap.josm.io.OnlineResource;
@@ -40,16 +41,15 @@
     @Override
     protected void updateEnabledState() {
-        setEnabled(getEditLayer() != null && !Main.isOffline(OnlineResource.OSM_API));
+        setEnabled(getLayerManager().getEditLayer() != null && !Main.isOffline(OnlineResource.OSM_API));
     }
 
     @Override
     public void actionPerformed(ActionEvent e) {
-        if (!isEnabled())
-            return;
-        if (getEditLayer() == null)
+        OsmDataLayer editLayer = getLayerManager().getEditLayer();
+        if (!isEnabled() || editLayer == null)
             return;
 
         List<Area> areas = new ArrayList<>();
-        for (DataSource ds : getEditLayer().data.dataSources) {
+        for (DataSource ds : editLayer.data.dataSources) {
             areas.add(new Area(ds.bounds.asRect()));
         }
@@ -57,6 +57,5 @@
         // The next two blocks removes every intersection from every DataSource Area
         // This prevents downloading the same data numerous times at intersections
-        // and also skips smaller bounding boxes that are contained within larger ones
-        // entirely.
+        // and also skips smaller bounding boxes that are contained within larger ones entirely.
         for (int i = 0; i < areas.size(); i++) {
             for (int j = i+1; j < areas.size(); j++) {
@@ -80,11 +79,8 @@
 
         if (areasToDownload.isEmpty()) {
-            // no bounds defined in the dataset? we update all primitives in the data set
-            // using a series of multi fetch requests
-            //
-            UpdateSelectionAction.updatePrimitives(getEditLayer().data.allPrimitives());
+            // no bounds defined in the dataset? we update all primitives in the data set using a series of multi fetch requests
+            UpdateSelectionAction.updatePrimitives(editLayer.data.allPrimitives());
         } else {
             // bounds defined? => use the bbox downloader
-            //
             final PleaseWaitProgressMonitor monitor = new PleaseWaitProgressMonitor(tr("Download data"));
             final Future<?> future = new DownloadTaskList().download(false /* no new layer */, areasToDownload, true, false, monitor);
Index: /trunk/src/org/openstreetmap/josm/actions/UpdateModifiedAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/UpdateModifiedAction.java	(revision 10381)
+++ /trunk/src/org/openstreetmap/josm/actions/UpdateModifiedAction.java	(revision 10382)
@@ -10,4 +10,5 @@
 
 import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.io.OnlineResource;
@@ -45,5 +46,5 @@
     @Override
     protected void updateEnabledState() {
-        setEnabled(getCurrentDataSet() != null && !Main.isOffline(OnlineResource.OSM_API));
+        setEnabled(getLayerManager().getEditDataSet() != null && !Main.isOffline(OnlineResource.OSM_API));
     }
 
@@ -55,6 +56,6 @@
     @Override
     public Collection<OsmPrimitive> getData() {
-        if (getCurrentDataSet() == null) return Collections.emptyList();
-        return getCurrentDataSet().allModifiedPrimitives();
+        DataSet ds = getLayerManager().getEditDataSet();
+        return ds == null ? Collections.<OsmPrimitive>emptyList() : ds.allModifiedPrimitives();
     }
 }
Index: /trunk/src/org/openstreetmap/josm/actions/UpdateSelectionAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/UpdateSelectionAction.java	(revision 10381)
+++ /trunk/src/org/openstreetmap/josm/actions/UpdateSelectionAction.java	(revision 10382)
@@ -114,8 +114,9 @@
     @Override
     protected void updateEnabledState() {
-        if (getCurrentDataSet() == null) {
+        DataSet ds = getLayerManager().getEditDataSet();
+        if (ds == null) {
             setEnabled(false);
         } else {
-            updateEnabledState(getCurrentDataSet().getAllSelected());
+            updateEnabledState(ds.getAllSelected());
         }
     }
@@ -148,5 +149,5 @@
      */
     public Collection<OsmPrimitive> getData() {
-        return getCurrentDataSet().getAllSelected();
+        return getLayerManager().getEditDataSet().getAllSelected();
     }
 }
Index: /trunk/src/org/openstreetmap/josm/actions/UploadAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/UploadAction.java	(revision 10381)
+++ /trunk/src/org/openstreetmap/josm/actions/UploadAction.java	(revision 10382)
@@ -126,4 +126,7 @@
     }
 
+    /**
+     * Constructs a new {@code UploadAction}.
+     */
     public UploadAction() {
         super(tr("Upload data"), "upload", tr("Upload all changes in the active data layer to the OSM server"),
@@ -138,5 +141,5 @@
     @Override
     protected void updateEnabledState() {
-        setEnabled(getEditLayer() != null);
+        setEnabled(getLayerManager().getEditLayer() != null);
     }
 
Index: /trunk/src/org/openstreetmap/josm/actions/UploadSelectionAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/UploadSelectionAction.java	(revision 10381)
+++ /trunk/src/org/openstreetmap/josm/actions/UploadSelectionAction.java	(revision 10382)
@@ -58,8 +58,9 @@
     @Override
     protected void updateEnabledState() {
-        if (getCurrentDataSet() == null) {
+        DataSet ds = getLayerManager().getEditDataSet();
+        if (ds == null) {
             setEnabled(false);
         } else {
-            updateEnabledState(getCurrentDataSet().getAllSelected());
+            updateEnabledState(ds.getAllSelected());
         }
     }
@@ -94,13 +95,14 @@
     @Override
     public void actionPerformed(ActionEvent e) {
+        OsmDataLayer editLayer = getLayerManager().getEditLayer();
         if (!isEnabled())
             return;
-        if (getEditLayer().isUploadDiscouraged()) {
-            if (UploadAction.warnUploadDiscouraged(getEditLayer())) {
+        if (editLayer.isUploadDiscouraged()) {
+            if (UploadAction.warnUploadDiscouraged(editLayer)) {
                 return;
             }
         }
-        Collection<OsmPrimitive> modifiedCandidates = getModifiedPrimitives(getEditLayer().data.getAllSelected());
-        Collection<OsmPrimitive> deletedCandidates = getDeletedPrimitives(getEditLayer().data);
+        Collection<OsmPrimitive> modifiedCandidates = getModifiedPrimitives(editLayer.data.getAllSelected());
+        Collection<OsmPrimitive> deletedCandidates = getDeletedPrimitives(editLayer.data);
         if (modifiedCandidates.isEmpty() && deletedCandidates.isEmpty()) {
             JOptionPane.showMessageDialog(
@@ -130,5 +132,5 @@
             return;
         }
-        uploadPrimitives(getEditLayer(), toUpload);
+        uploadPrimitives(editLayer, toUpload);
     }
 
Index: /trunk/src/org/openstreetmap/josm/actions/ValidateAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/ValidateAction.java	(revision 10381)
+++ /trunk/src/org/openstreetmap/josm/actions/ValidateAction.java	(revision 10382)
@@ -96,5 +96,5 @@
     @Override
     public void updateEnabledState() {
-        setEnabled(getEditLayer() != null);
+        setEnabled(getLayerManager().getEditLayer() != null);
     }
 
Index: /trunk/src/org/openstreetmap/josm/actions/mapmode/DeleteAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/mapmode/DeleteAction.java	(revision 10381)
+++ /trunk/src/org/openstreetmap/josm/actions/mapmode/DeleteAction.java	(revision 10382)
@@ -211,5 +211,5 @@
     private void repaintIfRequired(Set<OsmPrimitive> newHighlights, WaySegment newHighlightedWaySegment) {
         boolean needsRepaint = false;
-        DataSet ds = getCurrentDataSet();
+        DataSet ds = getLayerManager().getEditDataSet();
 
         if (newHighlightedWaySegment == null && oldHighlightedWaySegment != null) {
@@ -294,5 +294,5 @@
         }
 
-        getCurrentDataSet().setSelected();
+        getLayerManager().getEditDataSet().setSelected();
         giveUserFeedback(e);
     }
@@ -390,17 +390,18 @@
     private Command buildDeleteCommands(MouseEvent e, int modifiers, boolean silent) {
         DeleteParameters parameters = getDeleteParameters(e, modifiers);
+        OsmDataLayer editLayer = getLayerManager().getEditLayer();
         switch (parameters.mode) {
         case node:
-            return DeleteCommand.delete(getEditLayer(), Collections.singleton(parameters.nearestNode), false, silent);
+            return DeleteCommand.delete(editLayer, Collections.singleton(parameters.nearestNode), false, silent);
         case node_with_references:
-            return DeleteCommand.deleteWithReferences(getEditLayer(), Collections.singleton(parameters.nearestNode), silent);
+            return DeleteCommand.deleteWithReferences(editLayer, Collections.singleton(parameters.nearestNode), silent);
         case segment:
-            return DeleteCommand.deleteWaySegment(getEditLayer(), parameters.nearestSegment);
+            return DeleteCommand.deleteWaySegment(editLayer, parameters.nearestSegment);
         case way:
-            return DeleteCommand.delete(getEditLayer(), Collections.singleton(parameters.nearestSegment.way), false, silent);
+            return DeleteCommand.delete(editLayer, Collections.singleton(parameters.nearestSegment.way), false, silent);
         case way_with_nodes:
-            return DeleteCommand.delete(getEditLayer(), Collections.singleton(parameters.nearestSegment.way), true, silent);
+            return DeleteCommand.delete(editLayer, Collections.singleton(parameters.nearestSegment.way), true, silent);
         case way_with_references:
-            return DeleteCommand.deleteWithReferences(getEditLayer(), Collections.singleton(parameters.nearestSegment.way), true);
+            return DeleteCommand.deleteWithReferences(editLayer, Collections.singleton(parameters.nearestSegment.way), true);
         default:
             return null;
Index: /trunk/src/org/openstreetmap/josm/actions/mapmode/DrawAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/mapmode/DrawAction.java	(revision 10381)
+++ /trunk/src/org/openstreetmap/josm/actions/mapmode/DrawAction.java	(revision 10382)
@@ -185,5 +185,5 @@
 
         // update selection to reflect which way being modified
-        DataSet currentDataSet = getCurrentDataSet();
+        DataSet currentDataSet = getLayerManager().getEditDataSet();
         if (getCurrentBaseNode() != null && currentDataSet != null && !currentDataSet.getSelected().isEmpty()) {
             Way continueFrom = getWayForNode(getCurrentBaseNode());
@@ -219,5 +219,5 @@
         // determine if selection is suitable to continue drawing. If it
         // isn't, set wayIsFinished to true to avoid superfluous repaints.
-        determineCurrentBaseNodeAndPreviousNode(getCurrentDataSet().getSelected());
+        determineCurrentBaseNodeAndPreviousNode(getLayerManager().getEditDataSet().getSelected());
         wayIsFinished = getCurrentBaseNode() == null;
 
@@ -272,5 +272,5 @@
         // primitives
         //
-        DataSet ds = getCurrentDataSet();
+        DataSet ds = getLayerManager().getEditDataSet();
         if (ds != null) {
             ds.fireSelectionChanged();
@@ -324,5 +324,5 @@
 
     private void tryAgain(MouseEvent e) {
-        getCurrentDataSet().setSelected();
+        getLayerManager().getEditDataSet().setSelected();
         mouseReleased(e);
     }
@@ -394,5 +394,5 @@
         mousePos = e.getPoint();
 
-        DataSet ds = getCurrentDataSet();
+        DataSet ds = getLayerManager().getEditDataSet();
         Collection<OsmPrimitive> selection = new ArrayList<>(ds.getSelected());
 
@@ -400,5 +400,5 @@
         Node n = Main.map.mapView.getNearestNode(mousePos, OsmPrimitive.isSelectablePredicate);
         if (ctrl) {
-            Iterator<Way> it = getCurrentDataSet().getSelectedWays().iterator();
+            Iterator<Way> it = ds.getSelectedWays().iterator();
             if (it.hasNext()) {
                 // ctrl-click on node of selected way = reuse node despite of ctrl
@@ -416,9 +416,9 @@
                 // have to switch modes)
 
-                getCurrentDataSet().setSelected(n);
+                ds.setSelected(n);
                 // If we extend/continue an existing way, select it already now to make it obvious
                 Way continueFrom = getWayForNode(n);
                 if (continueFrom != null) {
-                    getCurrentDataSet().addSelected(continueFrom);
+                    ds.addSelected(continueFrom);
                 }
 
@@ -615,5 +615,5 @@
         }
 
-        getCurrentDataSet().setSelected(newSelection);
+        ds.setSelected(newSelection);
 
         // "viewport following" mode for tracing long features
@@ -695,5 +695,5 @@
                   (posn0 < selectedWay.getNodesCount()-1) && targetNode.equals(selectedWay.getNode(posn0+1))) {  // next node
                   // CHECKSTYLE.ON: SingleSpaceSeparator
-                getCurrentDataSet().setSelected(targetNode);
+                getLayerManager().getEditDataSet().setSelected(targetNode);
                 lastUsedNode = targetNode;
                 return true;
@@ -779,5 +779,5 @@
         }
 
-        Collection<OsmPrimitive> selection = getCurrentDataSet().getSelected();
+        Collection<OsmPrimitive> selection = getLayerManager().getEditDataSet().getSelected();
 
         MapView mv = Main.map.mapView;
@@ -1085,5 +1085,5 @@
 
         // This happens when nothing is selected, but we still want to highlight the "target node"
-        if (mouseOnExistingNode == null && getCurrentDataSet().getSelected().isEmpty()
+        if (mouseOnExistingNode == null && getLayerManager().getEditDataSet().getSelected().isEmpty()
                 && mousePos != null) {
             mouseOnExistingNode = Main.map.mapView.getNearestNode(mousePos, OsmPrimitive.isSelectablePredicate);
@@ -1209,8 +1209,9 @@
 
         Node n = mouseOnExistingNode;
+        DataSet ds = getLayerManager().getEditDataSet();
         /*
          * Handle special case: Highlighted node == selected node => finish drawing
          */
-        if (n != null && getCurrentDataSet() != null && getCurrentDataSet().getSelectedNodes().contains(n)) {
+        if (n != null && ds != null && ds.getSelectedNodes().contains(n)) {
             if (wayIsFinished) {
                 rv = new StringBuilder(tr("Select node under cursor."));
@@ -1223,6 +1224,6 @@
          * Handle special case: Self-Overlapping or closing way
          */
-        if (getCurrentDataSet() != null && !getCurrentDataSet().getSelectedWays().isEmpty() && !wayIsFinished && !alt) {
-            Way w = getCurrentDataSet().getSelectedWays().iterator().next();
+        if (ds != null && !ds.getSelectedWays().isEmpty() && !wayIsFinished && !alt) {
+            Way w = ds.getSelectedWays().iterator().next();
             for (Node m : w.getNodes()) {
                 if (m.equals(mouseOnExistingNode) || mouseOnExistingWays.contains(w)) {
@@ -1246,5 +1247,5 @@
      */
     public Collection<OsmPrimitive> getInProgressSelection() {
-        DataSet ds = getCurrentDataSet();
+        DataSet ds = getLayerManager().getEditDataSet();
         if (ds == null) return null;
         if (getCurrentBaseNode() != null && !ds.getSelected().isEmpty()) {
@@ -1263,5 +1264,5 @@
     @Override
     protected void updateEnabledState() {
-        setEnabled(getEditLayer() != null);
+        setEnabled(getLayerManager().getEditLayer() != null);
     }
 
@@ -1295,5 +1296,5 @@
             // select last added node - maybe we will continue drawing from it
             if (n != null) {
-                getCurrentDataSet().addSelected(n);
+                getLayerManager().getEditDataSet().addSelected(n);
             }
         }
@@ -1635,5 +1636,5 @@
             projectionSource = null;
             if (snapToProjections) {
-                DataSet ds = getCurrentDataSet();
+                DataSet ds = getLayerManager().getEditDataSet();
                 Collection<Way> selectedWays = ds.getSelectedWays();
                 if (selectedWays.size() == 1) {
Index: /trunk/src/org/openstreetmap/josm/actions/mapmode/ExtrudeAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/mapmode/ExtrudeAction.java	(revision 10381)
+++ /trunk/src/org/openstreetmap/josm/actions/mapmode/ExtrudeAction.java	(revision 10382)
@@ -427,9 +427,9 @@
                 mode = Mode.create_new;
                 // create a new segment and then select and extrude the new segment
-                getCurrentDataSet().setSelected(selectedSegment.way);
+                getLayerManager().getEditDataSet().setSelected(selectedSegment.way);
                 alwaysCreateNodes = true;
             } else {
                 mode = Mode.extrude;
-                getCurrentDataSet().setSelected(selectedSegment.way);
+                getLayerManager().getEditDataSet().setSelected(selectedSegment.way);
                 alwaysCreateNodes = shift;
             }
@@ -611,5 +611,5 @@
         Command c = new SequenceCommand(tr("Extrude Way"), cmds);
         Main.main.undoRedo.add(c);
-        getCurrentDataSet().setSelected(wnew);
+        getLayerManager().getEditDataSet().setSelected(wnew);
     }
 
Index: /trunk/src/org/openstreetmap/josm/actions/mapmode/ImproveWayAccuracyAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/mapmode/ImproveWayAccuracyAction.java	(revision 10381)
+++ /trunk/src/org/openstreetmap/josm/actions/mapmode/ImproveWayAccuracyAction.java	(revision 10382)
@@ -135,5 +135,5 @@
         oldModeHelpText = "";
 
-        if (getCurrentDataSet() == null) {
+        if (getLayerManager().getEditDataSet() == null) {
             return;
         }
@@ -211,5 +211,5 @@
     @Override
     protected void updateEnabledState() {
-        setEnabled(getEditLayer() != null);
+        setEnabled(getLayerManager().getEditLayer() != null);
     }
 
@@ -410,5 +410,5 @@
         if (state == State.selecting) {
             if (targetWay != null) {
-                getCurrentDataSet().setSelected(targetWay.getPrimitiveId());
+                getLayerManager().getEditDataSet().setSelected(targetWay.getPrimitiveId());
                 updateStateByCurrentSelection();
             }
@@ -501,5 +501,5 @@
                     List<Node> nodeList = new ArrayList<>();
                     nodeList.add(candidateNode);
-                    Command deleteCmd = DeleteCommand.delete(getEditLayer(), nodeList, true);
+                    Command deleteCmd = DeleteCommand.delete(getLayerManager().getEditLayer(), nodeList, true);
                     if (deleteCmd != null) {
                         Main.main.undoRedo.add(deleteCmd);
@@ -513,6 +513,5 @@
                 EastNorth cursorEN = mv.getEastNorth(mousePos.x, mousePos.y);
 
-                Main.main.undoRedo.add(new MoveCommand(candidateNode, cursorEN.east() - nodeEN.east(), cursorEN.north()
-                        - nodeEN.north()));
+                Main.main.undoRedo.add(new MoveCommand(candidateNode, cursorEN.east() - nodeEN.east(), cursorEN.north() - nodeEN.north()));
             }
         }
@@ -619,10 +618,11 @@
         state = State.improving;
 
-        Collection<OsmPrimitive> currentSelection = getCurrentDataSet().getSelected();
+        DataSet ds = getLayerManager().getEditDataSet();
+        Collection<OsmPrimitive> currentSelection = ds.getSelected();
         if (currentSelection.size() != 1
                 || !currentSelection.iterator().next().equals(targetWay)) {
             selectionChangedBlocked = true;
-            getCurrentDataSet().clearSelection();
-            getCurrentDataSet().setSelected(targetWay.getPrimitiveId());
+            ds.clearSelection();
+            ds.setSelected(targetWay.getPrimitiveId());
             selectionChangedBlocked = false;
         }
@@ -645,5 +645,5 @@
         final List<Node> nodeList = new ArrayList<>();
         final List<Way> wayList = new ArrayList<>();
-        final Collection<OsmPrimitive> sel = getCurrentDataSet().getSelected();
+        final Collection<OsmPrimitive> sel = getLayerManager().getEditDataSet().getSelected();
 
         // Collecting nodes and ways from the selection
Index: /trunk/src/org/openstreetmap/josm/actions/mapmode/ParallelWayAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/mapmode/ParallelWayAction.java	(revision 10381)
+++ /trunk/src/org/openstreetmap/josm/actions/mapmode/ParallelWayAction.java	(revision 10382)
@@ -160,5 +160,5 @@
         //// Needed to update the mouse cursor if modifiers are changed when the mouse is motionless
         Main.map.keyDetector.addModifierListener(this);
-        sourceWays = new LinkedHashSet<>(getCurrentDataSet().getSelectedWays());
+        sourceWays = new LinkedHashSet<>(getLayerManager().getEditDataSet().getSelectedWays());
         for (Way w : sourceWays) {
             w.setHighlighted(true);
@@ -302,5 +302,5 @@
         // Since the created way is left selected, we need to unselect again here
         if (pWays != null && pWays.getWays() != null) {
-            getCurrentDataSet().clearSelection(pWays.getWays());
+            getLayerManager().getEditDataSet().clearSelection(pWays.getWays());
             pWays = null;
         }
@@ -490,8 +490,8 @@
     }
 
-    //// We keep the source ways and the selection in sync so the user can see the source way's tags
+    // We keep the source ways and the selection in sync so the user can see the source way's tags
     private void addSourceWay(Way w) {
         assert sourceWays != null;
-        getCurrentDataSet().addSelected(w);
+        getLayerManager().getEditDataSet().addSelected(w);
         w.setHighlighted(true);
         sourceWays.add(w);
@@ -500,5 +500,5 @@
     private void removeSourceWay(Way w) {
         assert sourceWays != null;
-        getCurrentDataSet().clearSelection(w);
+        getLayerManager().getEditDataSet().clearSelection(w);
         w.setHighlighted(false);
         sourceWays.remove(w);
@@ -507,5 +507,5 @@
     private void clearSourceWays() {
         assert sourceWays != null;
-        getCurrentDataSet().clearSelection(sourceWays);
+        getLayerManager().getEditDataSet().clearSelection(sourceWays);
         for (Way w : sourceWays) {
             w.setHighlighted(false);
@@ -543,5 +543,5 @@
             pWays = new ParallelWays(sourceWays, copyTags, referenceWayIndex);
             pWays.commit();
-            getCurrentDataSet().setSelected(pWays.getWays());
+            getLayerManager().getEditDataSet().setSelected(pWays.getWays());
             return true;
         } catch (IllegalArgumentException e) {
Index: /trunk/src/org/openstreetmap/josm/actions/mapmode/SelectAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/mapmode/SelectAction.java	(revision 10381)
+++ /trunk/src/org/openstreetmap/josm/actions/mapmode/SelectAction.java	(revision 10382)
@@ -256,5 +256,5 @@
         if (mode == Mode.MOVE) {
             if (!dragInProgress() && virtualManager.activateVirtualNodeNearPoint(e.getPoint())) {
-                DataSet ds = getCurrentDataSet();
+                DataSet ds = getLayerManager().getEditDataSet();
                 if (ds != null && drawTargetHighlight) {
                     ds.setHighlightedVirtualNodes(virtualManager.virtualWays);
@@ -306,5 +306,5 @@
                 // only consider merge if ctrl is pressed and there are nodes in
                 // the selection that could be merged
-                if (!ctrl || getCurrentDataSet().getSelectedNodes().isEmpty()) {
+                if (!ctrl || getLayerManager().getEditDataSet().getSelectedNodes().isEmpty()) {
                     c = "move";
                     break;
@@ -348,5 +348,5 @@
     private boolean removeHighlighting() {
         boolean needsRepaint = false;
-        DataSet ds = getCurrentDataSet();
+        DataSet ds = getLayerManager().getEditDataSet();
         if (ds != null && !ds.getHighlightedVirtualNodes().isEmpty()) {
             needsRepaint = true;
@@ -427,6 +427,7 @@
         case SCALE:
             //  if nothing was selected, select primitive under cursor for scaling or rotating
-            if (getCurrentDataSet().getSelected().isEmpty()) {
-                getCurrentDataSet().setSelected(asColl(nearestPrimitive));
+            DataSet ds = getLayerManager().getEditDataSet();
+            if (ds.getSelected().isEmpty()) {
+                ds.setSelected(asColl(nearestPrimitive));
             }
 
@@ -519,5 +520,5 @@
             // If ctrl is pressed we are in merge mode. Look for a nearby node,
             // highlight it and adjust the cursor accordingly.
-            final boolean canMerge = ctrl && !getCurrentDataSet().getSelectedNodes().isEmpty();
+            final boolean canMerge = ctrl && !getLayerManager().getEditDataSet().getSelectedNodes().isEmpty();
             final OsmPrimitive p = canMerge ? findNodeToMergeTo(e.getPoint()) : null;
             boolean needsRepaint = removeHighlighting();
@@ -593,5 +594,5 @@
 
             // Select Draw Tool if no selection has been made
-            if (getCurrentDataSet().getSelected().isEmpty() && !cancelDrawMode) {
+            if (getLayerManager().getEditDataSet().getSelected().isEmpty() && !cancelDrawMode) {
                 Main.map.selectDrawTool(true);
                 updateStatusLine();
@@ -611,5 +612,5 @@
 
                     // If the user double-clicked a node, change to draw mode
-                    Collection<OsmPrimitive> c = getCurrentDataSet().getSelected();
+                    Collection<OsmPrimitive> c = getLayerManager().getEditDataSet().getSelected();
                     if (e.getClickCount() >= 2 && c.size() == 1 && c.iterator().next() instanceof Node) {
                         // We need to do it like this as otherwise drawAction will see a double
@@ -705,8 +706,9 @@
         // Currently we support only transformations which do not affect relations.
         // So don't add them in the first place to make handling easier
-        Collection<OsmPrimitive> selection = getCurrentDataSet().getSelectedNodesAndWays();
+        DataSet ds = getLayerManager().getEditDataSet();
+        Collection<OsmPrimitive> selection = ds.getSelectedNodesAndWays();
         if (selection.isEmpty()) { // if nothing was selected to drag, just select nearest node/way to the cursor
             OsmPrimitive nearestPrimitive = mv.getNearestNodeOrWay(mv.getPoint(startEN), mv.isSelectablePredicate, true);
-            getCurrentDataSet().setSelected(nearestPrimitive);
+            ds.setSelected(nearestPrimitive);
         }
 
@@ -719,5 +721,5 @@
         if (mode == Mode.MOVE) {
             if (startEN == null) return false; // fix #8128
-            getCurrentDataSet().beginUpdate();
+            ds.beginUpdate();
             if (c instanceof MoveCommand && affectedNodes.equals(((MoveCommand) c).getParticipatingPrimitives())) {
                 ((MoveCommand) c).saveCheckpoint();
@@ -732,5 +734,5 @@
                     // Revert move
                     ((MoveCommand) c).resetToCheckpoint();
-                    getCurrentDataSet().endUpdate();
+                    ds.endUpdate();
                     JOptionPane.showMessageDialog(
                             Main.parent,
@@ -749,5 +751,5 @@
             }
 
-            getCurrentDataSet().beginUpdate();
+            ds.beginUpdate();
 
             if (mode == Mode.ROTATE) {
@@ -765,10 +767,10 @@
             }
 
-            Collection<Way> ways = getCurrentDataSet().getSelectedWays();
+            Collection<Way> ways = ds.getSelectedWays();
             if (doesImpactStatusLine(affectedNodes, ways)) {
                 Main.map.statusLine.setDist(ways);
             }
         }
-        getCurrentDataSet().endUpdate();
+        ds.endUpdate();
         return true;
     }
@@ -790,5 +792,5 @@
     private void useLastMoveCommandIfPossible() {
         Command c = getLastCommand();
-        Collection<Node> affectedNodes = AllNodesVisitor.getAllNodes(getCurrentDataSet().getSelected());
+        Collection<Node> affectedNodes = AllNodesVisitor.getAllNodes(getLayerManager().getEditDataSet().getSelected());
         if (c instanceof MoveCommand && affectedNodes.equals(((MoveCommand) c).getParticipatingPrimitives())) {
             // old command was created with different base point of movement, we need to recalculate it
@@ -829,5 +831,5 @@
         }
         int max = Main.pref.getInteger("warn.move.maxelements", 20), limit = max;
-        for (OsmPrimitive osm : getCurrentDataSet().getSelected()) {
+        for (OsmPrimitive osm : getLayerManager().getEditDataSet().getSelected()) {
             if (osm instanceof Way) {
                 limit -= ((Way) osm).getNodes().size();
@@ -855,5 +857,5 @@
             if (ctrl) mergePrims(e.getPoint());
         }
-        getCurrentDataSet().fireSelectionChanged();
+        getLayerManager().getEditDataSet().fireSelectionChanged();
     }
 
@@ -890,5 +892,6 @@
      */
     private void mergePrims(Point p) {
-        Collection<Node> selNodes = getCurrentDataSet().getSelectedNodes();
+        DataSet ds = getLayerManager().getEditDataSet();
+        Collection<Node> selNodes = ds.getSelectedNodes();
         if (selNodes.isEmpty())
             return;
@@ -900,9 +903,8 @@
         if (selNodes.size() == 1) {
             // Move all selected primitive to preserve shape #10748
-            Collection<OsmPrimitive> selection =
-                getCurrentDataSet().getSelectedNodesAndWays();
+            Collection<OsmPrimitive> selection = ds.getSelectedNodesAndWays();
             Collection<Node> affectedNodes = AllNodesVisitor.getAllNodes(selection);
             Command c = getLastCommand();
-            getCurrentDataSet().beginUpdate();
+            ds.beginUpdate();
             if (c instanceof MoveCommand
                 && affectedNodes.equals(((MoveCommand) c).getParticipatingPrimitives())) {
@@ -913,5 +915,5 @@
                                             targetEN.getY() - selectedEN.getY());
             }
-            getCurrentDataSet().endUpdate();
+            ds.endUpdate();
         }
 
@@ -941,5 +943,5 @@
     private Node findNodeToMergeTo(Point p) {
         Collection<Node> target = mv.getNearestNodes(p,
-                getCurrentDataSet().getSelectedNodes(),
+                getLayerManager().getEditDataSet().getSelectedNodes(),
                 mv.isSelectablePredicate);
         return target.isEmpty() ? null : target.iterator().next();
@@ -947,5 +949,5 @@
 
     private void selectPrims(Collection<OsmPrimitive> prims, boolean released, boolean area) {
-        DataSet ds = getCurrentDataSet();
+        DataSet ds = getLayerManager().getEditDataSet();
 
         // not allowed together: do not change dataset selection, return early
@@ -996,6 +998,7 @@
                 return tr("Release the mouse button to select the objects in the rectangle.");
             else if (mode == Mode.MOVE && (System.currentTimeMillis() - mouseDownTime >= initialMoveDelay)) {
-                final boolean canMerge = getCurrentDataSet() != null && !getCurrentDataSet().getSelectedNodes().isEmpty();
-                final String mergeHelp = canMerge ? ' ' + tr("Ctrl to merge with nearest node.") : "";
+                final DataSet ds = getLayerManager().getEditDataSet();
+                final boolean canMerge = ds != null && !ds.getSelectedNodes().isEmpty();
+                final String mergeHelp = canMerge ? (' ' + tr("Ctrl to merge with nearest node.")) : "";
                 return tr("Release the mouse button to stop moving.") + mergeHelp;
             } else if (mode == Mode.ROTATE)
@@ -1110,5 +1113,5 @@
             // updateKeyModifiers() already called before!
 
-            DataSet ds = getCurrentDataSet();
+            DataSet ds = getLayerManager().getEditDataSet();
             OsmPrimitive first = cycleList.iterator().next(), foundInDS = null;
             OsmPrimitive nxt = first;
@@ -1245,5 +1248,5 @@
                     virtualWays.size());
             Main.main.undoRedo.add(new SequenceCommand(text, virtualCmds));
-            getCurrentDataSet().setSelected(Collections.singleton((OsmPrimitive) virtualNode));
+            getLayerManager().getEditDataSet().setSelected(Collections.singleton((OsmPrimitive) virtualNode));
             clear();
         }
Index: /trunk/src/org/openstreetmap/josm/actions/search/SearchAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/search/SearchAction.java	(revision 10381)
+++ /trunk/src/org/openstreetmap/josm/actions/search/SearchAction.java	(revision 10382)
@@ -784,5 +784,5 @@
     @Override
     protected void updateEnabledState() {
-        setEnabled(getEditLayer() != null);
+        setEnabled(getLayerManager().getEditLayer() != null);
     }
 
Index: /trunk/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresetSearchPrimitiveDialog.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresetSearchPrimitiveDialog.java	(revision 10381)
+++ /trunk/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresetSearchPrimitiveDialog.java	(revision 10382)
@@ -52,5 +52,5 @@
         @Override
         protected void updateEnabledState() {
-            setEnabled(getEditLayer() != null);
+            setEnabled(getLayerManager().getEditLayer() != null);
         }
     }
