Index: trunk/src/org/openstreetmap/josm/Main.java
===================================================================
--- trunk/src/org/openstreetmap/josm/Main.java	(revision 10278)
+++ trunk/src/org/openstreetmap/josm/Main.java	(revision 10279)
@@ -92,5 +92,5 @@
 import org.openstreetmap.josm.gui.layer.AbstractModifiableLayer;
 import org.openstreetmap.josm.gui.layer.Layer;
-import org.openstreetmap.josm.gui.layer.LayerManagerWithActive;
+import org.openstreetmap.josm.gui.layer.MainLayerManager;
 import org.openstreetmap.josm.gui.layer.OsmDataLayer;
 import org.openstreetmap.josm.gui.layer.OsmDataLayer.CommandQueueListener;
@@ -199,5 +199,5 @@
      * @since 10271
      */
-    private static final LayerManagerWithActive layerManager = new LayerManagerWithActive();
+    private static final MainLayerManager layerManager = new MainLayerManager();
 
     /**
@@ -740,7 +740,7 @@
      * Returns the main layer manager that is used by the map view.
      * @return The layer manager. The value returned will never change.
-     * @since 10271
-     */
-    public static LayerManagerWithActive getLayerManager() {
+     * @since 10279
+     */
+    public static MainLayerManager getLayerManager() {
         return layerManager;
     }
Index: trunk/src/org/openstreetmap/josm/gui/MapView.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/MapView.java	(revision 10278)
+++ trunk/src/org/openstreetmap/josm/gui/MapView.java	(revision 10279)
@@ -61,7 +61,7 @@
 import org.openstreetmap.josm.gui.layer.LayerManager.LayerOrderChangeEvent;
 import org.openstreetmap.josm.gui.layer.LayerManager.LayerRemoveEvent;
-import org.openstreetmap.josm.gui.layer.LayerManagerWithActive;
-import org.openstreetmap.josm.gui.layer.LayerManagerWithActive.ActiveLayerChangeEvent;
-import org.openstreetmap.josm.gui.layer.LayerManagerWithActive.ActiveLayerChangeListener;
+import org.openstreetmap.josm.gui.layer.MainLayerManager;
+import org.openstreetmap.josm.gui.layer.MainLayerManager.ActiveLayerChangeEvent;
+import org.openstreetmap.josm.gui.layer.MainLayerManager.ActiveLayerChangeListener;
 import org.openstreetmap.josm.gui.layer.MapViewPaintable;
 import org.openstreetmap.josm.gui.layer.MapViewPaintable.PaintableInvalidationEvent;
@@ -91,5 +91,5 @@
 public class MapView extends NavigatableComponent
 implements PropertyChangeListener, PreferenceChangedListener, OsmDataLayer.LayerStateChangeListener,
-LayerManager.LayerChangeListener, LayerManagerWithActive.ActiveLayerChangeListener {
+LayerManager.LayerChangeListener, MainLayerManager.ActiveLayerChangeListener {
     /**
      * Interface to notify listeners of a layer change.
@@ -265,5 +265,5 @@
      * This class is an adapter for the old layer change interface.
      * <p>
-     * New implementations should use {@link org.openstreetmap.josm.gui.layer.LayerManagerWithActive.ActiveLayerChangeListener}
+     * New implementations should use {@link org.openstreetmap.josm.gui.layer.MainLayerManager.ActiveLayerChangeListener}
      * @author Michael Zangl
      * @since 10271
@@ -438,5 +438,5 @@
      * A list of all layers currently loaded. If we support multiple map views, this list may be different for each of them.
      */
-    private final LayerManagerWithActive layerManager;
+    private final MainLayerManager layerManager;
 
     /**
@@ -479,6 +479,7 @@
      * @param viewportData the initial viewport of the map. Can be null, then
      * the viewport is derived from the layer data.
-     */
-    public MapView(LayerManagerWithActive layerManager, final JPanel contentPane, final ViewportData viewportData) {
+     * @since 10279
+     */
+    public MapView(MainLayerManager layerManager, final JPanel contentPane, final ViewportData viewportData) {
         this.layerManager = layerManager;
         initialViewport = viewportData;
@@ -632,5 +633,5 @@
      *
      * @return the next active data layer
-     * @deprecated now handled by {@link LayerManagerWithActive}
+     * @deprecated now handled by {@link MainLayerManager}
      */
     @Deprecated
Index: trunk/src/org/openstreetmap/josm/gui/layer/LayerManagerWithActive.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/layer/LayerManagerWithActive.java	(revision 10278)
+++ 	(revision )
@@ -1,282 +1,0 @@
-// License: GPL. For details, see LICENSE file.
-package org.openstreetmap.josm.gui.layer;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.ListIterator;
-import java.util.concurrent.CopyOnWriteArrayList;
-
-import org.openstreetmap.josm.data.osm.DataSet;
-import org.openstreetmap.josm.gui.util.GuiHelper;
-
-/**
- * This class extends the layer manager by adding an active and an edit layer.
- * <p>
- * The active layer is the layer the user is currently working on.
- * <p>
- * The edit layer is an data layer that we currently work with.
- * @author Michael Zangl
- * @since 10271
- */
-public class LayerManagerWithActive extends LayerManager {
-    /**
-     * This listener listens to changes of the active or the edit layer.
-     * @author Michael Zangl
-     *
-     */
-    public interface ActiveLayerChangeListener {
-        /**
-         * Called whenever the active or edit layer changed.
-         * <p>
-         * You can be sure that this layer is still contained in this set.
-         * <p>
-         * Listeners are called in the EDT thread and you can manipulate the layer manager in the current thread.
-         * @param e The change event.
-         */
-        void activeOrEditLayerChanged(ActiveLayerChangeEvent e);
-    }
-
-    /**
-     * This event is fired whenever the active or the edit layer changes.
-     * @author Michael Zangl
-     */
-    public class ActiveLayerChangeEvent extends LayerManagerEvent {
-
-        private final OsmDataLayer previousEditLayer;
-
-        private final Layer previousActiveLayer;
-
-        /**
-         * Create a new {@link ActiveLayerChangeEvent}
-         * @param source The source
-         * @param previousEditLayer the previous edit layer
-         * @param previousActiveLayer the previous active layer
-         */
-        ActiveLayerChangeEvent(LayerManagerWithActive source, OsmDataLayer previousEditLayer,
-                Layer previousActiveLayer) {
-            super(source);
-            this.previousEditLayer = previousEditLayer;
-            this.previousActiveLayer = previousActiveLayer;
-        }
-
-        /**
-         * Gets the edit layer that was previously used.
-         * @return The old edit layer, <code>null</code> if there is none.
-         */
-        public OsmDataLayer getPreviousEditLayer() {
-            return previousEditLayer;
-        }
-
-        /**
-         * Gets the active layer that was previously used.
-         * @return The old active layer, <code>null</code> if there is none.
-         */
-        public Layer getPreviousActiveLayer() {
-            return previousActiveLayer;
-        }
-
-        @Override
-        public LayerManagerWithActive getSource() {
-            return (LayerManagerWithActive) super.getSource();
-        }
-    }
-
-    /**
-     * The layer from the layers list that is currently active.
-     */
-    private Layer activeLayer;
-
-    /**
-     * The edit layer is the current active data layer.
-     */
-    private OsmDataLayer editLayer;
-
-    private final List<ActiveLayerChangeListener> activeLayerChangeListeners = new CopyOnWriteArrayList<>();
-
-    /**
-     * Adds a active/edit layer change listener
-     *
-     * @param listener the listener.
-     * @param initialFire fire a fake active-layer-changed-event right after adding
-     * the listener. The previous layers will be null. The listener is notified in the current thread.
-     */
-    public synchronized void addActiveLayerChangeListener(ActiveLayerChangeListener listener, boolean initialFire) {
-        if (activeLayerChangeListeners.contains(listener)) {
-            throw new IllegalArgumentException("Attempted to add listener that was already in list: " + listener);
-        }
-        activeLayerChangeListeners.add(listener);
-        if (initialFire) {
-            listener.activeOrEditLayerChanged(new ActiveLayerChangeEvent(this, null, null));
-        }
-    }
-
-    /**
-     * Removes an active/edit layer change listener.
-     * @param listener the listener.
-     */
-    public synchronized void removeActiveLayerChangeListener(ActiveLayerChangeListener listener) {
-        if (!activeLayerChangeListeners.contains(listener)) {
-            throw new IllegalArgumentException("Attempted to remove listener that was not in list: " + listener);
-        }
-        activeLayerChangeListeners.remove(listener);
-    }
-
-    /**
-     * Set the active layer. If the layer is an OsmDataLayer, the edit layer is also changed.
-     * @param layer The active layer.
-     */
-    public void setActiveLayer(final Layer layer) {
-        // we force this on to the EDT Thread to make events fire from there.
-        // The synchronization lock needs to be held by the EDT.
-        GuiHelper.runInEDTAndWaitWithException(new Runnable() {
-            @Override
-            public void run() {
-                realSetActiveLayer(layer);
-            }
-        });
-    }
-
-    protected synchronized void realSetActiveLayer(final Layer layer) {
-        // to be called in EDT thread
-        checkContainsLayer(layer);
-        setActiveLayer(layer, false);
-    }
-
-    private void setActiveLayer(Layer layer, boolean forceEditLayerUpdate) {
-        ActiveLayerChangeEvent event = new ActiveLayerChangeEvent(this, editLayer, activeLayer);
-        activeLayer = layer;
-        if (activeLayer instanceof OsmDataLayer) {
-            editLayer = (OsmDataLayer) activeLayer;
-        } else if (forceEditLayerUpdate) {
-            editLayer = null;
-        }
-        fireActiveLayerChange(event);
-    }
-
-    private void fireActiveLayerChange(ActiveLayerChangeEvent event) {
-        GuiHelper.assertCallFromEdt();
-        if (event.getPreviousActiveLayer() != activeLayer || event.getPreviousEditLayer() != editLayer) {
-            for (ActiveLayerChangeListener l : activeLayerChangeListeners) {
-                l.activeOrEditLayerChanged(event);
-            }
-        }
-    }
-
-    @Override
-    protected synchronized void realAddLayer(Layer layer) {
-        super.realAddLayer(layer);
-
-        // update the active layer automatically.
-        if (layer instanceof OsmDataLayer || activeLayer == null) {
-            setActiveLayer(layer);
-        }
-    }
-
-    @Override
-    protected synchronized void realRemoveLayer(Layer layer) {
-        if (layer == activeLayer || layer == editLayer) {
-            Layer nextActive = suggestNextActiveLayer(layer);
-            setActiveLayer(nextActive, true);
-        }
-
-        super.realRemoveLayer(layer);
-    }
-
-    /**
-     * Determines the next active data layer according to the following
-     * rules:
-     * <ul>
-     *   <li>if there is at least one {@link OsmDataLayer} the first one
-     *     becomes active</li>
-     *   <li>otherwise, the top most layer of any type becomes active</li>
-     * </ul>
-     *
-     * @param except A layer to ignore.
-     * @return the next active data layer
-     */
-    private Layer suggestNextActiveLayer(Layer except) {
-        List<Layer> layersList = new ArrayList<>(getLayers());
-        layersList.remove(except);
-        // First look for data layer
-        for (Layer layer : layersList) {
-            if (layer instanceof OsmDataLayer) {
-                return layer;
-            }
-        }
-
-        // Then any layer
-        if (!layersList.isEmpty())
-            return layersList.get(0);
-
-        // and then give up
-        return null;
-    }
-
-    /**
-     * Replies the currently active layer
-     *
-     * @return the currently active layer (may be null)
-     */
-    public synchronized Layer getActiveLayer() {
-        return activeLayer;
-    }
-
-    /**
-     * Replies the current edit layer, if any
-     *
-     * @return the current edit layer. May be null.
-     */
-    public synchronized OsmDataLayer getEditLayer() {
-        return editLayer;
-    }
-
-    /**
-     * Gets the data set of the active edit layer.
-     * @return That data set, <code>null</code> if there is no edit layer.
-     */
-    public synchronized DataSet getEditDataSet() {
-        if (editLayer != null) {
-            return editLayer.data;
-        } else {
-            return null;
-        }
-    }
-
-
-    /**
-     * Creates a list of the visible layers in Z-Order, the layer with the lowest Z-Order
-     * first, layer with the highest Z-Order last.
-     * <p>
-     * The active data layer is pulled above all adjacent data layers.
-     *
-     * @return a list of the visible in Z-Order, the layer with the lowest Z-Order
-     * first, layer with the highest Z-Order last.
-     */
-    public synchronized List<Layer> getVisibleLayersInZOrder() {
-        List<Layer> ret = new ArrayList<>();
-        // This is set while we delay the addition of the active layer.
-        boolean activeLayerDelayed = false;
-        List<Layer> layers = getLayers();
-        for (ListIterator<Layer> iterator = layers.listIterator(layers.size()); iterator.hasPrevious();) {
-            Layer l = iterator.previous();
-            if (!l.isVisible()) {
-                // ignored
-            } else if (l == activeLayer && l instanceof OsmDataLayer) {
-                // delay and add after the current block of OsmDataLayer
-                activeLayerDelayed = true;
-            } else {
-                if (activeLayerDelayed && !(l instanceof OsmDataLayer)) {
-                    // add active layer before the current one.
-                    ret.add(activeLayer);
-                    activeLayerDelayed = false;
-                }
-                // Add this layer now
-                ret.add(l);
-            }
-        }
-        if (activeLayerDelayed) {
-            ret.add(activeLayer);
-        }
-        return ret;
-    }
-}
Index: trunk/src/org/openstreetmap/josm/gui/layer/MainLayerManager.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/layer/MainLayerManager.java	(revision 10279)
+++ trunk/src/org/openstreetmap/josm/gui/layer/MainLayerManager.java	(revision 10279)
@@ -0,0 +1,282 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.gui.layer;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.ListIterator;
+import java.util.concurrent.CopyOnWriteArrayList;
+
+import org.openstreetmap.josm.data.osm.DataSet;
+import org.openstreetmap.josm.gui.util.GuiHelper;
+
+/**
+ * This class extends the layer manager by adding an active and an edit layer.
+ * <p>
+ * The active layer is the layer the user is currently working on.
+ * <p>
+ * The edit layer is an data layer that we currently work with.
+ * @author Michael Zangl
+ * @since 10279
+ */
+public class MainLayerManager extends LayerManager {
+    /**
+     * This listener listens to changes of the active or the edit layer.
+     * @author Michael Zangl
+     *
+     */
+    public interface ActiveLayerChangeListener {
+        /**
+         * Called whenever the active or edit layer changed.
+         * <p>
+         * You can be sure that this layer is still contained in this set.
+         * <p>
+         * Listeners are called in the EDT thread and you can manipulate the layer manager in the current thread.
+         * @param e The change event.
+         */
+        void activeOrEditLayerChanged(ActiveLayerChangeEvent e);
+    }
+
+    /**
+     * This event is fired whenever the active or the edit layer changes.
+     * @author Michael Zangl
+     */
+    public class ActiveLayerChangeEvent extends LayerManagerEvent {
+
+        private final OsmDataLayer previousEditLayer;
+
+        private final Layer previousActiveLayer;
+
+        /**
+         * Create a new {@link ActiveLayerChangeEvent}
+         * @param source The source
+         * @param previousEditLayer the previous edit layer
+         * @param previousActiveLayer the previous active layer
+         */
+        ActiveLayerChangeEvent(MainLayerManager source, OsmDataLayer previousEditLayer,
+                Layer previousActiveLayer) {
+            super(source);
+            this.previousEditLayer = previousEditLayer;
+            this.previousActiveLayer = previousActiveLayer;
+        }
+
+        /**
+         * Gets the edit layer that was previously used.
+         * @return The old edit layer, <code>null</code> if there is none.
+         */
+        public OsmDataLayer getPreviousEditLayer() {
+            return previousEditLayer;
+        }
+
+        /**
+         * Gets the active layer that was previously used.
+         * @return The old active layer, <code>null</code> if there is none.
+         */
+        public Layer getPreviousActiveLayer() {
+            return previousActiveLayer;
+        }
+
+        @Override
+        public MainLayerManager getSource() {
+            return (MainLayerManager) super.getSource();
+        }
+    }
+
+    /**
+     * The layer from the layers list that is currently active.
+     */
+    private Layer activeLayer;
+
+    /**
+     * The edit layer is the current active data layer.
+     */
+    private OsmDataLayer editLayer;
+
+    private final List<ActiveLayerChangeListener> activeLayerChangeListeners = new CopyOnWriteArrayList<>();
+
+    /**
+     * Adds a active/edit layer change listener
+     *
+     * @param listener the listener.
+     * @param initialFire fire a fake active-layer-changed-event right after adding
+     * the listener. The previous layers will be null. The listener is notified in the current thread.
+     */
+    public synchronized void addActiveLayerChangeListener(ActiveLayerChangeListener listener, boolean initialFire) {
+        if (activeLayerChangeListeners.contains(listener)) {
+            throw new IllegalArgumentException("Attempted to add listener that was already in list: " + listener);
+        }
+        activeLayerChangeListeners.add(listener);
+        if (initialFire) {
+            listener.activeOrEditLayerChanged(new ActiveLayerChangeEvent(this, null, null));
+        }
+    }
+
+    /**
+     * Removes an active/edit layer change listener.
+     * @param listener the listener.
+     */
+    public synchronized void removeActiveLayerChangeListener(ActiveLayerChangeListener listener) {
+        if (!activeLayerChangeListeners.contains(listener)) {
+            throw new IllegalArgumentException("Attempted to remove listener that was not in list: " + listener);
+        }
+        activeLayerChangeListeners.remove(listener);
+    }
+
+    /**
+     * Set the active layer. If the layer is an OsmDataLayer, the edit layer is also changed.
+     * @param layer The active layer.
+     */
+    public void setActiveLayer(final Layer layer) {
+        // we force this on to the EDT Thread to make events fire from there.
+        // The synchronization lock needs to be held by the EDT.
+        GuiHelper.runInEDTAndWaitWithException(new Runnable() {
+            @Override
+            public void run() {
+                realSetActiveLayer(layer);
+            }
+        });
+    }
+
+    protected synchronized void realSetActiveLayer(final Layer layer) {
+        // to be called in EDT thread
+        checkContainsLayer(layer);
+        setActiveLayer(layer, false);
+    }
+
+    private void setActiveLayer(Layer layer, boolean forceEditLayerUpdate) {
+        ActiveLayerChangeEvent event = new ActiveLayerChangeEvent(this, editLayer, activeLayer);
+        activeLayer = layer;
+        if (activeLayer instanceof OsmDataLayer) {
+            editLayer = (OsmDataLayer) activeLayer;
+        } else if (forceEditLayerUpdate) {
+            editLayer = null;
+        }
+        fireActiveLayerChange(event);
+    }
+
+    private void fireActiveLayerChange(ActiveLayerChangeEvent event) {
+        GuiHelper.assertCallFromEdt();
+        if (event.getPreviousActiveLayer() != activeLayer || event.getPreviousEditLayer() != editLayer) {
+            for (ActiveLayerChangeListener l : activeLayerChangeListeners) {
+                l.activeOrEditLayerChanged(event);
+            }
+        }
+    }
+
+    @Override
+    protected synchronized void realAddLayer(Layer layer) {
+        super.realAddLayer(layer);
+
+        // update the active layer automatically.
+        if (layer instanceof OsmDataLayer || activeLayer == null) {
+            setActiveLayer(layer);
+        }
+    }
+
+    @Override
+    protected synchronized void realRemoveLayer(Layer layer) {
+        if (layer == activeLayer || layer == editLayer) {
+            Layer nextActive = suggestNextActiveLayer(layer);
+            setActiveLayer(nextActive, true);
+        }
+
+        super.realRemoveLayer(layer);
+    }
+
+    /**
+     * Determines the next active data layer according to the following
+     * rules:
+     * <ul>
+     *   <li>if there is at least one {@link OsmDataLayer} the first one
+     *     becomes active</li>
+     *   <li>otherwise, the top most layer of any type becomes active</li>
+     * </ul>
+     *
+     * @param except A layer to ignore.
+     * @return the next active data layer
+     */
+    private Layer suggestNextActiveLayer(Layer except) {
+        List<Layer> layersList = new ArrayList<>(getLayers());
+        layersList.remove(except);
+        // First look for data layer
+        for (Layer layer : layersList) {
+            if (layer instanceof OsmDataLayer) {
+                return layer;
+            }
+        }
+
+        // Then any layer
+        if (!layersList.isEmpty())
+            return layersList.get(0);
+
+        // and then give up
+        return null;
+    }
+
+    /**
+     * Replies the currently active layer
+     *
+     * @return the currently active layer (may be null)
+     */
+    public synchronized Layer getActiveLayer() {
+        return activeLayer;
+    }
+
+    /**
+     * Replies the current edit layer, if any
+     *
+     * @return the current edit layer. May be null.
+     */
+    public synchronized OsmDataLayer getEditLayer() {
+        return editLayer;
+    }
+
+    /**
+     * Gets the data set of the active edit layer.
+     * @return That data set, <code>null</code> if there is no edit layer.
+     */
+    public synchronized DataSet getEditDataSet() {
+        if (editLayer != null) {
+            return editLayer.data;
+        } else {
+            return null;
+        }
+    }
+
+
+    /**
+     * Creates a list of the visible layers in Z-Order, the layer with the lowest Z-Order
+     * first, layer with the highest Z-Order last.
+     * <p>
+     * The active data layer is pulled above all adjacent data layers.
+     *
+     * @return a list of the visible in Z-Order, the layer with the lowest Z-Order
+     * first, layer with the highest Z-Order last.
+     */
+    public synchronized List<Layer> getVisibleLayersInZOrder() {
+        List<Layer> ret = new ArrayList<>();
+        // This is set while we delay the addition of the active layer.
+        boolean activeLayerDelayed = false;
+        List<Layer> layers = getLayers();
+        for (ListIterator<Layer> iterator = layers.listIterator(layers.size()); iterator.hasPrevious();) {
+            Layer l = iterator.previous();
+            if (!l.isVisible()) {
+                // ignored
+            } else if (l == activeLayer && l instanceof OsmDataLayer) {
+                // delay and add after the current block of OsmDataLayer
+                activeLayerDelayed = true;
+            } else {
+                if (activeLayerDelayed && !(l instanceof OsmDataLayer)) {
+                    // add active layer before the current one.
+                    ret.add(activeLayer);
+                    activeLayerDelayed = false;
+                }
+                // Add this layer now
+                ret.add(l);
+            }
+        }
+        if (activeLayerDelayed) {
+            ret.add(activeLayer);
+        }
+        return ret;
+    }
+}
Index: trunk/test/unit/org/openstreetmap/josm/gui/layer/LayerManagerWithActiveTest.java
===================================================================
--- trunk/test/unit/org/openstreetmap/josm/gui/layer/LayerManagerWithActiveTest.java	(revision 10278)
+++ 	(revision )
@@ -1,261 +1,0 @@
-// License: GPL. For details, see LICENSE file.
-package org.openstreetmap.josm.gui.layer;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertSame;
-
-import java.util.Arrays;
-
-import org.junit.Before;
-import org.junit.BeforeClass;
-import org.junit.Test;
-import org.openstreetmap.josm.JOSMFixture;
-import org.openstreetmap.josm.data.osm.DataSet;
-import org.openstreetmap.josm.gui.layer.LayerManagerWithActive.ActiveLayerChangeEvent;
-import org.openstreetmap.josm.gui.layer.LayerManagerWithActive.ActiveLayerChangeListener;
-import org.openstreetmap.josm.gui.util.GuiHelper;
-import org.openstreetmap.josm.tools.Predicates;
-
-/**
- * Tests {@link LayerManagerWithActive}
- * @author Michael Zangl
- *
- */
-public class LayerManagerWithActiveTest extends LayerManagerTest {
-
-    private LayerManagerWithActive layerManagerWithActive;
-
-    private class CapturingActiveLayerChangeListener implements ActiveLayerChangeListener {
-        private ActiveLayerChangeEvent lastEvent;
-
-        @Override
-        public void activeOrEditLayerChanged(ActiveLayerChangeEvent e) {
-            assertSame(layerManager, e.getSource());
-            lastEvent = e;
-        }
-    }
-
-    private final class CapturingThreadCheckingActiveLayerChangeListener extends CapturingActiveLayerChangeListener {
-        @Override
-        public void activeOrEditLayerChanged(ActiveLayerChangeEvent e) {
-            GuiHelper.assertCallFromEdt();
-            super.activeOrEditLayerChanged(e);
-        }
-    }
-
-    protected class AbstractTestOsmLayer extends OsmDataLayer {
-        public AbstractTestOsmLayer() {
-            super(new DataSet(), "OSM layer", null);
-        }
-
-        @Override
-        public LayerPositionStrategy getDefaultLayerPosition() {
-            return LayerPositionStrategy.afterLast(Predicates.<Layer>alwaysTrue());
-        }
-    }
-
-    @BeforeClass
-    public static void setUpClass() {
-        JOSMFixture.createUnitTestFixture().init();
-    }
-
-    @Override
-    @Before
-    public void setUp() {
-        layerManager = layerManagerWithActive = new LayerManagerWithActive();
-    }
-
-    @Test
-    public void testAddLayerSetsActiveLayer() {
-        AbstractTestLayer layer1 = new AbstractTestLayer();
-        AbstractTestOsmLayer layer2 = new AbstractTestOsmLayer();
-        AbstractTestLayer layer3 = new AbstractTestLayer();
-        assertNull(layerManagerWithActive.getActiveLayer());
-        assertNull(layerManagerWithActive.getEditLayer());
-        layerManagerWithActive.addLayer(layer1);
-        assertSame(layer1, layerManagerWithActive.getActiveLayer());
-        assertNull(layerManagerWithActive.getEditLayer());
-        layerManagerWithActive.addLayer(layer2);
-        assertSame(layer2, layerManagerWithActive.getActiveLayer());
-        assertSame(layer2, layerManagerWithActive.getEditLayer());
-        layerManagerWithActive.addLayer(layer3);
-        assertSame(layer2, layerManagerWithActive.getActiveLayer());
-        assertSame(layer2, layerManagerWithActive.getEditLayer());
-    }
-
-    @Test
-    public void testRemoveLayerUnsetsActiveLayer() {
-        AbstractTestLayer layer1 = new AbstractTestLayer();
-        AbstractTestOsmLayer layer2 = new AbstractTestOsmLayer();
-        AbstractTestLayer layer3 = new AbstractTestLayer();
-        AbstractTestOsmLayer layer4 = new AbstractTestOsmLayer();
-        layerManagerWithActive.addLayer(layer1);
-        layerManagerWithActive.addLayer(layer2);
-        layerManagerWithActive.addLayer(layer3);
-        layerManagerWithActive.addLayer(layer4);
-        assertSame(layer4, layerManagerWithActive.getActiveLayer());
-        assertSame(layer4, layerManagerWithActive.getEditLayer());
-        layerManagerWithActive.removeLayer(layer4);
-        //prefer osm layers
-        assertSame(layer2, layerManagerWithActive.getActiveLayer());
-        assertSame(layer2, layerManagerWithActive.getEditLayer());
-        layerManagerWithActive.removeLayer(layer2);
-        assertSame(layer1, layerManagerWithActive.getActiveLayer());
-        assertNull(layerManagerWithActive.getEditLayer());
-
-        layerManagerWithActive.removeLayer(layer1);
-        layerManagerWithActive.removeLayer(layer3);
-        assertNull(layerManagerWithActive.getActiveLayer());
-        assertNull(layerManagerWithActive.getEditLayer());
-    }
-
-    @Test
-    public void testAddActiveLayerChangeListener() {
-        AbstractTestLayer layer1 = new AbstractTestLayer();
-        AbstractTestOsmLayer layer2 = new AbstractTestOsmLayer();
-        layerManagerWithActive.addLayer(layer1);
-        layerManagerWithActive.addLayer(layer2);
-
-        CapturingActiveLayerChangeListener listener = new CapturingThreadCheckingActiveLayerChangeListener();
-        layerManagerWithActive.addActiveLayerChangeListener(listener, false);
-        assertNull(listener.lastEvent);
-
-        CapturingActiveLayerChangeListener listener2 = new CapturingActiveLayerChangeListener();
-        layerManagerWithActive.addActiveLayerChangeListener(listener2, true);
-        assertSame(listener2.lastEvent.getPreviousActiveLayer(), null);
-        assertSame(listener2.lastEvent.getPreviousEditLayer(), null);
-
-        layerManagerWithActive.setActiveLayer(layer1);
-        assertSame(listener2.lastEvent.getPreviousActiveLayer(), layer2);
-        assertSame(listener2.lastEvent.getPreviousEditLayer(), layer2);
-
-        layerManagerWithActive.setActiveLayer(layer2);
-        assertSame(listener2.lastEvent.getPreviousActiveLayer(), layer1);
-        assertSame(listener2.lastEvent.getPreviousEditLayer(), layer2);
-    }
-
-    /**
-     * Test if {@link LayerManagerWithActive#addActiveLayerChangeListener(ActiveLayerChangeListener)} prevents listener from beeing added twice.
-     */
-    @Test(expected = IllegalArgumentException.class)
-    public void testAddActiveLayerChangeListenerTwice() {
-        CapturingActiveLayerChangeListener listener = new CapturingActiveLayerChangeListener();
-        layerManagerWithActive.addActiveLayerChangeListener(listener, false);
-        layerManagerWithActive.addActiveLayerChangeListener(listener, false);
-    }
-
-    /**
-     * Test if {@link LayerManagerWithActive#removeActiveLayerChangeListener(ActiveLayerChangeListener)} works.
-     */
-    @Test
-    public void testRemoveActiveLayerChangeListener() {
-        AbstractTestLayer layer1 = new AbstractTestLayer();
-        AbstractTestOsmLayer layer2 = new AbstractTestOsmLayer();
-        layerManagerWithActive.addLayer(layer1);
-        layerManagerWithActive.addLayer(layer2);
-
-        CapturingActiveLayerChangeListener listener = new CapturingActiveLayerChangeListener();
-        layerManagerWithActive.addActiveLayerChangeListener(listener, false);
-        layerManagerWithActive.removeActiveLayerChangeListener(listener);
-
-        layerManagerWithActive.setActiveLayer(layer2);
-        assertNull(listener.lastEvent);
-    }
-
-    /**
-     * Test if {@link LayerManagerWithActive#removeActiveLayerChangeListener(ActiveLayerChangeListener)} checks if listener is in list.
-     */
-    @Test(expected = IllegalArgumentException.class)
-    public void testRemoveActiveLayerChangeListenerNotInList() {
-        layerManagerWithActive.removeActiveLayerChangeListener(new CapturingActiveLayerChangeListener());
-    }
-
-    /**
-     * Tests {@link LayerManagerWithActive#setActiveLayer(Layer)} and {@link LayerManagerWithActive#getActiveLayer()}.
-     * <p>
-     * Edit and active layer getters are also tested in {@link #testAddLayerSetsActiveLayer()}
-     */
-    @Test
-    public void testSetGetActiveLayer() {
-        AbstractTestLayer layer1 = new AbstractTestLayer();
-        AbstractTestLayer layer2 = new AbstractTestLayer();
-        layerManagerWithActive.addLayer(layer1);
-        layerManagerWithActive.addLayer(layer2);
-
-        layerManagerWithActive.setActiveLayer(layer1);
-        assertSame(layer1, layerManagerWithActive.getActiveLayer());
-
-        layerManagerWithActive.setActiveLayer(layer2);
-        assertSame(layer2, layerManagerWithActive.getActiveLayer());
-    }
-
-    /**
-     * Tests {@link LayerManagerWithActive#getEditDataSet()}
-     */
-    @Test
-    public void testGetEditDataSet() {
-        assertNull(layerManagerWithActive.getEditDataSet());
-        AbstractTestLayer layer0 = new AbstractTestLayer();
-        layerManagerWithActive.addLayer(layer0);
-        assertNull(layerManagerWithActive.getEditDataSet());
-
-        AbstractTestOsmLayer layer1 = new AbstractTestOsmLayer();
-        AbstractTestOsmLayer layer2 = new AbstractTestOsmLayer();
-        layerManagerWithActive.addLayer(layer1);
-        layerManagerWithActive.addLayer(layer2);
-
-        layerManagerWithActive.setActiveLayer(layer1);
-        assertSame(layer1.data, layerManagerWithActive.getEditDataSet());
-
-        layerManagerWithActive.setActiveLayer(layer2);
-        assertSame(layer2.data, layerManagerWithActive.getEditDataSet());
-    }
-
-    /**
-     * Tests {@link LayerManagerWithActive#getVisibleLayersInZOrder()}
-     */
-    @Test
-    public void testGetVisibleLayersInZOrder() {
-        AbstractTestOsmLayer layer1 = new AbstractTestOsmLayer();
-        AbstractTestOsmLayer layer2 = new AbstractTestOsmLayer();
-        AbstractTestLayer layer3 = new AbstractTestLayer();
-        layer3.setVisible(false);
-        AbstractTestOsmLayer layer4 = new AbstractTestOsmLayer();
-        AbstractTestLayer layer5 = new AbstractTestLayer();
-        AbstractTestOsmLayer layer6 = new AbstractTestOsmLayer();
-        AbstractTestOsmLayer layer7 = new AbstractTestOsmLayer();
-        layerManagerWithActive.addLayer(layer1);
-        layerManagerWithActive.addLayer(layer2);
-        layerManagerWithActive.addLayer(layer3);
-        layerManagerWithActive.addLayer(layer4);
-        layerManagerWithActive.addLayer(layer5);
-        layerManagerWithActive.addLayer(layer6);
-        layerManagerWithActive.addLayer(layer7);
-
-        layerManagerWithActive.setActiveLayer(layer1);
-        assertEquals(Arrays.asList(layer7, layer6, layer5, layer4, layer2, layer1),
-                layerManagerWithActive.getVisibleLayersInZOrder());
-        layerManagerWithActive.setActiveLayer(layer4);
-        assertEquals(Arrays.asList(layer7, layer6, layer5, layer2, layer1, layer4),
-                layerManagerWithActive.getVisibleLayersInZOrder());
-
-        // should not be moved ouside edit layer block
-        layerManagerWithActive.setActiveLayer(layer6);
-        assertEquals(Arrays.asList(layer7, layer6, layer5, layer4, layer2, layer1),
-                layerManagerWithActive.getVisibleLayersInZOrder());
-        layerManagerWithActive.setActiveLayer(layer7);
-        assertEquals(Arrays.asList(layer6, layer7, layer5, layer4, layer2, layer1),
-                layerManagerWithActive.getVisibleLayersInZOrder());
-
-        // ignored
-        layerManagerWithActive.setActiveLayer(layer3);
-        assertEquals(Arrays.asList(layer7, layer6, layer5, layer4, layer2, layer1),
-                layerManagerWithActive.getVisibleLayersInZOrder());
-        layerManagerWithActive.setActiveLayer(layer5);
-        assertEquals(Arrays.asList(layer7, layer6, layer5, layer4, layer2, layer1),
-                layerManagerWithActive.getVisibleLayersInZOrder());
-
-    }
-
-}
Index: trunk/test/unit/org/openstreetmap/josm/gui/layer/MainLayerManagerTest.java
===================================================================
--- trunk/test/unit/org/openstreetmap/josm/gui/layer/MainLayerManagerTest.java	(revision 10279)
+++ trunk/test/unit/org/openstreetmap/josm/gui/layer/MainLayerManagerTest.java	(revision 10279)
@@ -0,0 +1,260 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.gui.layer;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertSame;
+
+import java.util.Arrays;
+
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.openstreetmap.josm.JOSMFixture;
+import org.openstreetmap.josm.data.osm.DataSet;
+import org.openstreetmap.josm.gui.layer.MainLayerManager.ActiveLayerChangeEvent;
+import org.openstreetmap.josm.gui.layer.MainLayerManager.ActiveLayerChangeListener;
+import org.openstreetmap.josm.gui.util.GuiHelper;
+import org.openstreetmap.josm.tools.Predicates;
+
+/**
+ * Tests {@link MainLayerManager}.
+ * @author Michael Zangl
+ */
+public class MainLayerManagerTest extends LayerManagerTest {
+
+    private MainLayerManager layerManagerWithActive;
+
+    private class CapturingActiveLayerChangeListener implements ActiveLayerChangeListener {
+        private ActiveLayerChangeEvent lastEvent;
+
+        @Override
+        public void activeOrEditLayerChanged(ActiveLayerChangeEvent e) {
+            assertSame(layerManager, e.getSource());
+            lastEvent = e;
+        }
+    }
+
+    private final class CapturingThreadCheckingActiveLayerChangeListener extends CapturingActiveLayerChangeListener {
+        @Override
+        public void activeOrEditLayerChanged(ActiveLayerChangeEvent e) {
+            GuiHelper.assertCallFromEdt();
+            super.activeOrEditLayerChanged(e);
+        }
+    }
+
+    protected class AbstractTestOsmLayer extends OsmDataLayer {
+        public AbstractTestOsmLayer() {
+            super(new DataSet(), "OSM layer", null);
+        }
+
+        @Override
+        public LayerPositionStrategy getDefaultLayerPosition() {
+            return LayerPositionStrategy.afterLast(Predicates.<Layer>alwaysTrue());
+        }
+    }
+
+    @BeforeClass
+    public static void setUpClass() {
+        JOSMFixture.createUnitTestFixture().init();
+    }
+
+    @Override
+    @Before
+    public void setUp() {
+        layerManager = layerManagerWithActive = new MainLayerManager();
+    }
+
+    @Test
+    public void testAddLayerSetsActiveLayer() {
+        AbstractTestLayer layer1 = new AbstractTestLayer();
+        AbstractTestOsmLayer layer2 = new AbstractTestOsmLayer();
+        AbstractTestLayer layer3 = new AbstractTestLayer();
+        assertNull(layerManagerWithActive.getActiveLayer());
+        assertNull(layerManagerWithActive.getEditLayer());
+        layerManagerWithActive.addLayer(layer1);
+        assertSame(layer1, layerManagerWithActive.getActiveLayer());
+        assertNull(layerManagerWithActive.getEditLayer());
+        layerManagerWithActive.addLayer(layer2);
+        assertSame(layer2, layerManagerWithActive.getActiveLayer());
+        assertSame(layer2, layerManagerWithActive.getEditLayer());
+        layerManagerWithActive.addLayer(layer3);
+        assertSame(layer2, layerManagerWithActive.getActiveLayer());
+        assertSame(layer2, layerManagerWithActive.getEditLayer());
+    }
+
+    @Test
+    public void testRemoveLayerUnsetsActiveLayer() {
+        AbstractTestLayer layer1 = new AbstractTestLayer();
+        AbstractTestOsmLayer layer2 = new AbstractTestOsmLayer();
+        AbstractTestLayer layer3 = new AbstractTestLayer();
+        AbstractTestOsmLayer layer4 = new AbstractTestOsmLayer();
+        layerManagerWithActive.addLayer(layer1);
+        layerManagerWithActive.addLayer(layer2);
+        layerManagerWithActive.addLayer(layer3);
+        layerManagerWithActive.addLayer(layer4);
+        assertSame(layer4, layerManagerWithActive.getActiveLayer());
+        assertSame(layer4, layerManagerWithActive.getEditLayer());
+        layerManagerWithActive.removeLayer(layer4);
+        //prefer osm layers
+        assertSame(layer2, layerManagerWithActive.getActiveLayer());
+        assertSame(layer2, layerManagerWithActive.getEditLayer());
+        layerManagerWithActive.removeLayer(layer2);
+        assertSame(layer1, layerManagerWithActive.getActiveLayer());
+        assertNull(layerManagerWithActive.getEditLayer());
+
+        layerManagerWithActive.removeLayer(layer1);
+        layerManagerWithActive.removeLayer(layer3);
+        assertNull(layerManagerWithActive.getActiveLayer());
+        assertNull(layerManagerWithActive.getEditLayer());
+    }
+
+    @Test
+    public void testAddActiveLayerChangeListener() {
+        AbstractTestLayer layer1 = new AbstractTestLayer();
+        AbstractTestOsmLayer layer2 = new AbstractTestOsmLayer();
+        layerManagerWithActive.addLayer(layer1);
+        layerManagerWithActive.addLayer(layer2);
+
+        CapturingActiveLayerChangeListener listener = new CapturingThreadCheckingActiveLayerChangeListener();
+        layerManagerWithActive.addActiveLayerChangeListener(listener, false);
+        assertNull(listener.lastEvent);
+
+        CapturingActiveLayerChangeListener listener2 = new CapturingActiveLayerChangeListener();
+        layerManagerWithActive.addActiveLayerChangeListener(listener2, true);
+        assertSame(listener2.lastEvent.getPreviousActiveLayer(), null);
+        assertSame(listener2.lastEvent.getPreviousEditLayer(), null);
+
+        layerManagerWithActive.setActiveLayer(layer1);
+        assertSame(listener2.lastEvent.getPreviousActiveLayer(), layer2);
+        assertSame(listener2.lastEvent.getPreviousEditLayer(), layer2);
+
+        layerManagerWithActive.setActiveLayer(layer2);
+        assertSame(listener2.lastEvent.getPreviousActiveLayer(), layer1);
+        assertSame(listener2.lastEvent.getPreviousEditLayer(), layer2);
+    }
+
+    /**
+     * Test if {@link MainLayerManager#addActiveLayerChangeListener(ActiveLayerChangeListener)} prevents listener from beeing added twice.
+     */
+    @Test(expected = IllegalArgumentException.class)
+    public void testAddActiveLayerChangeListenerTwice() {
+        CapturingActiveLayerChangeListener listener = new CapturingActiveLayerChangeListener();
+        layerManagerWithActive.addActiveLayerChangeListener(listener, false);
+        layerManagerWithActive.addActiveLayerChangeListener(listener, false);
+    }
+
+    /**
+     * Test if {@link MainLayerManager#removeActiveLayerChangeListener(ActiveLayerChangeListener)} works.
+     */
+    @Test
+    public void testRemoveActiveLayerChangeListener() {
+        AbstractTestLayer layer1 = new AbstractTestLayer();
+        AbstractTestOsmLayer layer2 = new AbstractTestOsmLayer();
+        layerManagerWithActive.addLayer(layer1);
+        layerManagerWithActive.addLayer(layer2);
+
+        CapturingActiveLayerChangeListener listener = new CapturingActiveLayerChangeListener();
+        layerManagerWithActive.addActiveLayerChangeListener(listener, false);
+        layerManagerWithActive.removeActiveLayerChangeListener(listener);
+
+        layerManagerWithActive.setActiveLayer(layer2);
+        assertNull(listener.lastEvent);
+    }
+
+    /**
+     * Test if {@link MainLayerManager#removeActiveLayerChangeListener(ActiveLayerChangeListener)} checks if listener is in list.
+     */
+    @Test(expected = IllegalArgumentException.class)
+    public void testRemoveActiveLayerChangeListenerNotInList() {
+        layerManagerWithActive.removeActiveLayerChangeListener(new CapturingActiveLayerChangeListener());
+    }
+
+    /**
+     * Tests {@link MainLayerManager#setActiveLayer(Layer)} and {@link MainLayerManager#getActiveLayer()}.
+     * <p>
+     * Edit and active layer getters are also tested in {@link #testAddLayerSetsActiveLayer()}
+     */
+    @Test
+    public void testSetGetActiveLayer() {
+        AbstractTestLayer layer1 = new AbstractTestLayer();
+        AbstractTestLayer layer2 = new AbstractTestLayer();
+        layerManagerWithActive.addLayer(layer1);
+        layerManagerWithActive.addLayer(layer2);
+
+        layerManagerWithActive.setActiveLayer(layer1);
+        assertSame(layer1, layerManagerWithActive.getActiveLayer());
+
+        layerManagerWithActive.setActiveLayer(layer2);
+        assertSame(layer2, layerManagerWithActive.getActiveLayer());
+    }
+
+    /**
+     * Tests {@link MainLayerManager#getEditDataSet()}
+     */
+    @Test
+    public void testGetEditDataSet() {
+        assertNull(layerManagerWithActive.getEditDataSet());
+        AbstractTestLayer layer0 = new AbstractTestLayer();
+        layerManagerWithActive.addLayer(layer0);
+        assertNull(layerManagerWithActive.getEditDataSet());
+
+        AbstractTestOsmLayer layer1 = new AbstractTestOsmLayer();
+        AbstractTestOsmLayer layer2 = new AbstractTestOsmLayer();
+        layerManagerWithActive.addLayer(layer1);
+        layerManagerWithActive.addLayer(layer2);
+
+        layerManagerWithActive.setActiveLayer(layer1);
+        assertSame(layer1.data, layerManagerWithActive.getEditDataSet());
+
+        layerManagerWithActive.setActiveLayer(layer2);
+        assertSame(layer2.data, layerManagerWithActive.getEditDataSet());
+    }
+
+    /**
+     * Tests {@link MainLayerManager#getVisibleLayersInZOrder()}
+     */
+    @Test
+    public void testGetVisibleLayersInZOrder() {
+        AbstractTestOsmLayer layer1 = new AbstractTestOsmLayer();
+        AbstractTestOsmLayer layer2 = new AbstractTestOsmLayer();
+        AbstractTestLayer layer3 = new AbstractTestLayer();
+        layer3.setVisible(false);
+        AbstractTestOsmLayer layer4 = new AbstractTestOsmLayer();
+        AbstractTestLayer layer5 = new AbstractTestLayer();
+        AbstractTestOsmLayer layer6 = new AbstractTestOsmLayer();
+        AbstractTestOsmLayer layer7 = new AbstractTestOsmLayer();
+        layerManagerWithActive.addLayer(layer1);
+        layerManagerWithActive.addLayer(layer2);
+        layerManagerWithActive.addLayer(layer3);
+        layerManagerWithActive.addLayer(layer4);
+        layerManagerWithActive.addLayer(layer5);
+        layerManagerWithActive.addLayer(layer6);
+        layerManagerWithActive.addLayer(layer7);
+
+        layerManagerWithActive.setActiveLayer(layer1);
+        assertEquals(Arrays.asList(layer7, layer6, layer5, layer4, layer2, layer1),
+                layerManagerWithActive.getVisibleLayersInZOrder());
+        layerManagerWithActive.setActiveLayer(layer4);
+        assertEquals(Arrays.asList(layer7, layer6, layer5, layer2, layer1, layer4),
+                layerManagerWithActive.getVisibleLayersInZOrder());
+
+        // should not be moved ouside edit layer block
+        layerManagerWithActive.setActiveLayer(layer6);
+        assertEquals(Arrays.asList(layer7, layer6, layer5, layer4, layer2, layer1),
+                layerManagerWithActive.getVisibleLayersInZOrder());
+        layerManagerWithActive.setActiveLayer(layer7);
+        assertEquals(Arrays.asList(layer6, layer7, layer5, layer4, layer2, layer1),
+                layerManagerWithActive.getVisibleLayersInZOrder());
+
+        // ignored
+        layerManagerWithActive.setActiveLayer(layer3);
+        assertEquals(Arrays.asList(layer7, layer6, layer5, layer4, layer2, layer1),
+                layerManagerWithActive.getVisibleLayersInZOrder());
+        layerManagerWithActive.setActiveLayer(layer5);
+        assertEquals(Arrays.asList(layer7, layer6, layer5, layer4, layer2, layer1),
+                layerManagerWithActive.getVisibleLayersInZOrder());
+
+    }
+
+}
