Index: trunk/src/org/openstreetmap/josm/gui/layer/geoimage/ImageDisplay.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/layer/geoimage/ImageDisplay.java	(revision 17871)
+++ trunk/src/org/openstreetmap/josm/gui/layer/geoimage/ImageDisplay.java	(revision 17872)
@@ -18,5 +18,4 @@
 import java.awt.event.MouseWheelEvent;
 import java.awt.event.MouseWheelListener;
-import java.awt.geom.AffineTransform;
 import java.awt.geom.Rectangle2D;
 import java.awt.image.BufferedImage;
@@ -37,5 +36,4 @@
 import org.openstreetmap.josm.spi.preferences.PreferenceChangedListener;
 import org.openstreetmap.josm.tools.Destroyable;
-import org.openstreetmap.josm.tools.ExifReader;
 import org.openstreetmap.josm.tools.ImageProcessor;
 import org.openstreetmap.josm.tools.Logging;
@@ -251,22 +249,4 @@
                     }
 
-                    boolean switchedDim = false;
-                    if (ExifReader.orientationNeedsCorrection(entry.getExifOrientation())) {
-                        if (ExifReader.orientationSwitchesDimensions(entry.getExifOrientation())) {
-                            width = img.getHeight(null);
-                            height = img.getWidth(null);
-                            switchedDim = true;
-                        }
-                        final BufferedImage rot = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
-                        final AffineTransform xform = ExifReader.getRestoreOrientationTransform(
-                                entry.getExifOrientation(),
-                                img.getWidth(null),
-                                img.getHeight(null));
-                        final Graphics2D g = rot.createGraphics();
-                        g.drawImage(img, xform, null);
-                        g.dispose();
-                        img = rot;
-                    }
-
                     ImageDisplay.this.image = img;
                     updateProcessedImage();
@@ -274,7 +254,4 @@
                     ImageDisplay.this.oldEntry = ImageDisplay.this.entry;
                     visibleRect = new VisRect(0, 0, width, height);
-
-                    Logging.debug("Loaded {0} with dimensions {1}x{2} memoryTaken={3}m exifOrientationSwitchedDimension={4}",
-                            entry.getFile().getPath(), width, height, width * height * 4 / 1024 / 1024, switchedDim);
 
                     selectedRect = null;
Index: trunk/src/org/openstreetmap/josm/gui/layer/geoimage/ImageEntry.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/layer/geoimage/ImageEntry.java	(revision 17871)
+++ trunk/src/org/openstreetmap/josm/gui/layer/geoimage/ImageEntry.java	(revision 17872)
@@ -3,5 +3,7 @@
 
 import java.awt.Dimension;
+import java.awt.Graphics2D;
 import java.awt.Image;
+import java.awt.geom.AffineTransform;
 import java.awt.image.BufferedImage;
 import java.io.File;
@@ -13,4 +15,5 @@
 import org.openstreetmap.josm.data.ImageData;
 import org.openstreetmap.josm.data.gpx.GpxImageEntry;
+import org.openstreetmap.josm.tools.ExifReader;
 import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.tools.Logging;
@@ -139,6 +142,10 @@
     public BufferedImage read(Dimension target) throws IOException {
         Logging.info(tr("Loading {0}", getFile().getPath()));
-        return ImageProvider.read(getFile(), false, false,
+        BufferedImage image = ImageProvider.read(getFile(), false, false,
                 r -> target == null ? r.getDefaultReadParam() : withSubsampling(r, target));
+        Logging.debug("Loaded {0} with dimensions {1}x{2} memoryTaken={3}m exifOrientationSwitchedDimension={4}",
+                getFile().getPath(), image.getWidth(), image.getHeight(), image.getWidth() * image.getHeight() * 4 / 1024 / 1024,
+                ExifReader.orientationSwitchesDimensions(getExifOrientation()));
+        return applyExifRotation(image);
     }
 
@@ -158,3 +165,19 @@
         }
     }
+
+    private BufferedImage applyExifRotation(BufferedImage img) {
+        Integer exifOrientation = getExifOrientation();
+        if (!ExifReader.orientationNeedsCorrection(exifOrientation)) {
+            return img;
+        }
+        boolean switchesDimensions = ExifReader.orientationSwitchesDimensions(exifOrientation);
+        int width = switchesDimensions ? img.getHeight() : img.getWidth();
+        int height = switchesDimensions ? img.getWidth() : img.getHeight();
+        BufferedImage rotated = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
+        AffineTransform transform = ExifReader.getRestoreOrientationTransform(exifOrientation, img.getWidth(), img.getHeight());
+        Graphics2D g = rotated.createGraphics();
+        g.drawImage(img, transform, null);
+        g.dispose();
+        return rotated;
+    }
 }
