Index: trunk/src/org/openstreetmap/josm/gui/MapView.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/MapView.java	(revision 15040)
+++ trunk/src/org/openstreetmap/josm/gui/MapView.java	(revision 15041)
@@ -684,5 +684,6 @@
         }
 
-        if (getCenter() == null)
+        EastNorth oldCenter = getCenter();
+        if (oldCenter == null)
             return false; // no data loaded yet.
 
@@ -691,6 +692,6 @@
             Point l1 = getLocationOnScreen();
             final EastNorth newCenter = new EastNorth(
-                    getCenter().getX()+ (l1.x-oldLoc.x - (oldSize.width-getWidth())/2.0)*getScale(),
-                    getCenter().getY()+ (oldLoc.y-l1.y + (oldSize.height-getHeight())/2.0)*getScale()
+                    oldCenter.getX()+ (l1.x-oldLoc.x - (oldSize.width-getWidth())/2.0)*getScale(),
+                    oldCenter.getY()+ (oldLoc.y-l1.y + (oldSize.height-getHeight())/2.0)*getScale()
                     );
             oldLoc = null; oldSize = null;
Index: trunk/src/org/openstreetmap/josm/gui/MapViewState.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/MapViewState.java	(revision 15040)
+++ trunk/src/org/openstreetmap/josm/gui/MapViewState.java	(revision 15041)
@@ -740,11 +740,13 @@
         public MapViewPoint getLineEntry(MapViewPoint start, MapViewPoint end) {
             ProjectionBounds bounds = getProjectionBounds();
-            if (bounds.contains(start.getEastNorth())) {
+            EastNorth enStart = start.getEastNorth();
+            if (bounds.contains(enStart)) {
                 return start;
             }
 
-            double dx = end.getEastNorth().east() - start.getEastNorth().east();
+            EastNorth enEnd = end.getEastNorth();
+            double dx = enEnd.east() - enStart.east();
             double boundX = dx > 0 ? bounds.minEast : bounds.maxEast;
-            EastNorth borderIntersection = Geometry.getSegmentSegmentIntersection(start.getEastNorth(), end.getEastNorth(),
+            EastNorth borderIntersection = Geometry.getSegmentSegmentIntersection(enStart, enEnd,
                     new EastNorth(boundX, bounds.minNorth),
                     new EastNorth(boundX, bounds.maxNorth));
@@ -753,7 +755,7 @@
             }
 
-            double dy = end.getEastNorth().north() - start.getEastNorth().north();
+            double dy = enEnd.north() - enStart.north();
             double boundY = dy > 0 ? bounds.minNorth : bounds.maxNorth;
-            borderIntersection = Geometry.getSegmentSegmentIntersection(start.getEastNorth(), end.getEastNorth(),
+            borderIntersection = Geometry.getSegmentSegmentIntersection(enStart, enEnd,
                     new EastNorth(bounds.minEast, boundY),
                     new EastNorth(bounds.maxEast, boundY));
Index: trunk/src/org/openstreetmap/josm/gui/NavigatableComponent.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/NavigatableComponent.java	(revision 15040)
+++ trunk/src/org/openstreetmap/josm/gui/NavigatableComponent.java	(revision 15041)
@@ -680,7 +680,8 @@
         newCenter = newCenter.subtract(enShift);
 
-        if (!newCenter.equals(getCenter()) || !Utils.equalsEpsilon(getScale(), newScale)) {
+        EastNorth oldCenter = getCenter();
+        if (!newCenter.equals(oldCenter) || !Utils.equalsEpsilon(getScale(), newScale)) {
             if (!initial) {
-                pushZoomUndo(getCenter(), getScale());
+                pushZoomUndo(oldCenter, getScale());
             }
             zoomNoUndoTo(newCenter, newScale, initial);
@@ -741,6 +742,6 @@
         final int fps = 20;     // animation frames per second
         final int speed = 1500; // milliseconds for full-screen-width pan
-        if (!newCenter.equals(getCenter())) {
-            final EastNorth oldCenter = getCenter();
+        final EastNorth oldCenter = getCenter();
+        if (!newCenter.equals(oldCenter)) {
             final double distance = newCenter.distance(oldCenter) / getScale();
             final double milliseconds = distance / getWidth() * speed;
