Index: /trunk/src/org/openstreetmap/josm/data/AutosaveTask.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/AutosaveTask.java	(revision 11904)
+++ /trunk/src/org/openstreetmap/josm/data/AutosaveTask.java	(revision 11905)
@@ -133,5 +133,5 @@
 
             new Timer(true).schedule(this, TimeUnit.SECONDS.toMillis(1), TimeUnit.SECONDS.toMillis(PROP_INTERVAL.get()));
-            Main.getLayerManager().addLayerChangeListener(this, true);
+            Main.getLayerManager().addAndFireLayerChangeListener(this);
         }
     }
Index: /trunk/src/org/openstreetmap/josm/gui/MainFrame.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/MainFrame.java	(revision 11904)
+++ /trunk/src/org/openstreetmap/josm/gui/MainFrame.java	(revision 11905)
@@ -94,5 +94,5 @@
         // This listener is never removed, since the main frame exists forever.
         Main.getLayerManager().addActiveLayerChangeListener(e -> refreshTitle());
-        Main.getLayerManager().addLayerChangeListener(new ManageLayerListeners(), true);
+        Main.getLayerManager().addAndFireLayerChangeListener(new ManageLayerListeners());
 
         refreshTitle();
Index: /trunk/src/org/openstreetmap/josm/gui/MapView.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/MapView.java	(revision 11904)
+++ /trunk/src/org/openstreetmap/josm/gui/MapView.java	(revision 11905)
@@ -255,5 +255,5 @@
         this.layerManager = layerManager;
         initialViewport = viewportData;
-        layerManager.addLayerChangeListener(this, true);
+        layerManager.addAndFireLayerChangeListener(this);
         layerManager.addActiveLayerChangeListener(this);
         Main.pref.addPreferenceChangeListener(this);
