Index: trunk/src/org/openstreetmap/josm/Main.java
===================================================================
--- trunk/src/org/openstreetmap/josm/Main.java	(revision 7816)
+++ trunk/src/org/openstreetmap/josm/Main.java	(revision 7817)
@@ -700,6 +700,6 @@
      * @param layer the layer
      * 
-     * @see #addLayer(org.openstreetmap.josm.gui.layer.Layer, org.openstreetmap.josm.data.ProjectionBounds)
-     * @see #addLayer(org.openstreetmap.josm.gui.layer.Layer, org.openstreetmap.josm.data.ViewportData)
+     * @see #addLayer(Layer, ProjectionBounds)
+     * @see #addLayer(Layer, ViewportData)
      */
     public final void addLayer(final Layer layer) {
@@ -715,8 +715,9 @@
      * 
      * @param layer the layer
-     * @param bounds the bounds of the layer (target zoom area)
+     * @param bounds the bounds of the layer (target zoom area); can be null, then
+     * the viewport isn't changed
      */
     public final synchronized void addLayer(final Layer layer, ProjectionBounds bounds) {
-        addLayer(layer, new ViewportData(bounds));
+        addLayer(layer, bounds == null ? null : new ViewportData(bounds));
     }
 
@@ -727,5 +728,6 @@
      * 
      * @param layer the layer
-     * @param viewport the viewport to zoom to
+     * @param viewport the viewport to zoom to; can be null, then the viewport
+     * isn't changed
      */
     public final synchronized void addLayer(final Layer layer, ViewportData viewport) {
@@ -738,4 +740,6 @@
         if (noMap) {
             Main.map.setVisible(true);
+        } else if (viewport != null) {
+            Main.map.mapView.zoomTo(viewport);
         }
     }
Index: trunk/src/org/openstreetmap/josm/actions/AutoScaleAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/AutoScaleAction.java	(revision 7816)
+++ trunk/src/org/openstreetmap/josm/actions/AutoScaleAction.java	(revision 7817)
@@ -85,5 +85,5 @@
         bboxCalculator.enlargeBoundingBox();
         if (bboxCalculator.getBounds() != null) {
-            Main.map.mapView.recalculateCenterScale(bboxCalculator);
+            Main.map.mapView.zoomTo(bboxCalculator);
         }
     }
@@ -174,5 +174,5 @@
                 BoundingXYVisitor bbox = getBoundingBox();
                 if (bbox != null && bbox.getBounds() != null) {
-                    Main.map.mapView.recalculateCenterScale(bbox);
+                    Main.map.mapView.zoomTo(bbox);
                 }
             }
Index: trunk/src/org/openstreetmap/josm/actions/downloadtasks/DownloadOsmTask.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/downloadtasks/DownloadOsmTask.java	(revision 7816)
+++ trunk/src/org/openstreetmap/josm/actions/downloadtasks/DownloadOsmTask.java	(revision 7817)
@@ -265,5 +265,5 @@
             BoundingXYVisitor v = new BoundingXYVisitor();
             v.visit(pb);
-            Main.map.mapView.recalculateCenterScale(v);
+            Main.map.mapView.zoomTo(v);
         }
 
Index: trunk/src/org/openstreetmap/josm/data/ViewportData.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/ViewportData.java	(revision 7816)
+++ trunk/src/org/openstreetmap/josm/data/ViewportData.java	(revision 7817)
@@ -3,4 +3,5 @@
 
 import org.openstreetmap.josm.data.coor.EastNorth;
