Index: trunk/src/org/openstreetmap/josm/gui/NavigatableComponent.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/NavigatableComponent.java	(revision 11839)
+++ trunk/src/org/openstreetmap/josm/gui/NavigatableComponent.java	(revision 11840)
@@ -635,5 +635,6 @@
         // values, so it is not an issue in this case. It only shows when zooming
         // in & back out, etc.
-        MapViewState mvs = getState().usingScale(newScale).movedTo(state.getCenterAtPixel(), newCenter);
+        MapViewState mvs = getState().usingScale(newScale);
+        mvs = mvs.movedTo(mvs.getCenter(), newCenter);
         Point2D enOrigin = mvs.getPointFor(new EastNorth(0, 0)).getInView();
         Point2D enOriginAligned = new Point2D.Double(Math.round(enOrigin.getX()), Math.round(enOrigin.getY()));
@@ -657,18 +658,16 @@
      */
     private void zoomNoUndoTo(EastNorth newCenter, double newScale, boolean initial) {
-        if (!newCenter.equals(getCenter())) {
-            EastNorth oldCenter = getCenter();
-            state = state.movedTo(state.getCenterAtPixel(), newCenter);
-            if (!initial) {
-                firePropertyChange(PROPNAME_CENTER, oldCenter, newCenter);
-            }
-        }
         if (!Utils.equalsEpsilon(getScale(), newScale)) {
             double oldScale = getScale();
             state = state.usingScale(newScale);
-            // temporary. Zoom logic needs to be moved.
-            state = state.movedTo(state.getCenterAtPixel(), newCenter);
             if (!initial) {
                 firePropertyChange(PROPNAME_SCALE, oldScale, newScale);
+            }
+        }
+        if (!newCenter.equals(getCenter())) {
+            EastNorth oldCenter = getCenter();
+            state = state.movedTo(state.getCenter(), newCenter);
+            if (!initial) {
+                firePropertyChange(PROPNAME_CENTER, oldCenter, newCenter);
             }
         }
