Index: trunk/src/org/openstreetmap/josm/actions/AutoScaleAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/AutoScaleAction.java	(revision 10452)
+++ trunk/src/org/openstreetmap/josm/actions/AutoScaleAction.java	(revision 10453)
@@ -74,7 +74,9 @@
      */
     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(
@@ -279,5 +281,8 @@
         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();
Index: trunk/src/org/openstreetmap/josm/actions/CreateMultipolygonAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/CreateMultipolygonAction.java	(revision 10452)
+++ trunk/src/org/openstreetmap/josm/actions/CreateMultipolygonAction.java	(revision 10453)
@@ -135,5 +135,6 @@
     @Override
     public void actionPerformed(ActionEvent e) {
-        if (!Main.main.hasEditLayer()) {
+        DataSet dataSet = Main.getLayerManager().getEditDataSet();
+        if (dataSet == null) {
             new Notification(
                     tr("No data loaded."))
@@ -144,5 +145,5 @@
         }
 
-        final Collection<Way> selectedWays = Main.getLayerManager().getEditDataSet().getSelectedWays();
+        final Collection<Way> selectedWays = dataSet.getSelectedWays();
 
         if (selectedWays.isEmpty()) {
@@ -157,5 +158,5 @@
         }
 
-        final Collection<Relation> selectedRelations = Main.getLayerManager().getEditDataSet().getSelectedRelations();
+        final Collection<Relation> selectedRelations = dataSet.getSelectedRelations();
         final Relation multipolygonRelation = update
                 ? getSelectedMultipolygonRelation(selectedWays, selectedRelations)
Index: trunk/src/org/openstreetmap/josm/actions/ViewportFollowToggleAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/ViewportFollowToggleAction.java	(revision 10452)
+++ trunk/src/org/openstreetmap/josm/actions/ViewportFollowToggleAction.java	(revision 10453)
@@ -42,5 +42,5 @@
     @Override
     protected void updateEnabledState() {
-        setEnabled(Main.main.hasEditLayer());
+        setEnabled(Main.getLayerManager().getEditDataSet() != null);
     }
 }
Index: trunk/src/org/openstreetmap/josm/actions/WireframeToggleAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/WireframeToggleAction.java	(revision 10452)
+++ trunk/src/org/openstreetmap/josm/actions/WireframeToggleAction.java	(revision 10453)
@@ -37,5 +37,5 @@
     @Override
     protected void updateEnabledState() {
-        setEnabled(Main.main.hasEditLayer());
+        setEnabled(Main.getLayerManager().getEditLayer() != null);
     }
 
Index: trunk/src/org/openstreetmap/josm/actions/relation/DeleteRelationsAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/relation/DeleteRelationsAction.java	(revision 10452)
+++ trunk/src/org/openstreetmap/josm/actions/relation/DeleteRelationsAction.java	(revision 10453)
@@ -10,4 +10,5 @@
 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;
 
@@ -28,7 +29,9 @@
 
     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)
@@ -38,5 +41,5 @@
     @Override
     public void actionPerformed(ActionEvent e) {
-        if (!isEnabled() || !Main.main.hasEditLayer())
+        if (!isEnabled())
             return;
         deleteRelation(relations);
Index: trunk/src/org/openstreetmap/josm/data/validation/tests/UnconnectedWays.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/validation/tests/UnconnectedWays.java	(revision 10452)
+++ trunk/src/org/openstreetmap/josm/data/validation/tests/UnconnectedWays.java	(revision 10453)
@@ -21,4 +21,5 @@
 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;
@@ -164,5 +165,6 @@
         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();
     }
 
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/ChangesetDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/ChangesetDialog.java	(revision 10452)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/ChangesetDialog.java	(revision 10453)
@@ -316,5 +316,5 @@
         @Override
         public void actionPerformed(ActionEvent e) {
-            if (!Main.main.hasEditLayer())
+            if (Main.getLayerManager().getEditLayer() == null)
                 return;
             ChangesetListModel model = getCurrentChangesetListModel();
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/CommandStackDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/CommandStackDialog.java	(revision 10452)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/CommandStackDialog.java	(revision 10453)
@@ -39,4 +39,5 @@
 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;
@@ -268,5 +269,5 @@
     private void buildTrees() {
         setTitle(tr("Command Stack"));
-        if (!Main.main.hasEditLayer())
+        if (Main.getLayerManager().getEditLayer() == null)
             return;
 
@@ -389,7 +390,7 @@
                 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));
         }
 
