diff --git src/org/openstreetmap/josm/gui/MapView.java src/org/openstreetmap/josm/gui/MapView.java
index bbe824a..eff7bb6 100644
--- src/org/openstreetmap/josm/gui/MapView.java
+++ src/org/openstreetmap/josm/gui/MapView.java
@@ -416,15 +416,17 @@ implements PropertyChangeListener, PreferenceChangedListener, OsmDataLayer.Layer
                 listenersToFire.addAll(setActiveLayer(layer, true));
             }
 
-            fireLayerAdded(layer);
             if (isOsmDataLayer) {
                 ((OsmDataLayer) layer).addLayerStateChangeListener(this);
             }
-            onActiveEditLayerChanged(oldActiveLayer, oldEditLayer, listenersToFire);
+
             layer.addPropertyChangeListener(this);
             Main.addProjectionChangeListener(layer);
             AudioPlayer.reset();
         }
+        fireLayerAdded(layer);
+        onActiveEditLayerChanged(oldActiveLayer, oldEditLayer, listenersToFire);
+
         if (!listenersToFire.isEmpty()) {
             repaint();
         }
@@ -517,13 +519,13 @@ implements PropertyChangeListener, PreferenceChangedListener, OsmDataLayer.Layer
 
             layers.remove(layer);
             Main.removeProjectionChangeListener(layer);
-
-            onActiveEditLayerChanged(oldActiveLayer, oldEditLayer, listenersToFire);
-            fireLayerRemoved(layer);
             layer.removePropertyChangeListener(this);
             layer.destroy();
             AudioPlayer.reset();
         }
+        onActiveEditLayerChanged(oldActiveLayer, oldEditLayer, listenersToFire);
+        fireLayerRemoved(layer);
+
         repaint();
     }
 
@@ -575,9 +577,10 @@ implements PropertyChangeListener, PreferenceChangedListener, OsmDataLayer.Layer
                 layers.add(pos, layer);
             }
             listenersToFire = setEditLayer(layers);
-            onActiveEditLayerChanged(oldActiveLayer, oldEditLayer, listenersToFire);
             AudioPlayer.reset();
         }
+        onActiveEditLayerChanged(oldActiveLayer, oldEditLayer, listenersToFire);
+
         repaint();
     }
 
@@ -921,13 +924,16 @@ implements PropertyChangeListener, PreferenceChangedListener, OsmDataLayer.Layer
      */
     public void setActiveLayer(Layer layer) {
         EnumSet<LayerListenerType> listenersToFire;
+        Layer oldActiveLayer;
+        OsmDataLayer oldEditLayer;
 
         synchronized (layers) {
-            Layer oldActiveLayer = activeLayer;
-            OsmDataLayer oldEditLayer = editLayer;
+            oldActiveLayer = activeLayer;
+            oldEditLayer = editLayer;
             listenersToFire = setActiveLayer(layer, true);
-            onActiveEditLayerChanged(oldActiveLayer, oldEditLayer, listenersToFire);
         }
+        onActiveEditLayerChanged(oldActiveLayer, oldEditLayer, listenersToFire);
+
         repaint();
     }
 
