Index: applications/editors/josm/plugins/measurement/src/org/openstreetmap/josm/plugins/measurement/MeasurementDialog.java
===================================================================
--- applications/editors/josm/plugins/measurement/src/org/openstreetmap/josm/plugins/measurement/MeasurementDialog.java	(revision 32324)
+++ applications/editors/josm/plugins/measurement/src/org/openstreetmap/josm/plugins/measurement/MeasurementDialog.java	(revision 32454)
@@ -241,5 +241,5 @@
         });
 
-        DataSet currentDs = Main.main.getCurrentDataSet();
+        DataSet currentDs = Main.getLayerManager().getEditDataSet();
 
         if (ds != currentDs) {
@@ -280,5 +280,5 @@
         // Refresh selection if a node belonging to a selected member has moved (example: scale action)
         if ((nodes != null && nodes.contains(n)) || waysContain(n)) {
-            selectionChanged(Main.main.getCurrentDataSet().getSelected());
+            selectionChanged(Main.getLayerManager().getEditDataSet().getSelected());
         }
     }
@@ -295,5 +295,5 @@
     public void systemOfMeasurementChanged(String oldSoM, String newSoM) {
         // Refresh selection to take into account new system of measurement
-        DataSet currentDs = Main.main.getCurrentDataSet();
+        DataSet currentDs = Main.getLayerManager().getEditDataSet();
         if (currentDs != null) {
             selectionChanged(currentDs.getSelected());
Index: applications/editors/josm/plugins/measurement/src/org/openstreetmap/josm/plugins/measurement/MeasurementPlugin.java
===================================================================
--- applications/editors/josm/plugins/measurement/src/org/openstreetmap/josm/plugins/measurement/MeasurementPlugin.java	(revision 32324)
+++ applications/editors/josm/plugins/measurement/src/org/openstreetmap/josm/plugins/measurement/MeasurementPlugin.java	(revision 32454)
@@ -7,7 +7,11 @@
 import org.openstreetmap.josm.gui.IconToggleButton;
 import org.openstreetmap.josm.gui.MapFrame;
-import org.openstreetmap.josm.gui.MapView;
-import org.openstreetmap.josm.gui.MapView.LayerChangeListener;
 import org.openstreetmap.josm.gui.layer.Layer;
+import org.openstreetmap.josm.gui.layer.LayerManager.LayerAddEvent;
+import org.openstreetmap.josm.gui.layer.LayerManager.LayerChangeListener;
+import org.openstreetmap.josm.gui.layer.LayerManager.LayerOrderChangeEvent;
+import org.openstreetmap.josm.gui.layer.LayerManager.LayerRemoveEvent;
+import org.openstreetmap.josm.gui.layer.MainLayerManager.ActiveLayerChangeEvent;
+import org.openstreetmap.josm.gui.layer.MainLayerManager.ActiveLayerChangeListener;
 import org.openstreetmap.josm.plugins.Plugin;
 import org.openstreetmap.josm.plugins.PluginInformation;
@@ -42,15 +46,32 @@
         if (currentLayer == null) {
             currentLayer = new MeasurementLayer(tr("Measurements"));
-            Main.main.addLayer(currentLayer);
-            MapView.addLayerChangeListener(new LayerChangeListener(){
-                public void activeLayerChange(final Layer oldLayer, final Layer newLayer) {
-                    if(newLayer instanceof MeasurementLayer)
+            Main.getLayerManager().addLayer(currentLayer);
+            final ActiveLayerChangeListener activeListener = new ActiveLayerChangeListener() {
+                @Override
+                public void activeOrEditLayerChanged(ActiveLayerChangeEvent e) {
+                    Layer newLayer = Main.getLayerManager().getActiveLayer();
+                    if (newLayer instanceof MeasurementLayer)
                         MeasurementPlugin.currentLayer = (MeasurementLayer)newLayer;
                 }
-                public void layerAdded(final Layer newLayer) {
+            };
+            Main.getLayerManager().addActiveLayerChangeListener(activeListener);
+            Main.getLayerManager().addLayerChangeListener(new LayerChangeListener(){
+                @Override
+                public void layerAdded(LayerAddEvent e) {
+                    // Do nothing
                 }
-                public void layerRemoved(final Layer oldLayer) {
-                    if (oldLayer != null && oldLayer == currentLayer)
-                        MapView.removeLayerChangeListener(this);
+
+                @Override
+                public void layerRemoving(LayerRemoveEvent e) {
+                    Layer oldLayer = e.getRemovedLayer();
+                    if (oldLayer != null && oldLayer == currentLayer) {
+                        Main.getLayerManager().removeActiveLayerChangeListener(activeListener);
+                        Main.getLayerManager().removeLayerChangeListener(this);
+                    }
+                }
+
+                @Override
+                public void layerOrderChanged(LayerOrderChangeEvent e) {
+                    // Do nothing
                 }
             });
