diff --git a/src/org/openstreetmap/josm/actions/AutoScaleAction.java b/src/org/openstreetmap/josm/actions/AutoScaleAction.java
index 7438bdd..fd8fcf8 100644
--- a/src/org/openstreetmap/josm/actions/AutoScaleAction.java
+++ b/src/org/openstreetmap/josm/actions/AutoScaleAction.java
@@ -73,9 +73,11 @@ public class AutoScaleAction extends JosmAction {
      *
      */
     public static void zoomToSelection() {
-        if (Main.main == null || !Main.main.hasEditLayer())
+        DataSet dataSet = Main.getLayerManager().getEditDataSet();
+        if (dataSet == null) {
             return;
-        Collection<OsmPrimitive> sel = Main.getLayerManager().getEditLayer().data.getSelected();
+        }
+        Collection<OsmPrimitive> sel = dataSet.getSelected();
         if (sel.isEmpty()) {
             JOptionPane.showMessageDialog(
                     Main.parent,
@@ -278,7 +280,10 @@ public class AutoScaleAction extends JosmAction {
     private BoundingXYVisitor modeSelectionOrConflict(BoundingXYVisitor v) {
         Collection<OsmPrimitive> sel = new HashSet<>();
         if ("selection".equals(mode)) {
-            sel = getLayerManager().getEditDataSet().getSelected();
+            DataSet dataSet = getLayerManager().getEditDataSet();
+            if (dataSet != null) {
+                sel = dataSet.getSelected();
+            }
         } else {
             Conflict<? extends OsmPrimitive> c = Main.map.conflictDialog.getSelectedConflict();
             if (c != null) {
diff --git a/src/org/openstreetmap/josm/actions/CreateMultipolygonAction.java b/src/org/openstreetmap/josm/actions/CreateMultipolygonAction.java
index db225a0..1ff34ab 100644
--- a/src/org/openstreetmap/josm/actions/CreateMultipolygonAction.java
+++ b/src/org/openstreetmap/josm/actions/CreateMultipolygonAction.java
@@ -134,7 +134,8 @@ public class CreateMultipolygonAction extends JosmAction {
 
     @Override
     public void actionPerformed(ActionEvent e) {
-        if (!Main.main.hasEditLayer()) {
+        DataSet dataSet = Main.getLayerManager().getEditDataSet();
+        if (dataSet == null) {
             new Notification(
                     tr("No data loaded."))
                     .setIcon(JOptionPane.WARNING_MESSAGE)
@@ -143,7 +144,7 @@ public class CreateMultipolygonAction extends JosmAction {
             return;
         }
 
-        final Collection<Way> selectedWays = Main.getLayerManager().getEditDataSet().getSelectedWays();
+        final Collection<Way> selectedWays = dataSet.getSelectedWays();
 
         if (selectedWays.isEmpty()) {
             // Sometimes it make sense creating multipoly of only one way (so it will form outer way)
@@ -156,7 +157,7 @@ public class CreateMultipolygonAction extends JosmAction {
             return;
         }
 
-        final Collection<Relation> selectedRelations = Main.getLayerManager().getEditDataSet().getSelectedRelations();
+        final Collection<Relation> selectedRelations = dataSet.getSelectedRelations();
         final Relation multipolygonRelation = update
                 ? getSelectedMultipolygonRelation(selectedWays, selectedRelations)
                 : null;
diff --git a/src/org/openstreetmap/josm/actions/ViewportFollowToggleAction.java b/src/org/openstreetmap/josm/actions/ViewportFollowToggleAction.java
index 1c96710..13c232a 100644
--- a/src/org/openstreetmap/josm/actions/ViewportFollowToggleAction.java
+++ b/src/org/openstreetmap/josm/actions/ViewportFollowToggleAction.java
@@ -41,6 +41,6 @@ public class ViewportFollowToggleAction extends ToggleAction {
 
     @Override
     protected void updateEnabledState() {
-        setEnabled(Main.main.hasEditLayer());
+        setEnabled(Main.getLayerManager().getEditDataSet() != null);
     }
 }
diff --git a/src/org/openstreetmap/josm/actions/WireframeToggleAction.java b/src/org/openstreetmap/josm/actions/WireframeToggleAction.java
index 474cb7e..95c7cb8 100644
--- a/src/org/openstreetmap/josm/actions/WireframeToggleAction.java
+++ b/src/org/openstreetmap/josm/actions/WireframeToggleAction.java
@@ -36,7 +36,7 @@ public class WireframeToggleAction extends ToggleAction {
 
     @Override
     protected void updateEnabledState() {
-        setEnabled(Main.main.hasEditLayer());
+        setEnabled(Main.getLayerManager().getEditLayer() != null);
     }
 
     @Override
diff --git a/src/org/openstreetmap/josm/actions/relation/DeleteRelationsAction.java b/src/org/openstreetmap/josm/actions/relation/DeleteRelationsAction.java
index 530213b..fb49dfe 100644
--- a/src/org/openstreetmap/josm/actions/relation/DeleteRelationsAction.java
+++ b/src/org/openstreetmap/josm/actions/relation/DeleteRelationsAction.java
@@ -9,6 +9,7 @@ import java.util.Collection;
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.actions.mapmode.DeleteAction;
 import org.openstreetmap.josm.data.osm.Relation;
+import org.openstreetmap.josm.gui.layer.OsmDataLayer;
 import org.openstreetmap.josm.tools.ImageProvider;
 
 /**
@@ -27,9 +28,11 @@ public class DeleteRelationsAction extends AbstractRelationAction {
     }
 
     protected void deleteRelation(Collection<Relation> toDelete) {
-        if (toDelete == null)
+        OsmDataLayer layer = Main.getLayerManager().getEditLayer();
+        if (toDelete == null || layer == null)
             return;
-        DeleteAction.deleteRelations(Main.getLayerManager().getEditLayer(), toDelete);
+
+        DeleteAction.deleteRelations(layer, toDelete);
         // clear selection after deletion
         if (Main.map.relationListDialog != null)
                 Main.map.relationListDialog.selectRelations(null);
@@ -37,7 +40,7 @@ public class DeleteRelationsAction extends AbstractRelationAction {
 
     @Override
     public void actionPerformed(ActionEvent e) {
-        if (!isEnabled() || !Main.main.hasEditLayer())
+        if (!isEnabled())
             return;
         deleteRelation(relations);
     }
diff --git a/src/org/openstreetmap/josm/data/validation/tests/UnconnectedWays.java b/src/org/openstreetmap/josm/data/validation/tests/UnconnectedWays.java
index 5fbef85..411a734 100644
--- a/src/org/openstreetmap/josm/data/validation/tests/UnconnectedWays.java
+++ b/src/org/openstreetmap/josm/data/validation/tests/UnconnectedWays.java
@@ -20,6 +20,7 @@ import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.coor.EastNorth;
 import org.openstreetmap.josm.data.coor.LatLon;
 import org.openstreetmap.josm.data.osm.BBox;
+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.QuadBuckets;
@@ -163,7 +164,8 @@ public abstract class UnconnectedWays extends Test {
         othernodes = new HashSet<>();
         mindist = Main.pref.getDouble(PREFIX + ".node_way_distance", 10.0);
         minmiddledist = Main.pref.getDouble(PREFIX + ".way_way_distance", 0.0);
-        dsArea = Main.main == null || !Main.main.hasEditLayer() ? null : Main.getLayerManager().getEditDataSet().getDataSourceArea();
+        DataSet dataSet = Main.getLayerManager().getEditDataSet();
+        dsArea = dataSet == null ? null : dataSet.getDataSourceArea();
     }
 
     protected Map<Node, Way> getWayEndNodesNearOtherHighway() {
diff --git a/src/org/openstreetmap/josm/gui/dialogs/ChangesetDialog.java b/src/org/openstreetmap/josm/gui/dialogs/ChangesetDialog.java
index 03b2cef..e882c95 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/ChangesetDialog.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/ChangesetDialog.java
@@ -315,7 +315,7 @@ public class ChangesetDialog extends ToggleDialog {
 
         @Override
         public void actionPerformed(ActionEvent e) {
-            if (!Main.main.hasEditLayer())
+            if (Main.getLayerManager().getEditLayer() == null)
                 return;
             ChangesetListModel model = getCurrentChangesetListModel();
             Set<Integer> sel = model.getSelectedChangesetIds();
diff --git a/src/org/openstreetmap/josm/gui/dialogs/CommandStackDialog.java b/src/org/openstreetmap/josm/gui/dialogs/CommandStackDialog.java
index 2059f50..d084a4f 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/CommandStackDialog.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/CommandStackDialog.java
@@ -38,6 +38,7 @@ import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.actions.AutoScaleAction;
 import org.openstreetmap.josm.command.Command;
 import org.openstreetmap.josm.command.PseudoCommand;
+import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.gui.SideButton;
 import org.openstreetmap.josm.gui.layer.OsmDataLayer;
@@ -388,9 +389,9 @@ public class CommandStackDialog extends ToggleDialog implements CommandQueueList
             } else
                 throw new IllegalStateException();
 
-            OsmDataLayer editLayer = Main.getLayerManager().getEditLayer();
-            if (editLayer == null) return;
-            editLayer.data.setSelected(getAffectedPrimitives(path));
+            DataSet dataSet = Main.getLayerManager().getEditDataSet();
+            if (dataSet == null) return;
+            dataSet.setSelected(getAffectedPrimitives(path));
         }
 
         @Override
@@ -416,7 +417,6 @@ public class CommandStackDialog extends ToggleDialog implements CommandQueueList
         @Override
         public void actionPerformed(ActionEvent e) {
             super.actionPerformed(e);
-            if (!Main.main.hasEditLayer()) return;
             AutoScaleAction.autoScale("selection");
         }
     }
diff --git a/src/org/openstreetmap/josm/gui/dialogs/RelationListDialog.java b/src/org/openstreetmap/josm/gui/dialogs/RelationListDialog.java
index fdaedd2..59e0cae 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/RelationListDialog.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/RelationListDialog.java
@@ -370,7 +370,7 @@ public class RelationListDialog extends ToggleDialog
         }
 
         protected void updateEnabledState() {
-            setEnabled(Main.main != null && Main.main.hasEditLayer());
+            setEnabled(Main.getLayerManager().getEditLayer() != null);
         }
 
         @Override
diff --git a/src/org/openstreetmap/josm/gui/dialogs/SelectionListDialog.java b/src/org/openstreetmap/josm/gui/dialogs/SelectionListDialog.java
index a192b92..3f56870 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/SelectionListDialog.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/SelectionListDialog.java
@@ -309,7 +309,7 @@ public class SelectionListDialog extends ToggleDialog {
         }
 
         protected void updateEnabledState() {
-            setEnabled(Main.main != null && Main.main.hasEditLayer());
+            setEnabled(Main.getLayerManager().getEditLayer() != null);
         }
 
         @Override
diff --git a/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetContentPanel.java b/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetContentPanel.java
index fe959a9..ca0b830 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetContentPanel.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetContentPanel.java
@@ -332,10 +332,13 @@ public class ChangesetContentPanel extends JPanel implements PropertyChangeListe
     abstract class SelectionBasedAction extends AbstractAction implements ListSelectionListener, ActiveLayerChangeListener {
 
         protected Set<OsmPrimitive> getTarget() {
-            if (!isEnabled() || Main.main == null || !Main.main.hasEditLayer()) {
+            if (!isEnabled()) {
                 return null;
             }
             OsmDataLayer layer = Main.getLayerManager().getEditLayer();
+            if (layer == null) {
+                return null;
+            }
             Set<OsmPrimitive> target = new HashSet<>();
             for (HistoryOsmPrimitive p : model.getSelectedPrimitives()) {
                 OsmPrimitive op = layer.data.getPrimitiveById(p.getPrimitiveId());
@@ -347,11 +350,7 @@ public class ChangesetContentPanel extends JPanel implements PropertyChangeListe
         }
 
         public final void updateEnabledState() {
-            if (Main.main == null || !Main.main.hasEditLayer()) {
-                setEnabled(false);
-                return;
-            }
-            setEnabled(model.hasSelectedPrimitives());
+            setEnabled(Main.getLayerManager().getEditLayer() != null && model.hasSelectedPrimitives());
         }
 
         @Override
diff --git a/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetDetailPanel.java b/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetDetailPanel.java
index 51272fc..c875d2d 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetDetailPanel.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetDetailPanel.java
@@ -346,8 +346,10 @@ public class ChangesetDetailPanel extends JPanel implements PropertyChangeListen
         public void actionPerformed(ActionEvent arg0) {
             if (!isEnabled())
                 return;
-            if (Main.main == null || !Main.main.hasEditLayer()) return;
             OsmDataLayer layer = Main.getLayerManager().getEditLayer();
+            if (layer == null) {
+                return;
+            }
             Set<OsmPrimitive> target = new HashSet<>();
             for (OsmPrimitive p: layer.data.allPrimitives()) {
                 if (p.isUsable() && p.getChangesetId() == currentChangeset.getId()) {
@@ -362,11 +364,7 @@ public class ChangesetDetailPanel extends JPanel implements PropertyChangeListen
         }
 
         public void updateEnabledState() {
-            if (Main.main == null || !Main.main.hasEditLayer()) {
-                setEnabled(false);
-                return;
-            }
-            setEnabled(currentChangeset != null);
+            setEnabled(Main.getLayerManager().getEditLayer() != null && currentChangeset != null);
         }
 
         @Override
@@ -407,8 +405,10 @@ public class ChangesetDetailPanel extends JPanel implements PropertyChangeListen
         public void actionPerformed(ActionEvent arg0) {
             if (!isEnabled())
                 return;
-            if (Main.main == null || !Main.main.hasEditLayer()) return;
             OsmDataLayer layer = Main.getLayerManager().getEditLayer();
+            if (layer == null) {
+                return;
+            }
             Set<OsmPrimitive> target = new HashSet<>();
             for (OsmPrimitive p: layer.data.allPrimitives()) {
                 if (p.isUsable() && p.getChangesetId() == currentChangeset.getId()) {
@@ -424,11 +424,7 @@ public class ChangesetDetailPanel extends JPanel implements PropertyChangeListen
         }
 
         public void updateEnabledState() {
-            if (Main.main == null || !Main.main.hasEditLayer()) {
-                setEnabled(false);
-                return;
-            }
-            setEnabled(currentChangeset != null);
+            setEnabled(Main.getLayerManager().getEditLayer() != null && currentChangeset != null);
         }
 
         @Override
diff --git a/src/org/openstreetmap/josm/gui/history/NodeListViewer.java b/src/org/openstreetmap/josm/gui/history/NodeListViewer.java
index dc37a0a..d3c7f7b 100644
--- a/src/org/openstreetmap/josm/gui/history/NodeListViewer.java
+++ b/src/org/openstreetmap/josm/gui/history/NodeListViewer.java
@@ -265,11 +265,7 @@ public class NodeListViewer extends JPanel {
         }
 
         public void updateEnabledState() {
-            if (!Main.main.hasEditLayer()) {
-                setEnabled(false);
-                return;
-            }
-            setEnabled(getPrimitiveToZoom() != null);
+            setEnabled(Main.getLayerManager().getEditLayer() != null && getPrimitiveToZoom() != null);
         }
     }
 
diff --git a/src/org/openstreetmap/josm/gui/layer/ValidatorLayer.java b/src/org/openstreetmap/josm/gui/layer/ValidatorLayer.java
index 642e05d..a72a581 100644
--- a/src/org/openstreetmap/josm/gui/layer/ValidatorLayer.java
+++ b/src/org/openstreetmap/josm/gui/layer/ValidatorLayer.java
@@ -162,7 +162,8 @@ public class ValidatorLayer extends Layer implements LayerChangeListener {
      */
     @Override
     public void layerRemoving(LayerRemoveEvent e) {
-        if (e.getRemovedLayer() instanceof OsmDataLayer && Main.isDisplayingMapView() && !Main.main.hasEditLayer()) {
+        // Removed layer is still in that list.
+        if (e.getRemovedLayer() instanceof OsmDataLayer && e.getSource().getLayersOfType(OsmDataLayer.class).size() <= 1) {
             Main.getLayerManager().removeLayer(this);
         } else if (e.getRemovedLayer() == this) {
             Main.getLayerManager().removeLayerChangeListener(this);
diff --git a/src/org/openstreetmap/josm/gui/mappaint/MapPaintMenu.java b/src/org/openstreetmap/josm/gui/mappaint/MapPaintMenu.java
index 7a470a5..9f64c14 100644
--- a/src/org/openstreetmap/josm/gui/mappaint/MapPaintMenu.java
+++ b/src/org/openstreetmap/josm/gui/mappaint/MapPaintMenu.java
@@ -65,7 +65,7 @@ public class MapPaintMenu extends JMenu implements MapPaintSylesUpdateListener {
 
         @Override
         public void updateEnabledState() {
-            setEnabled(Main.isDisplayingMapView() && (Main.main.hasEditLayer() || mapHasGpxorMarkerLayer()));
+            setEnabled(Main.isDisplayingMapView() && (Main.getLayerManager().getEditLayer() != null || mapHasGpxorMarkerLayer()));
         }
 
         private static boolean mapHasGpxorMarkerLayer() {
diff --git a/src/org/openstreetmap/josm/io/remotecontrol/handler/AddNodeHandler.java b/src/org/openstreetmap/josm/io/remotecontrol/handler/AddNodeHandler.java
index 74c52c3..8d8dd68 100644
--- a/src/org/openstreetmap/josm/io/remotecontrol/handler/AddNodeHandler.java
+++ b/src/org/openstreetmap/josm/io/remotecontrol/handler/AddNodeHandler.java
@@ -119,7 +119,7 @@ public class AddNodeHandler extends RequestHandler {
         } catch (NumberFormatException e) {
             throw new RequestHandlerBadRequestException("NumberFormatException ("+e.getMessage()+')', e);
         }
-        if (!Main.main.hasEditLayer()) {
+        if (Main.getLayerManager().getEditLayer() == null) {
              throw new RequestHandlerBadRequestException(tr("There is no layer opened to add node"));
         }
     }
diff --git a/src/org/openstreetmap/josm/io/remotecontrol/handler/AddWayHandler.java b/src/org/openstreetmap/josm/io/remotecontrol/handler/AddWayHandler.java
index 58c2f4b..75488ac 100644
--- a/src/org/openstreetmap/josm/io/remotecontrol/handler/AddWayHandler.java
+++ b/src/org/openstreetmap/josm/io/remotecontrol/handler/AddWayHandler.java
@@ -113,7 +113,7 @@ public class AddWayHandler extends RequestHandler {
         } else if (allCoordinates.size() == 1) {
             throw new RequestHandlerBadRequestException(tr("One node ways"));
         }
-        if (!Main.main.hasEditLayer()) {
+        if (Main.getLayerManager().getEditLayer() == null) {
              throw new RequestHandlerBadRequestException(tr("There is no layer opened to add way"));
         }
     }
