Index: trunk/src/org/openstreetmap/josm/gui/layer/LayerManager.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/layer/LayerManager.java	(revision 10998)
+++ trunk/src/org/openstreetmap/josm/gui/layer/LayerManager.java	(revision 10999)
@@ -21,6 +21,8 @@
  * This manager handles a list of layers with the first layer being the front layer.
  * <h1>Threading</h1>
+ * Synchronization of the layer manager is done by synchronizing all read/write access. All changes are internally done in the EDT thread.
+ *
  * Methods of this manager may be called from any thread in any order.
- * Listeners are called while this layer manager is locked, so they should not block.
+ * Listeners are called while this layer manager is locked, so they should not block on other threads.
  *
  * @author Michael Zangl
@@ -35,5 +37,5 @@
          * Notifies this listener that a layer has been added.
          * <p>
-         * Listeners are called in the EDT thread.
+         * Listeners are called in the EDT thread. You should not do blocking or long-running tasks in this method.
          * @param e The new added layer event
          */
@@ -45,4 +47,5 @@
          * Listeners are called in the EDT thread after the layer was removed.
          * Use {@link LayerRemoveEvent#scheduleRemoval(Collection)} to remove more layers.
+         * You should not do blocking or long-running tasks in this method.
          * @param e The layer to be removed (as event)
          */
@@ -52,5 +55,6 @@
          * Notifies this listener that the order of layers was changed.
          * <p>
-         * Listeners are called in the EDT thread and you can manipulate the layer manager in the current thread.
+         * Listeners are called in the EDT thread.
+         *  You should not do blocking or long-running tasks in this method.
          * @param e The order change event.
          */
@@ -418,6 +422,12 @@
      * @since 10432
      */
-    public synchronized void resetState() {
-        // some layer remove listeners remove other layers.
+    public void resetState() {
+        // we force this on to the EDT Thread to have a clean synchronization
+        // The synchronization lock needs to be held by the EDT.
+        GuiHelper.runInEDTAndWaitWithException(this::realResetState);
+    }
+
+    protected synchronized void realResetState() {
+        // The listeners trigger the removal of other layers
         while (!getLayers().isEmpty()) {
             removeLayer(getLayers().get(0));
Index: trunk/src/org/openstreetmap/josm/gui/layer/MainLayerManager.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/layer/MainLayerManager.java	(revision 10998)
+++ trunk/src/org/openstreetmap/josm/gui/layer/MainLayerManager.java	(revision 10999)
@@ -372,7 +372,7 @@
 
     @Override
-    public synchronized void resetState() {
+    protected synchronized void realResetState() {
         // active and edit layer are unset automatically
-        super.resetState();
+        super.realResetState();
 
         activeLayerChangeListeners.clear();
