Index: /trunk/test/unit/org/openstreetmap/josm/gui/layer/LayerManagerTest.java
===================================================================
--- /trunk/test/unit/org/openstreetmap/josm/gui/layer/LayerManagerTest.java	(revision 10999)
+++ /trunk/test/unit/org/openstreetmap/josm/gui/layer/LayerManagerTest.java	(revision 11000)
@@ -17,4 +17,5 @@
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collections;
 
 import javax.swing.Action;
@@ -41,5 +42,4 @@
  */
 public class LayerManagerTest {
-
     /**
      * This is a layer that can be used in tests. It does not do anything and provides a simple, fake implementation.
@@ -120,7 +120,7 @@
      */
     protected class CapturingLayerChangeListener implements LayerChangeListener {
-        private LayerAddEvent layerAdded;
-        private LayerRemoveEvent layerRemoved;
-        private LayerOrderChangeEvent layerOrderChanged;
+        protected LayerAddEvent layerAdded;
+        protected LayerRemoveEvent layerRemoved;
+        protected LayerOrderChangeEvent layerOrderChanged;
 
         @Override
@@ -149,4 +149,14 @@
     }
 
+    private final class ResetStateChangeListener extends CapturingLayerChangeListener {
+        int removed = 0;
+
+        @Override
+        public void layerRemoving(LayerRemoveEvent e) {
+            // count only
+            removed++;
+        }
+    }
+
     protected LayerManager layerManager;
 
@@ -473,3 +483,57 @@
     }
 
+    /**
+     * Test {@link LayerRemoveEvent#scheduleRemoval(java.util.Collection)}
+     */
+    @Test
+    public void testLayerRemoveScheduleRemoval() {
+        TestLayer layer1 = new TestLayer();
+        TestLayer layer2 = new TestLayer();
+        layerManager.addLayer(layer1);
+        layerManager.addLayer(layer2);
+
+        layerManager.addLayerChangeListener(new LayerChangeListener() {
+            @Override
+            public void layerRemoving(LayerRemoveEvent e) {
+                    if (e.getRemovedLayer() == layer1) {
+                        e.scheduleRemoval(Collections.singleton(layer2));
+                    }
+            }
+
+            @Override
+            public void layerOrderChanged(LayerOrderChangeEvent e) {
+                fail();
+            }
+
+            @Override
+            public void layerAdded(LayerAddEvent e) {
+                fail();
+            }
+        });
+
+        layerManager.removeLayer(layer1);
+        assertEquals(0, layerManager.getLayers().size());
+    }
+
+    /**
+     * Test {@link LayerManager#resetState()}
+     */
+    @Test
+    public void testResetState() {
+        ResetStateChangeListener changeListener = new ResetStateChangeListener();
+        layerManager.addLayer(new TestLayer());
+        layerManager.addLayerChangeListener(changeListener);
+        layerManager.addLayer(new TestLayer());
+        assertEquals(2, layerManager.getLayers().size());
+        assertNotNull(changeListener.layerAdded);
+
+        layerManager.resetState();
+        changeListener.layerAdded = null;
+
+        assertEquals(2, changeListener.removed);
+        assertEquals(0, layerManager.getLayers().size());
+        layerManager.addLayer(new TestLayer());
+        assertNull(changeListener.layerAdded);
+    }
+
 }