@@ -417,5 +418,4 @@
         public void actionPerformed(ActionEvent e) {
             super.actionPerformed(e);
-            if (!Main.main.hasEditLayer()) return;
             AutoScaleAction.autoScale("selection");
         }
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/RelationListDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/RelationListDialog.java	(revision 10452)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/RelationListDialog.java	(revision 10453)
@@ -339,5 +339,5 @@
         @Override
         public void mouseClicked(MouseEvent e) {
-            if (!Main.main.hasEditLayer()) return;
+            if (Main.getLayerManager().getEditLayer() == null) return;
             if (isDoubleClick(e)) {
                 if (e.isControlDown()) {
@@ -371,5 +371,5 @@
 
         protected void updateEnabledState() {
-            setEnabled(Main.main != null && Main.main.hasEditLayer());
+            setEnabled(Main.getLayerManager().getEditLayer() != null);
         }
 
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/SelectionListDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/SelectionListDialog.java	(revision 10452)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/SelectionListDialog.java	(revision 10453)
@@ -310,5 +310,5 @@
 
         protected void updateEnabledState() {
-            setEnabled(Main.main != null && Main.main.hasEditLayer());
+            setEnabled(Main.getLayerManager().getEditLayer() != null);
         }
 
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetContentPanel.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetContentPanel.java	(revision 10452)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetContentPanel.java	(revision 10453)
@@ -333,8 +333,11 @@
 
         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()) {
@@ -348,9 +351,5 @@
 
         public final void updateEnabledState() {
-            if (Main.main == null || !Main.main.hasEditLayer()) {
-                setEnabled(false);
-                return;
-            }
-            setEnabled(model.hasSelectedPrimitives());
+            setEnabled(Main.getLayerManager().getEditLayer() != null && model.hasSelectedPrimitives());
         }
 
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetDetailPanel.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetDetailPanel.java	(revision 10452)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetDetailPanel.java	(revision 10453)
@@ -347,6 +347,8 @@
             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()) {
@@ -363,9 +365,5 @@
 
         public void updateEnabledState() {
-            if (Main.main == null || !Main.main.hasEditLayer()) {
-                setEnabled(false);
-                return;
-            }
-            setEnabled(currentChangeset != null);
+            setEnabled(Main.getLayerManager().getEditLayer() != null && currentChangeset != null);
         }
 
@@ -408,6 +406,8 @@
             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()) {
@@ -425,9 +425,5 @@
 
         public void updateEnabledState() {
-            if (Main.main == null || !Main.main.hasEditLayer()) {
-                setEnabled(false);
-                return;
-            }
-            setEnabled(currentChangeset != null);
+            setEnabled(Main.getLayerManager().getEditLayer() != null && currentChangeset != null);
         }
 
Index: trunk/src/org/openstreetmap/josm/gui/history/NodeListViewer.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/history/NodeListViewer.java	(revision 10452)
+++ trunk/src/org/openstreetmap/josm/gui/history/NodeListViewer.java	(revision 10453)
@@ -266,9 +266,5 @@
 
         public void updateEnabledState() {
-            if (!Main.main.hasEditLayer()) {
-                setEnabled(false);
-                return;
-            }
-            setEnabled(getPrimitiveToZoom() != null);
+            setEnabled(Main.getLayerManager().getEditLayer() != null && getPrimitiveToZoom() != null);
         }
     }
Index: trunk/src/org/openstreetmap/josm/gui/layer/ValidatorLayer.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/layer/ValidatorLayer.java	(revision 10452)
+++ trunk/src/org/openstreetmap/josm/gui/layer/ValidatorLayer.java	(revision 10453)
@@ -163,5 +163,6 @@
     @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) {
Index: trunk/src/org/openstreetmap/josm/gui/mappaint/MapPaintMenu.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/mappaint/MapPaintMenu.java	(revision 10452)
+++ trunk/src/org/openstreetmap/josm/gui/mappaint/MapPaintMenu.java	(revision 10453)
@@ -66,5 +66,5 @@
         @Override
         public void updateEnabledState() {
-            setEnabled(Main.isDisplayingMapView() && (Main.main.hasEditLayer() || mapHasGpxorMarkerLayer()));
+            setEnabled(Main.isDisplayingMapView() && (Main.getLayerManager().getEditLayer() != null || mapHasGpxorMarkerLayer()));
         }
 
Index: trunk/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresetSearchAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresetSearchAction.java	(revision 10452)
+++ trunk/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresetSearchAction.java	(revision 10453)
@@ -30,5 +30,5 @@
     public void actionPerformed(ActionEvent e) {
 
-        if (!Main.main.hasEditLayer())
+        if (Main.getLayerManager().getEditLayer() == null)
             return;
 
Index: trunk/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresetSearchPrimitiveDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresetSearchPrimitiveDialog.java	(revision 10452)
+++ trunk/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresetSearchPrimitiveDialog.java	(revision 10453)
@@ -45,5 +45,5 @@
         @Override
         public void actionPerformed(ActionEvent e) {
-            if (Main.main.hasEditLayer()) {
+            if (Main.getLayerManager().getEditLayer() != null) {
                 TaggingPresetSearchPrimitiveDialog.getInstance().showDialog();
             }
Index: trunk/src/org/openstreetmap/josm/io/remotecontrol/handler/AddNodeHandler.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/remotecontrol/handler/AddNodeHandler.java	(revision 10452)
+++ trunk/src/org/openstreetmap/josm/io/remotecontrol/handler/AddNodeHandler.java	(revision 10453)
@@ -120,5 +120,5 @@
             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"));
         }
Index: trunk/src/org/openstreetmap/josm/io/remotecontrol/handler/AddWayHandler.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/remotecontrol/handler/AddWayHandler.java	(revision 10452)
+++ trunk/src/org/openstreetmap/josm/io/remotecontrol/handler/AddWayHandler.java	(revision 10453)
@@ -114,5 +114,5 @@
             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"));
         }