+import org.openstreetmap.josm.tools.CheckParameterUtil;
 
 /**
@@ -28,4 +29,6 @@
      */
     public ViewportData(EastNorth center, Double scale) {
+        CheckParameterUtil.ensureParameterNotNull(center);
+        CheckParameterUtil.ensureParameterNotNull(scale);
         this.center = center;
         this.scale = scale;
@@ -34,4 +37,5 @@
 
     public ViewportData(ProjectionBounds bounds) {
+        CheckParameterUtil.ensureParameterNotNull(bounds);
         this.center = null;
         this.scale = null;
Index: trunk/src/org/openstreetmap/josm/gui/MapView.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/MapView.java	(revision 7816)
+++ trunk/src/org/openstreetmap/josm/gui/MapView.java	(revision 7817)
@@ -529,11 +529,5 @@
     @Override public void paint(Graphics g) {
         if (initialViewport != null) {
-            if (initialViewport.getBounds() != null) {
-                BoundingXYVisitor box = new BoundingXYVisitor();
-                box.visit(initialViewport.getBounds());
-                recalculateCenterScale(box);
-            } else {
-                zoomTo(initialViewport.getCenter(), initialViewport.getScale(), true);
-            }
+            zoomTo(initialViewport);
             initialViewport = null;
         }
@@ -693,17 +687,10 @@
     /**
      * Set the new dimension to the view.
-     */
+     * 
+     * @deprecated use #zoomTo(BoundingXYVisitor)
+     */
+    @Deprecated
     public void recalculateCenterScale(BoundingXYVisitor box) {
-        if (box == null) {
-            box = new BoundingXYVisitor();
-        }
-        if (box.getBounds() == null) {
-            box.visit(getProjection().getWorldBoundsLatLon());
-        }
-        if (!box.hasExtend()) {
-            box.enlargeBoundingBox();
-        }
-
-        zoomTo(box.getBounds());
+        zoomTo(box);
     }
 
Index: trunk/src/org/openstreetmap/josm/gui/NavigatableComponent.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/NavigatableComponent.java	(revision 7816)
+++ trunk/src/org/openstreetmap/josm/gui/NavigatableComponent.java	(revision 7817)
@@ -43,4 +43,5 @@
 import org.openstreetmap.josm.data.osm.Way;
 import org.openstreetmap.josm.data.osm.WaySegment;
+import org.openstreetmap.josm.data.osm.visitor.BoundingXYVisitor;
 import org.openstreetmap.josm.data.osm.visitor.paint.PaintColors;
 import org.openstreetmap.josm.data.preferences.IntegerProperty;
@@ -580,4 +581,32 @@
         zoomTo(new ProjectionBounds(getProjection().latlon2eastNorth(box.getMin()),
                 getProjection().latlon2eastNorth(box.getMax())));
+    }
+
+    public void zoomTo(ViewportData viewport) {
+        if (viewport == null) return;
+        if (viewport.getBounds() != null) {
+            BoundingXYVisitor box = new BoundingXYVisitor();
+            box.visit(viewport.getBounds());
+            zoomTo(box);
+        } else {
+            zoomTo(viewport.getCenter(), viewport.getScale(), true);
+        }
+    }
+
+    /**
+     * Set the new dimension to the view.
+     */
+    public void zoomTo(BoundingXYVisitor box) {
+        if (box == null) {
+            box = new BoundingXYVisitor();
+        }
+        if (box.getBounds() == null) {
+            box.visit(getProjection().getWorldBoundsLatLon());
+        }
+        if (!box.hasExtend()) {
+            box.enlargeBoundingBox();
+        }
+
+        zoomTo(box.getBounds());
     }
 
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/SelectionListDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/SelectionListDialog.java	(revision 7816)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/SelectionListDialog.java	(revision 7817)
@@ -451,5 +451,5 @@
                 return;
             box.enlargeBoundingBox();
-            Main.map.mapView.recalculateCenterScale(box);
+            Main.map.mapView.zoomTo(box);
         }
 
Index: trunk/src/org/openstreetmap/josm/gui/layer/geoimage/CorrelateGpxWithImages.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/layer/geoimage/CorrelateGpxWithImages.java	(revision 7816)
+++ trunk/src/org/openstreetmap/josm/gui/layer/geoimage/CorrelateGpxWithImages.java	(revision 7817)
@@ -746,5 +746,5 @@
                         BoundingXYVisitor bbox = new BoundingXYVisitor();
                         yLayer.visitBoundingBox(bbox);
-                        Main.map.mapView.recalculateCenterScale(bbox);
+                        Main.map.mapView.zoomTo(bbox);
                     }
 
Index: trunk/src/org/openstreetmap/josm/io/remotecontrol/handler/LoadAndZoomHandler.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/remotecontrol/handler/LoadAndZoomHandler.java	(revision 7816)
+++ trunk/src/org/openstreetmap/josm/io/remotecontrol/handler/LoadAndZoomHandler.java	(revision 7817)
@@ -244,5 +244,5 @@
                     BoundingXYVisitor bbox1 = new BoundingXYVisitor();
                     bbox1.visit(bbox);
-                    Main.map.mapView.recalculateCenterScale(bbox1);
+                    Main.map.mapView.zoomTo(bbox1);
                 }
             });
