Index: /trunk/src/org/openstreetmap/josm/Main.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/Main.java	(revision 10390)
+++ /trunk/src/org/openstreetmap/josm/Main.java	(revision 10391)
@@ -88,4 +88,8 @@
 import org.openstreetmap.josm.gui.layer.AbstractModifiableLayer;
 import org.openstreetmap.josm.gui.layer.Layer;
+import org.openstreetmap.josm.gui.layer.LayerManager.LayerAddEvent;
+import org.openstreetmap.josm.gui.layer.LayerManager.LayerChangeListener;
+import org.openstreetmap.josm.gui.layer.LayerManager.LayerOrderChangeEvent;
+import org.openstreetmap.josm.gui.layer.LayerManager.LayerRemoveEvent;
 import org.openstreetmap.josm.gui.layer.MainLayerManager;
 import org.openstreetmap.josm.gui.layer.OsmDataLayer;
@@ -563,4 +567,25 @@
     public Main() {
         main = this;
+        getLayerManager().addLayerChangeListener(new LayerChangeListener() {
+            @Override
+            public void layerAdded(LayerAddEvent e) {
+                if (map == null) {
+                    Layer layer = e.getAddedLayer();
+                    ProjectionBounds viewProjectionBounds = layer.getViewProjectionBounds();
+                    Main.main.createMapFrame(layer, viewProjectionBounds == null ? null : new ViewportData(viewProjectionBounds));
+                }
+            }
+
+            @Override
+            public void layerRemoving(LayerRemoveEvent e) {
+                // empty
+            }
+
+            @Override
+            public void layerOrderChanged(LayerOrderChangeEvent e) {
+                //empty
+            }
+
+        });
     }
 
@@ -794,11 +819,6 @@
      */
     public final synchronized void addLayer(final Layer layer, ViewportData viewport) {
-        boolean noMap = map == null;
-        if (noMap) {
-            createMapFrame(layer, viewport);
-        }
-        layer.hookUpMapView();
         getLayerManager().addLayer(layer);
-        if (noMap) {
+        if (map != null) {
             Main.map.setVisible(true);
         } else if (viewport != null) {
Index: /trunk/src/org/openstreetmap/josm/gui/layer/AbstractTileSourceLayer.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/layer/AbstractTileSourceLayer.java	(revision 10390)
+++ /trunk/src/org/openstreetmap/josm/gui/layer/AbstractTileSourceLayer.java	(revision 10391)
@@ -651,5 +651,5 @@
                 }
             }
-        });
+        }, true);
         // FIXME: why do we need this? Without this, if you add a WMS layer and do not move the mouse, sometimes, tiles do not
         // start loading.
Index: /trunk/src/org/openstreetmap/josm/gui/layer/LayerManager.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/layer/LayerManager.java	(revision 10390)
+++ /trunk/src/org/openstreetmap/josm/gui/layer/LayerManager.java	(revision 10391)
@@ -149,4 +149,5 @@
         insertLayerAt(layer, position);
         fireLayerAdded(layer);
+        layer.hookUpMapView(); // needs to be after fireLayerAdded
     }
 