@@ -746,5 +746,5 @@
      */
     public void destroy() {
-        layerManager.removeLayerChangeListener(this, true);
+        layerManager.removeAndFireLayerChangeListener(this);
         layerManager.removeActiveLayerChangeListener(this);
         Main.pref.removePreferenceChangeListener(this);
Index: /trunk/src/org/openstreetmap/josm/gui/dialogs/LayerListDialog.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/dialogs/LayerListDialog.java	(revision 11904)
+++ /trunk/src/org/openstreetmap/josm/gui/dialogs/LayerListDialog.java	(revision 11905)
@@ -323,5 +323,5 @@
     public void showNotify() {
         layerManager.addActiveLayerChangeListener(activateLayerAction);
-        layerManager.addLayerChangeListener(model, true);
+        layerManager.addAndFireLayerChangeListener(model);
         layerManager.addAndFireActiveLayerChangeListener(model);
         model.populate();
@@ -330,5 +330,5 @@
     @Override
     public void hideNotify() {
-        layerManager.removeLayerChangeListener(model, true);
+        layerManager.removeAndFireLayerChangeListener(model);
         layerManager.removeActiveLayerChangeListener(model);
         layerManager.removeActiveLayerChangeListener(activateLayerAction);
Index: /trunk/src/org/openstreetmap/josm/gui/layer/LayerManager.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/layer/LayerManager.java	(revision 11904)
+++ /trunk/src/org/openstreetmap/josm/gui/layer/LayerManager.java	(revision 11905)
@@ -64,4 +64,7 @@
     }
 
+    /**
+     * Base class of layer manager events.
+     */
     protected static class LayerManagerEvent {
         private final LayerManager source;
@@ -215,4 +218,9 @@
     }
 
+    /**
+     * Add a layer (implementation).
+     * @param layer The layer to add
+     * @param initialZoom whether if the mapview must be zoomed at layer projection bounds
+     */
     protected synchronized void realAddLayer(Layer layer, boolean initialZoom) {
         if (containsLayer(layer)) {
@@ -240,4 +248,8 @@
     }
 
+    /**
+     * Remove the layer from the mapview (implementation).
+     * @param layer The layer to remove
+     */
     protected synchronized void realRemoveLayer(Layer layer) {
         GuiHelper.assertCallFromEdt();
@@ -256,4 +268,9 @@
     }
 
+    /**
+     * Remove a single layer from the mapview (implementation).
+     * @param layerToRemove The layer to remove
+     * @return A list of layers that should be removed afterwards.
+     */
     protected Collection<Layer> realRemoveSingleLayer(Layer layerToRemove) {
         updateLayers(mutableLayers -> mutableLayers.remove(layerToRemove));
@@ -273,4 +290,10 @@
     }
 
+    /**
+     * Move a layer to a new position (implementation).
+     * @param layer The layer to move.
+     * @param position The position.
+     * @throws IndexOutOfBoundsException if the position is out of bounds.
+     */
     protected synchronized void realMoveLayer(Layer layer, int position) {
         checkContainsLayer(layer);
@@ -360,4 +383,9 @@
     }
 
+    /**
+     * Checks if the specified layer is handled by this layer manager.
+     * @param layer layer to check
+     * @throws IllegalArgumentException if layer is not handled by this layer manager
+     */
     protected void checkContainsLayer(Layer layer) {
         if (!containsLayer(layer)) {
@@ -371,25 +399,25 @@
      * @param listener the listener.
      * @throws IllegalArgumentException If the listener was added twice.
+     * @see #addAndFireLayerChangeListener
      */
     public synchronized void addLayerChangeListener(LayerChangeListener listener) {
-        addLayerChangeListener(listener, false);
-    }
-
-    /**
-     * Adds a layer change listener
-     *
-     * @param listener the listener.
-     * @param fireAdd if we should fire an add event for every layer in this manager.
-     * @throws IllegalArgumentException If the listener was added twice.
-     */
-    public synchronized void addLayerChangeListener(LayerChangeListener listener, boolean fireAdd) {
         if (layerChangeListeners.contains(listener)) {
             throw new IllegalArgumentException("Listener already registered.");
         }
         layerChangeListeners.add(listener);
-        if (fireAdd) {
-            for (Layer l : getLayers()) {
-                listener.layerAdded(new LayerAddEvent(this, l, true));
-            }
+    }
+
+    /**
+     * Adds a layer change listener and fire an add event for every layer in this manager.
+     *
+     * @param listener the listener.
+     * @throws IllegalArgumentException If the listener was added twice.
+     * @see #addLayerChangeListener
+     * @since 11905
+     */
+    public synchronized void addAndFireLayerChangeListener(LayerChangeListener listener) {
+        addLayerChangeListener(listener);
+        for (Layer l : getLayers()) {
+            listener.layerAdded(new LayerAddEvent(this, l, true));
         }
     }
@@ -399,25 +427,25 @@
      *
      * @param listener the listener. Ignored if null or already registered.
+     * @see #removeAndFireLayerChangeListener
      */
     public synchronized void removeLayerChangeListener(LayerChangeListener listener) {
-        removeLayerChangeListener(listener, false);
-    }
-
-    /**
-     * Removes a layer change listener
-     *
-     * @param listener the listener.
-     * @param fireRemove if we should fire a remove event for every layer in this manager. The event is fired as if the layer was deleted but
-     * {@link LayerRemoveEvent#scheduleRemoval(Collection)} is ignored.
-     */
-    public synchronized void removeLayerChangeListener(LayerChangeListener listener, boolean fireRemove) {
         if (!layerChangeListeners.remove(listener)) {
             throw new IllegalArgumentException("Listener was not registered before: " + listener);
-        } else {
-            if (fireRemove) {
-                for (Layer l : getLayers()) {
-                    listener.layerRemoving(new LayerRemoveEvent(this, l));
-                }
-            }
+        }
+    }
+
+    /**
+     * Removes a layer change listener and fire a remove event for every layer in this manager.
+     * The event is fired as if the layer was deleted but
+     * {@link LayerRemoveEvent#scheduleRemoval(Collection)} is ignored.
+     *
+     * @param listener the listener.
+     * @see #removeLayerChangeListener
+     * @since 11905
+     */
+    public synchronized void removeAndFireLayerChangeListener(LayerChangeListener listener) {
+        removeLayerChangeListener(listener);
+        for (Layer l : getLayers()) {
+            listener.layerRemoving(new LayerRemoveEvent(this, l));
         }
     }
@@ -475,4 +503,7 @@
     }
 
+    /**
+     * Reset all layer manager state (implementation).
+     */
     protected synchronized void realResetState() {
         // The listeners trigger the removal of other layers
Index: /trunk/test/unit/org/openstreetmap/josm/gui/layer/LayerManagerTest.java
===================================================================
--- /trunk/test/unit/org/openstreetmap/josm/gui/layer/LayerManagerTest.java	(revision 11904)
+++ /trunk/test/unit/org/openstreetmap/josm/gui/layer/LayerManagerTest.java	(revision 11905)
@@ -159,4 +159,5 @@
     }
 
+    /** the tested layer manager */
     protected LayerManager layerManager;
 
@@ -397,5 +398,5 @@
 
     /**
-     * {@link LayerManager#addLayerChangeListener(LayerChangeListener, boolean)} fires fake add events
+     * {@link LayerManager#addAndFireLayerChangeListener(LayerChangeListener)} fires fake add events
      */
     @Test
@@ -406,5 +407,5 @@
         layerManager.addLayer(layer1);
         layerManager.addLayer(layer2);
-        layerManager.addLayerChangeListener(new LayerChangeListener() {
+        layerManager.addAndFireLayerChangeListener(new LayerChangeListener() {
             @Override
             public void layerRemoving(LayerRemoveEvent e) {
@@ -421,5 +422,5 @@
                 fired.add(e.getAddedLayer());
             }
-        }, true);
+        });
 
         assertEquals(Arrays.asList(layer1, layer2), fired);
@@ -452,5 +453,5 @@
 
     /**
-     * {@link LayerManager#removeLayerChangeListener(LayerChangeListener, boolean)} fires fake remove events
+     * {@link LayerManager#removeAndFireLayerChangeListener(LayerChangeListener)} fires fake remove events
      */
     @Test
@@ -477,6 +478,6 @@
             }
         };
-        layerManager.addLayerChangeListener(listener, false);
-        layerManager.removeLayerChangeListener(listener, true);
+        layerManager.addLayerChangeListener(listener);
+        layerManager.removeAndFireLayerChangeListener(listener);
 
         assertEquals(Arrays.asList(layer1, layer2), fired);
