diff --git a/src/org/openstreetmap/josm/actions/AddImageryLayerAction.java b/src/org/openstreetmap/josm/actions/AddImageryLayerAction.java
index 9d20e99..f857d65 100644
--- a/src/org/openstreetmap/josm/actions/AddImageryLayerAction.java
+++ b/src/org/openstreetmap/josm/actions/AddImageryLayerAction.java
@@ -168,10 +168,8 @@ public class AddImageryLayerAction extends JosmAction implements AdaptableAction
             setEnabled(false);
         } else if (type == ImageryType.TMS || type == ImageryType.BING || type == ImageryType.SCANEX) {
             setEnabled(true);
-        } else if (Main.isDisplayingMapView() && !Main.map.mapView.getAllLayers().isEmpty()) {
-            setEnabled(true);
         } else {
-            setEnabled(false);
+            setEnabled(!Main.getLayerManager().getLayers().isEmpty());
         }
     }
 }
diff --git a/src/org/openstreetmap/josm/actions/AutoScaleAction.java b/src/org/openstreetmap/josm/actions/AutoScaleAction.java
index 30798cb..ba02d71 100644
--- a/src/org/openstreetmap/josm/actions/AutoScaleAction.java
+++ b/src/org/openstreetmap/josm/actions/AutoScaleAction.java
@@ -260,7 +260,7 @@ public class AutoScaleAction extends JosmAction {
     }
 
     private static BoundingXYVisitor modeData(BoundingXYVisitor v) {
-        for (Layer l : Main.map.mapView.getAllLayers()) {
+        for (Layer l : Main.getLayerManager().getLayers()) {
             l.visitBoundingBox(v);
         }
         return v;
@@ -363,7 +363,7 @@ public class AutoScaleAction extends JosmAction {
             setEnabled(Main.isDisplayingMapView() && Main.map.mapView.hasZoomRedoEntries());
             break;
         default:
-            setEnabled(Main.isDisplayingMapView() && Main.map.mapView.hasLayers());
+            setEnabled(!Main.getLayerManager().getLayers().isEmpty());
         }
     }
 
diff --git a/src/org/openstreetmap/josm/actions/DeleteLayerAction.java b/src/org/openstreetmap/josm/actions/DeleteLayerAction.java
index 893449f..23bcdd8 100644
--- a/src/org/openstreetmap/josm/actions/DeleteLayerAction.java
+++ b/src/org/openstreetmap/josm/actions/DeleteLayerAction.java
@@ -1,16 +1,16 @@
 // License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.actions;
 
-import static org.openstreetmap.josm.tools.I18n.tr;
 import static org.openstreetmap.josm.gui.help.HelpUtil.ht;
+import static org.openstreetmap.josm.tools.I18n.tr;
 
 import java.awt.event.ActionEvent;
 import java.awt.event.KeyEvent;
 import java.util.Collections;
 
 import org.openstreetmap.josm.Main;
-import org.openstreetmap.josm.tools.Shortcut;
 import org.openstreetmap.josm.gui.layer.Layer;
+import org.openstreetmap.josm.tools.Shortcut;
 
 /**
  * Deletes the active layer.
@@ -41,6 +41,6 @@ public final class DeleteLayerAction extends JosmAction {
 
     @Override
     protected void updateEnabledState() {
-        setEnabled(Main.isDisplayingMapView() && Main.map.mapView.getActiveLayer() != null);
+        setEnabled(Main.getLayerManager().getActiveLayer() != null);
     }
 }
diff --git a/src/org/openstreetmap/josm/actions/DownloadNotesInViewAction.java b/src/org/openstreetmap/josm/actions/DownloadNotesInViewAction.java
index 97a3a10..65c9e3b 100644
--- a/src/org/openstreetmap/josm/actions/DownloadNotesInViewAction.java
+++ b/src/org/openstreetmap/josm/actions/DownloadNotesInViewAction.java
@@ -42,8 +42,7 @@ public final class DownloadNotesInViewAction extends JosmAction {
 
     @Override
     protected void updateEnabledState() {
-        setEnabled(Main.isDisplayingMapView()
-                && Main.map.mapView.getActiveLayer() != null
+        setEnabled(Main.getLayerManager().getActiveLayer() != null
                 && !Main.isOffline(OnlineResource.OSM_API));
     }
 }
diff --git a/src/org/openstreetmap/josm/actions/GpxExportAction.java b/src/org/openstreetmap/josm/actions/GpxExportAction.java
index 50a16d5..0fd1650 100644
--- a/src/org/openstreetmap/josm/actions/GpxExportAction.java
+++ b/src/org/openstreetmap/josm/actions/GpxExportAction.java
@@ -42,9 +42,7 @@ public class GpxExportAction extends DiskAccessAction {
      * @return The layer to export, either a {@link GpxLayer} or {@link OsmDataLayer}.
      */
     protected Layer getLayer() {
-        if (!Main.isDisplayingMapView())
-            return null;
-        Layer layer = Main.map.mapView.getActiveLayer();
+        Layer layer = Main.getLayerManager().getActiveLayer();
         return (layer instanceof GpxLayer || layer instanceof OsmDataLayer) ? layer : null;
     }
 
diff --git a/src/org/openstreetmap/josm/actions/MapRectifierWMSmenuAction.java b/src/org/openstreetmap/josm/actions/MapRectifierWMSmenuAction.java
index e15a6ca..a57e538 100644
--- a/src/org/openstreetmap/josm/actions/MapRectifierWMSmenuAction.java
+++ b/src/org/openstreetmap/josm/actions/MapRectifierWMSmenuAction.java
@@ -238,6 +238,6 @@ public class MapRectifierWMSmenuAction extends JosmAction {
 
     @Override
     protected void updateEnabledState() {
-        setEnabled(Main.isDisplayingMapView() && !Main.map.mapView.getAllLayers().isEmpty());
+        setEnabled(!Main.getLayerManager().getLayers().isEmpty());
     }
 }
diff --git a/src/org/openstreetmap/josm/actions/MergeLayerAction.java b/src/org/openstreetmap/josm/actions/MergeLayerAction.java
index 7e2e380..683285f 100644
--- a/src/org/openstreetmap/josm/actions/MergeLayerAction.java
+++ b/src/org/openstreetmap/josm/actions/MergeLayerAction.java
@@ -63,7 +63,7 @@ public class MergeLayerAction extends AbstractMergeAction {
                     }
                 }
                 if (layerMerged) {
-                    Main.map.mapView.setActiveLayer(targetLayer);
+                    Main.getLayerManager().setActiveLayer(targetLayer);
                 }
             }
         });
