Index: /trunk/src/org/openstreetmap/josm/gui/MapView.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/MapView.java	(revision 8645)
+++ /trunk/src/org/openstreetmap/josm/gui/MapView.java	(revision 8646)
@@ -417,13 +417,15 @@
             }
 
-            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();
@@ -518,11 +520,11 @@
             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();
     }
@@ -576,7 +578,8 @@
             }
             listenersToFire = setEditLayer(layers);
-            onActiveEditLayerChanged(oldActiveLayer, oldEditLayer, listenersToFire);
             AudioPlayer.reset();
         }
+        onActiveEditLayerChanged(oldActiveLayer, oldEditLayer, listenersToFire);
+
         repaint();
     }
@@ -922,11 +925,14 @@
     public void setActiveLayer(Layer layer) {
         EnumSet<LayerListenerType> listenersToFire;
-
-        synchronized (layers) {
-            Layer oldActiveLayer = activeLayer;
-            OsmDataLayer oldEditLayer = editLayer;
+        Layer oldActiveLayer;
+        OsmDataLayer oldEditLayer;
+
+        synchronized (layers) {
+            oldActiveLayer = activeLayer;
+            oldEditLayer = editLayer;
             listenersToFire = setActiveLayer(layer, true);
-            onActiveEditLayerChanged(oldActiveLayer, oldEditLayer, listenersToFire);
-        }
+        }
+        onActiveEditLayerChanged(oldActiveLayer, oldEditLayer, listenersToFire);
+
         repaint();
     }
