Index: trunk/src/org/openstreetmap/josm/gui/layer/geoimage/ImageDisplay.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/layer/geoimage/ImageDisplay.java	(revision 18502)
+++ trunk/src/org/openstreetmap/josm/gui/layer/geoimage/ImageDisplay.java	(revision 18503)
@@ -698,5 +698,4 @@
         IImageViewer currentImageViewer;
         BufferedImage currentImage;
-        VisRect currentVisibleRect;
         boolean currentErrorLoading;
 
@@ -705,5 +704,4 @@
             currentEntry = this.entry;
             currentOldEntry = this.oldEntry;
-            currentVisibleRect = this.visibleRect;
             currentErrorLoading = this.errorLoading;
         }
@@ -717,4 +715,10 @@
         if (currentImage != null && (currentEntry != null || currentOldEntry != null)) {
             currentImageViewer = this.getIImageViewer(currentEntry);
+            // This must be after the getIImageViewer call, since we may be switching image viewers. This is important,
+            // since an image viewer on switch may change the visible rectangle.
+            VisRect currentVisibleRect;
+            synchronized (this) {
+                currentVisibleRect = this.visibleRect;
+            }
             Rectangle r = new Rectangle(currentVisibleRect);
             Rectangle target = calculateDrawImageRectangle(currentVisibleRect, size);