diff --git a/src/org/openstreetmap/josm/actions/SaveActionBase.java b/src/org/openstreetmap/josm/actions/SaveActionBase.java
index e468f07..c812e1c 100644
--- a/src/org/openstreetmap/josm/actions/SaveActionBase.java
+++ b/src/org/openstreetmap/josm/actions/SaveActionBase.java
@@ -51,11 +51,9 @@ public abstract class SaveActionBase extends DiskAccessAction {
      * @return {@code true} if the save operation succeeds
      */
     public boolean doSave() {
-        if (Main.isDisplayingMapView()) {
-            Layer layer = Main.map.mapView.getActiveLayer();
-            if (layer != null && layer.isSavable()) {
-                return doSave(layer);
-            }
+        Layer layer = Main.getLayerManager().getActiveLayer();
+        if (layer != null && layer.isSavable()) {
+            return doSave(layer);
         }
         return false;
     }
@@ -133,14 +131,8 @@ public abstract class SaveActionBase extends DiskAccessAction {
      */
     @Override
     protected void updateEnabledState() {
-        boolean check = Main.isDisplayingMapView()
-        && Main.map.mapView.getActiveLayer() != null;
-        if (!check) {
-            setEnabled(false);
-            return;
-        }
-        Layer layer = Main.map.mapView.getActiveLayer();
-        setEnabled(layer != null && layer.isSavable());
+        Layer activeLayer = Main.getLayerManager().getActiveLayer();
+        setEnabled(activeLayer != null && activeLayer.isSavable());
     }
 
     /**
diff --git a/src/org/openstreetmap/josm/actions/SessionLoadAction.java b/src/org/openstreetmap/josm/actions/SessionLoadAction.java
index 260ca4b..cd390f2 100644
--- a/src/org/openstreetmap/josm/actions/SessionLoadAction.java
+++ b/src/org/openstreetmap/josm/actions/SessionLoadAction.java
@@ -135,7 +135,7 @@ public class SessionLoadAction extends DiskAccessAction {
                     Main.main.addLayer(l, (ViewportData) null);
                 }
                 if (active != null) {
-                    Main.map.mapView.setActiveLayer(active);
+                    Main.getLayerManager().setActiveLayer(active);
                 }
                 if (noMap) {
                     Main.map.setVisible(true);
diff --git a/src/org/openstreetmap/josm/actions/SessionSaveAsAction.java b/src/org/openstreetmap/josm/actions/SessionSaveAsAction.java
index 3990ce88..5e16b54 100644
--- a/src/org/openstreetmap/josm/actions/SessionSaveAsAction.java
+++ b/src/org/openstreetmap/josm/actions/SessionSaveAsAction.java
@@ -160,7 +160,7 @@ public class SessionSaveAsAction extends DiskAccessAction implements MapFrameLis
         }
 
         int active = -1;
-        Layer activeLayer = Main.map.mapView.getActiveLayer();
+        Layer activeLayer = Main.getLayerManager().getActiveLayer();
         if (activeLayer != null) {
             active = layersOut.indexOf(activeLayer);
         }
@@ -203,7 +203,7 @@ public class SessionSaveAsAction extends DiskAccessAction implements MapFrameLis
          * Initializes action.
          */
         public final void initialize() {
-            layers = new ArrayList<>(Main.map.mapView.getAllLayersAsList());
+            layers = new ArrayList<>(Main.getLayerManager().getLayers());
             exporters = new HashMap<>();
             dependencies = new MultiMap<>();
 
diff --git a/src/org/openstreetmap/josm/actions/UploadNotesAction.java b/src/org/openstreetmap/josm/actions/UploadNotesAction.java
index b30f061..3a2f6d9 100644
--- a/src/org/openstreetmap/josm/actions/UploadNotesAction.java
+++ b/src/org/openstreetmap/josm/actions/UploadNotesAction.java
@@ -30,26 +30,19 @@ public class UploadNotesAction extends JosmAction {
 
     @Override
     public void actionPerformed(ActionEvent e) {
-        List<NoteLayer> noteLayers = null;
-        if (Main.map != null) {
-            noteLayers = Main.map.mapView.getLayersOfType(NoteLayer.class);
-        }
+        List<NoteLayer> noteLayers = Main.getLayerManager().getLayersOfType(NoteLayer.class);
         NoteLayer layer;
-        if (noteLayers != null && !noteLayers.isEmpty()) {
+        if (!noteLayers.isEmpty()) {
             layer = noteLayers.get(0);
         } else {
             Main.error("No note layer found");
             return;
         }
-        if (Main.isDebugEnabled()) {
-            Main.debug("uploading note changes");
-        }
+        Main.debug("uploading note changes");
         NoteData noteData = layer.getNoteData();
 
         if (noteData == null || !noteData.isModified()) {
-            if (Main.isDebugEnabled()) {
-                Main.debug("No changed notes to upload");
-            }
+            Main.debug("No changed notes to upload");
             return;
         }
         new UploadNotesTask().uploadNotes(noteData, new PleaseWaitProgressMonitor(tr("Uploading notes to server")));
diff --git a/src/org/openstreetmap/josm/actions/ZoomInAction.java b/src/org/openstreetmap/josm/actions/ZoomInAction.java
index 20853e9..d690678 100644
--- a/src/org/openstreetmap/josm/actions/ZoomInAction.java
+++ b/src/org/openstreetmap/josm/actions/ZoomInAction.java
@@ -51,10 +51,7 @@ public final class ZoomInAction extends JosmAction {
 
     @Override
     protected void updateEnabledState() {
-        setEnabled(
-                Main.isDisplayingMapView()
-                && Main.map.mapView.hasLayers()
-        );
+        setEnabled(!Main.getLayerManager().getLayers().isEmpty());
     }
 
 }
diff --git a/src/org/openstreetmap/josm/actions/ZoomOutAction.java b/src/org/openstreetmap/josm/actions/ZoomOutAction.java
index 98bb1c2..1eb440d 100644
--- a/src/org/openstreetmap/josm/actions/ZoomOutAction.java
+++ b/src/org/openstreetmap/josm/actions/ZoomOutAction.java
@@ -37,9 +37,6 @@ public final class ZoomOutAction extends JosmAction {
 
     @Override
     protected void updateEnabledState() {
-        setEnabled(
-                Main.isDisplayingMapView()
-                && Main.map.mapView.hasLayers()
-        );
+        setEnabled(!Main.getLayerManager().getLayers().isEmpty());
     }
 }
diff --git a/src/org/openstreetmap/josm/actions/downloadtasks/DownloadGpsTask.java b/src/org/openstreetmap/josm/actions/downloadtasks/DownloadGpsTask.java
index b1e1324..024b189 100644
--- a/src/org/openstreetmap/josm/actions/downloadtasks/DownloadGpsTask.java
+++ b/src/org/openstreetmap/josm/actions/downloadtasks/DownloadGpsTask.java
@@ -154,13 +154,11 @@ public class DownloadGpsTask extends AbstractDownloadTask<GpxData> {
         }
 
         private GpxLayer findGpxMergeLayer() {
-            if (!Main.isDisplayingMapView())
-                return null;
             boolean merge = Main.pref.getBoolean("download.gps.mergeWithLocal", false);
-            Layer active = Main.map.mapView.getActiveLayer();
+            Layer active = Main.getLayerManager().getActiveLayer();
             if (active instanceof GpxLayer && (merge || ((GpxLayer) active).data.fromServer))
                 return (GpxLayer) active;
-            for (GpxLayer l : Main.map.mapView.getLayersOfType(GpxLayer.class)) {
+            for (GpxLayer l : Main.getLayerManager().getLayersOfType(GpxLayer.class)) {
                 if (merge || l.data.fromServer)
                     return l;
             }
@@ -168,9 +166,7 @@ public class DownloadGpsTask extends AbstractDownloadTask<GpxData> {
         }
 
         private MarkerLayer findMarkerMergeLayer(GpxLayer fromLayer) {
-            if (!Main.isDisplayingMapView())
-                return null;
-            for (MarkerLayer l : Main.map.mapView.getLayersOfType(MarkerLayer.class)) {
+            for (MarkerLayer l : Main.getLayerManager().getLayersOfType(MarkerLayer.class)) {
                 if (fromLayer != null && l.fromLayer == fromLayer)
                     return l;
             }
diff --git a/src/org/openstreetmap/josm/actions/downloadtasks/DownloadNotesTask.java b/src/org/openstreetmap/josm/actions/downloadtasks/DownloadNotesTask.java
index 7f99e86..bdc48a4 100644
--- a/src/org/openstreetmap/josm/actions/downloadtasks/DownloadNotesTask.java
+++ b/src/org/openstreetmap/josm/actions/downloadtasks/DownloadNotesTask.java
@@ -112,11 +112,8 @@ public class DownloadNotesTask extends AbstractDownloadTask<NoteData> {
                 Main.debug("Notes downloaded: " + notesData.size());
             }
 
-            List<NoteLayer> noteLayers = null;
-            if (Main.map != null) {
-                noteLayers = Main.map.mapView.getLayersOfType(NoteLayer.class);
-            }
-            if (noteLayers != null && !noteLayers.isEmpty()) {
+            List<NoteLayer> noteLayers = Main.getLayerManager().getLayersOfType(NoteLayer.class);
+            if (!noteLayers.isEmpty()) {
                 noteLayers.get(0).getNoteData().addNotes(notesData);
             } else {
                 Main.main.addLayer(new NoteLayer(notesData, tr("Notes")));
diff --git a/src/org/openstreetmap/josm/actions/downloadtasks/DownloadOsmTask.java b/src/org/openstreetmap/josm/actions/downloadtasks/DownloadOsmTask.java
index 6499870..2fbbd13 100644
--- a/src/org/openstreetmap/josm/actions/downloadtasks/DownloadOsmTask.java
+++ b/src/org/openstreetmap/josm/actions/downloadtasks/DownloadOsmTask.java
@@ -19,7 +19,6 @@ import org.openstreetmap.josm.data.coor.LatLon;
 import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.visitor.BoundingXYVisitor;
 import org.openstreetmap.josm.gui.PleaseWaitRunnable;
-import org.openstreetmap.josm.gui.layer.Layer;
 import org.openstreetmap.josm.gui.layer.OsmDataLayer;
 import org.openstreetmap.josm.gui.progress.NullProgressMonitor;
 import org.openstreetmap.josm.gui.progress.ProgressMonitor;
@@ -216,18 +215,11 @@ public class DownloadOsmTask extends AbstractDownloadTask<DataSet> {
         }
 
         protected int getNumDataLayers() {
-            if (!Main.isDisplayingMapView()) return 0;
-            return Utils.filteredCollection(Main.map.mapView.getAllLayers(), OsmDataLayer.class).size();
+            return Main.getLayerManager().getLayersOfType(OsmDataLayer.class).size();
         }
 
         protected OsmDataLayer getFirstDataLayer() {
-            if (!Main.isDisplayingMapView()) return null;
-            Collection<Layer> layers = Main.map.mapView.getAllLayersAsList();
-            for (Layer layer : layers) {
-                if (layer instanceof OsmDataLayer)
-                    return (OsmDataLayer) layer;
-            }
-            return null;
+            return Utils.find(Main.getLayerManager().getLayers(), OsmDataLayer.class);
         }
 
         protected OsmDataLayer createNewLayer(String layerName) {
diff --git a/src/org/openstreetmap/josm/actions/downloadtasks/DownloadTaskList.java b/src/org/openstreetmap/josm/actions/downloadtasks/DownloadTaskList.java
index 4bcb3c9..42a7fd1 100644
--- a/src/org/openstreetmap/josm/actions/downloadtasks/DownloadTaskList.java
+++ b/src/org/openstreetmap/josm/actions/downloadtasks/DownloadTaskList.java
@@ -72,7 +72,7 @@ public class DownloadTaskList {
         if (newLayer) {
             Layer l = new OsmDataLayer(new DataSet(), OsmDataLayer.createNewName(), null);
             Main.main.addLayer(l);
-            Main.map.mapView.setActiveLayer(l);
+            Main.getLayerManager().setActiveLayer(l);
         }
 
         int n = (osmData && gpxData ? 2 : 1)*rects.size();
