diff --git a/src/org/openstreetmap/josm/gui/layer/geoimage/GeoImageLayer.java b/src/org/openstreetmap/josm/gui/layer/geoimage/GeoImageLayer.java
index c5f440b..f0564cc 100644
--- a/src/org/openstreetmap/josm/gui/layer/geoimage/GeoImageLayer.java
+++ b/src/org/openstreetmap/josm/gui/layer/geoimage/GeoImageLayer.java
@@ -21,19 +21,15 @@
 import java.beans.PropertyChangeListener;
 import java.io.File;
 import java.io.IOException;
-import java.text.ParseException;
 import java.util.ArrayList;
 import java.util.Arrays;
-import java.util.Calendar;
 import java.util.Collection;
 import java.util.Collections;
-import java.util.GregorianCalendar;
 import java.util.HashSet;
 import java.util.LinkedHashSet;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Set;
-import java.util.TimeZone;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 
@@ -49,7 +45,6 @@
 import org.openstreetmap.josm.actions.mapmode.MapMode;
 import org.openstreetmap.josm.actions.mapmode.SelectAction;
 import org.openstreetmap.josm.data.Bounds;
-import org.openstreetmap.josm.data.coor.LatLon;
 import org.openstreetmap.josm.data.osm.visitor.BoundingXYVisitor;
 import org.openstreetmap.josm.gui.ExtendedDialog;
 import org.openstreetmap.josm.gui.MapFrame;
@@ -67,18 +62,9 @@
 import org.openstreetmap.josm.gui.layer.Layer;
 import org.openstreetmap.josm.gui.util.GuiHelper;
 import org.openstreetmap.josm.io.JpgImporter;
-import org.openstreetmap.josm.tools.ExifReader;
 import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.tools.Utils;
 
-import com.drew.imaging.jpeg.JpegMetadataReader;
-import com.drew.lang.CompoundException;
-import com.drew.metadata.Directory;
-import com.drew.metadata.Metadata;
-import com.drew.metadata.MetadataException;
-import com.drew.metadata.exif.ExifIFD0Directory;
-import com.drew.metadata.exif.GpsDirectory;
-
 /**
  * Layer displaying geottaged pictures.
  */
@@ -157,18 +143,8 @@ protected void realRun() throws IOException {
                 progressMonitor.subTask(tr("Reading {0}...", f.getName()));
                 progressMonitor.worked(1);
 
-                ImageEntry e = new ImageEntry();
-
-                // Changed to silently cope with no time info in exif. One case
-                // of person having time that couldn't be parsed, but valid GPS info
-
-                try {
-                    e.setExifTime(ExifReader.readTime(f));
-                } catch (ParseException ex) {
-                    e.setExifTime(null);
-                }
-                e.setFile(f);
-                extractExif(e);
+                ImageEntry e = new ImageEntry(f);
+                e.extractExif();
                 data.add(e);
             }
             layer = new GeoImageLayer(data, gpxLayer);
@@ -498,11 +474,11 @@ public void paint(Graphics2D g, MapView mv, Bounds bounds) {
                             continue;
                         }
                         Point p = mv.getPoint(e.getPos());
-                        if (e.thumbnail != null) {
-                            Dimension d = scaledDimension(e.thumbnail);
+                        if (e.hasThumbnail()) {
+                            Dimension d = scaledDimension(e.getThumbnail());
                             Rectangle target = new Rectangle(p.x - d.width / 2, p.y - d.height / 2, d.width, d.height);
                             if (clip.intersects(target)) {
-                                tempG.drawImage(e.thumbnail, target.x, target.y, target.width, target.height, null);
+                                tempG.drawImage(e.getThumbnail(), target.x, target.y, target.width, target.height, null);
                             }
                         } else { // thumbnail not loaded yet
                             icon.paintIcon(mv, tempG,
@@ -534,8 +510,8 @@ public void paint(Graphics2D g, MapView mv, Bounds bounds) {
 
                 int imgWidth = 100;
                 int imgHeight = 100;
-                if (useThumbs && e.thumbnail != null) {
-                    Dimension d = scaledDimension(e.thumbnail);
+                if (useThumbs && e.hasThumbnail()) {
+                    Dimension d = scaledDimension(e.getThumbnail());
                     imgWidth = d.width;
                     imgHeight = d.height;
                 } else {
@@ -573,7 +549,7 @@ public void paint(Graphics2D g, MapView mv, Bounds bounds) {
                     g.drawPolyline(xar, yar, 3);
                 }
 
-                if (useThumbs && e.thumbnail != null) {
+                if (useThumbs && e.hasThumbnail()) {
                     g.setColor(new Color(128, 0, 0, 122));
                     g.fillRect(p.x - imgWidth / 2, p.y - imgHeight / 2, imgWidth, imgHeight);
                 } else {
@@ -593,126 +569,6 @@ public void visitBoundingBox(BoundingXYVisitor v) {
         }
     }
 
-    /**
-     * Extract GPS metadata from image EXIF
-     *
-     * If successful, fills in the LatLon and EastNorth attributes of passed in image
-     * @param e image entry
-     */
-    private static void extractExif(ImageEntry e) {
-
-        Metadata metadata;
-        Directory dirExif;
-        GpsDirectory dirGps;
-
-        try {
-            metadata = JpegMetadataReader.readMetadata(e.getFile());
-            dirExif = metadata.getFirstDirectoryOfType(ExifIFD0Directory.class);
-            dirGps = metadata.getFirstDirectoryOfType(GpsDirectory.class);
-        } catch (CompoundException | IOException p) {
-            e.setExifCoor(null);
-            e.setPos(null);
-            return;
-        }
-
-        try {
-            if (dirExif != null) {
-                int orientation = dirExif.getInt(ExifIFD0Directory.TAG_ORIENTATION);
-                e.setExifOrientation(orientation);
-            }
-        } catch (MetadataException ex) {
-            Main.debug(ex.getMessage());
-        }
-
-        if (dirGps == null) {
-            e.setExifCoor(null);
-            e.setPos(null);
-            return;
-        }
-
-        try {
-            double speed = dirGps.getDouble(GpsDirectory.TAG_SPEED);
-            String speedRef = dirGps.getString(GpsDirectory.TAG_SPEED_REF);
-            if ("M".equalsIgnoreCase(speedRef)) {
-                // miles per hour
-                speed *= 1.609344;
-            } else if ("N".equalsIgnoreCase(speedRef)) {
-                // knots == nautical miles per hour
-                speed *= 1.852;
-            }
-            // default is K (km/h)
-            e.setSpeed(speed);
-        } catch (Exception ex) {
-            Main.debug(ex.getMessage());
-        }
-
-        try {
-            double ele = dirGps.getDouble(GpsDirectory.TAG_ALTITUDE);
-            int d = dirGps.getInt(GpsDirectory.TAG_ALTITUDE_REF);
-            if (d == 1) {
-                ele *= -1;
-            }
-            e.setElevation(ele);
-        } catch (MetadataException ex) {
-            Main.debug(ex.getMessage());
-        }
-
-        try {
-            LatLon latlon = ExifReader.readLatLon(dirGps);
-            e.setExifCoor(latlon);
-            e.setPos(e.getExifCoor());
-
-        } catch (Exception ex) { // (other exceptions, e.g. #5271)
-            Main.error("Error reading EXIF from file: "+ex);
-            e.setExifCoor(null);
-            e.setPos(null);
-        }
-
-        try {
-            Double direction = ExifReader.readDirection(dirGps);
-            if (direction != null) {
-                e.setExifImgDir(direction.doubleValue());
-            }
-        } catch (Exception ex) { // (CompoundException and other exceptions, e.g. #5271)
-            Main.debug(ex.getMessage());
-        }
-
-        // Time and date. We can have these cases:
-        // 1) GPS_TIME_STAMP not set -> date/time will be null
-        // 2) GPS_DATE_STAMP not set -> use EXIF date or set to default
-        // 3) GPS_TIME_STAMP and GPS_DATE_STAMP are set
-        int[] timeStampComps = dirGps.getIntArray(GpsDirectory.TAG_TIME_STAMP);
-        if (timeStampComps != null) {
-            int gpsHour = timeStampComps[0];
-            int gpsMin = timeStampComps[1];
-            int gpsSec = timeStampComps[2];
-            Calendar cal = new GregorianCalendar(TimeZone.getTimeZone("UTC"));
-
-            // We have the time. Next step is to check if the GPS date stamp is set.
-            // dirGps.getString() always succeeds, but the return value might be null.
-            String dateStampStr = dirGps.getString(GpsDirectory.TAG_DATE_STAMP);
-            if (dateStampStr != null && dateStampStr.matches("^\\d+:\\d+:\\d+$")) {
-                String[] dateStampComps = dateStampStr.split(":");
-                cal.set(Calendar.YEAR, Integer.parseInt(dateStampComps[0]));
-                cal.set(Calendar.MONTH, Integer.parseInt(dateStampComps[1]) - 1);
-                cal.set(Calendar.DAY_OF_MONTH, Integer.parseInt(dateStampComps[2]));
-            } else {
-                // No GPS date stamp in EXIF data. Copy it from EXIF time.
-                // Date is not set if EXIF time is not available.
-                if (e.hasExifTime()) {
-                    // Time not set yet, so we can copy everything, not just date.
-                    cal.setTime(e.getExifTime());
-                }
-            }
-
-            cal.set(Calendar.HOUR_OF_DAY, gpsHour);
-            cal.set(Calendar.MINUTE, gpsMin);
-            cal.set(Calendar.SECOND, gpsSec);
-
-            e.setExifGpsTime(cal.getTime());
-        }
-    }
-
     public void showNextPhoto() {
         if (data != null && !data.isEmpty()) {
             currentPhoto++;
@@ -861,8 +717,8 @@ public ImageEntry getPhotoUnderMouse(MouseEvent evt) {
                 }
                 Point p = Main.map.mapView.getPoint(img.getPos());
                 Rectangle r;
-                if (useThumbs && img.thumbnail != null) {
-                    Dimension d = scaledDimension(img.thumbnail);
+                if (useThumbs && img.hasThumbnail()) {
+                    Dimension d = scaledDimension(img.getThumbnail());
                     r = new Rectangle(p.x - d.width / 2, p.y - d.height / 2, d.width, d.height);
                 } else {
                     r = new Rectangle(p.x - icon.getIconWidth() / 2,
@@ -971,8 +827,8 @@ public void mouseReleased(MouseEvent ev) {
                     }
                     Point p = Main.map.mapView.getPoint(e.getPos());
                     Rectangle r;
-                    if (useThumbs && e.thumbnail != null) {
-                        Dimension d = scaledDimension(e.thumbnail);
+                    if (useThumbs && e.hasThumbnail()) {
+                        Dimension d = scaledDimension(e.getThumbnail());
                         r = new Rectangle(p.x - d.width / 2, p.y - d.height / 2, d.width, d.height);
                     } else {
                         r = new Rectangle(p.x - icon.getIconWidth() / 2,
diff --git a/src/org/openstreetmap/josm/gui/layer/geoimage/ImageEntry.java b/src/org/openstreetmap/josm/gui/layer/geoimage/ImageEntry.java
index 29b4f22..2684288 100644
--- a/src/org/openstreetmap/josm/gui/layer/geoimage/ImageEntry.java
+++ b/src/org/openstreetmap/josm/gui/layer/geoimage/ImageEntry.java
@@ -3,10 +3,25 @@
 
 import java.awt.Image;
 import java.io.File;
+import java.io.IOException;
+import java.text.ParseException;
+import java.util.Calendar;
 import java.util.Date;
+import java.util.GregorianCalendar;
+import java.util.TimeZone;
 
+import com.drew.imaging.jpeg.JpegMetadataReader;
+import com.drew.lang.CompoundException;
+import com.drew.metadata.Directory;
+import com.drew.metadata.Metadata;
+import com.drew.metadata.MetadataException;
+import com.drew.metadata.exif.ExifIFD0Directory;
+import com.drew.metadata.exif.GpsDirectory;
+import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.data.SystemOfMeasurement;
 import org.openstreetmap.josm.data.coor.CachedLatLon;
 import org.openstreetmap.josm.data.coor.LatLon;
+import org.openstreetmap.josm.tools.ExifReader;
 
 /**
  * Stores info about each image
@@ -25,7 +40,7 @@
     private boolean isNewGpsData;
     /** Temporary source of GPS time if not correlated with GPX track. */
     private Date exifGpsTime;
-    Image thumbnail;
+    private Image thumbnail;
 
     /**
      * The following values are computed from the correlation with the gpx track
@@ -43,13 +58,26 @@
      * When the correlation dialog is open, we like to show the image position
      * for the current time offset on the map in real time.
      * On the other hand, when the user aborts this operation, the old values
-     * should be restored. We have a temprary copy, that overrides
+     * should be restored. We have a temporary copy, that overrides
      * the normal values if it is not null. (This may be not the most elegant
      * solution for this, but it works.)
      */
     ImageEntry tmp;
 
     /**
+     * Constructs a new {@code ImageEntry}.
+     */
+    public ImageEntry() {}
+
+    /**
+     * Constructs a new {@code ImageEntry}.
+     * @param file Path to image file on disk
+     */
+    public ImageEntry(File file) {
+        setFile(file);
+    }
+
+    /**
      * Returns the cached temporary position value.
      * @return the cached temporary position value
      */
@@ -98,6 +126,12 @@ public boolean hasGpsTime() {
         return (tmp != null && tmp.gpsTime != null) || gpsTime != null;
     }
 
+    public Double getExifImgDir() {
+        if (tmp != null)
+            return tmp.exifImgDir;
+        return exifImgDir;
+    }
+
     /**
      * Returns associated file.
      * @return associated file
@@ -159,14 +193,18 @@ public LatLon getExifCoor() {
         return exifCoor;
     }
 
-    public Double getExifImgDir() {
-        return exifImgDir;
-    }
-
     public boolean hasThumbnail() {
         return thumbnail != null;
     }
 
+    public Image getThumbnail() {
+        return thumbnail;
+    }
+
+    public void setThumbnail(Image thumbnail) {
+        this.thumbnail = thumbnail;
+    }
+
     /**
      * Sets the position.
      * @param pos cached position
@@ -180,7 +218,7 @@ public void setPos(CachedLatLon pos) {
      * @param pos position (will be cached)
      */
     public void setPos(LatLon pos) {
-        setPos(new CachedLatLon(pos));
+        setPos(pos != null ? new CachedLatLon(pos) : null);
     }
 
     /**
@@ -240,7 +278,7 @@ public void setExifCoor(LatLon exifCoor) {
         this.exifCoor = exifCoor;
     }
 
-    public void setExifImgDir(double exifDir) {
+    public void setExifImgDir(Double exifDir) {
         this.exifImgDir = exifDir;
     }
 
@@ -277,7 +315,22 @@ public void cleanTmp() {
     }
 
     /**
-     * Copy the values from the temporary variable to the main instance.
+     * Get temporary variable that is used for real time parameter
+     * adjustments. The temporary variable is created if it does not exist
+     * yet. Use {@link #applyTmp()} or {@link #discardTmp()} if the temporary variable is not
+     * needed anymore.
+     */
+    public ImageEntry getTmp() {
+        if (tmp == null) {
+            cleanTmp();
+        }
+        return tmp;
+    }
+
+    /**
+     * Copy the values from the temporary variable to the main instance. The
+     * temporary variable is deleted.
+     * @see #discardTmp()
      */
     public void applyTmp() {
         if (tmp != null) {
@@ -285,11 +338,20 @@ public void applyTmp() {
             speed = tmp.speed;
             elevation = tmp.elevation;
             gpsTime = tmp.gpsTime;
+            exifImgDir = tmp.exifImgDir;
             tmp = null;
         }
     }
 
     /**
+     * Delete the temporary variable. Temporary modifications are lost.
+     * @see #applyTmp()
+     */
+    public void discardTmp() {
+        tmp = null;
+    }
+
+    /**
      * If it has been tagged i.e. matched to a gpx track or retrieved lat/lon from exif
      * @return {@code true} if it has been tagged
      */
@@ -335,4 +397,135 @@ public void unflagNewGpsData() {
     public boolean hasNewGpsData() {
         return isNewGpsData;
     }
+
+    /**
+     * Extract GPS metadata from image EXIF. Has no effect if the image file is not set
+     *
+     * If successful, fills in the LatLon, speed, elevation, image direction, and other attributes
+     */
+    public void extractExif() {
+
+        Metadata metadata;
+        Directory dirExif;
+        GpsDirectory dirGps;
+
+        if (file == null) {
+            return;
+        }
+
+        try {
+            metadata = JpegMetadataReader.readMetadata(file);
+            dirExif = metadata.getFirstDirectoryOfType(ExifIFD0Directory.class);
+            dirGps = metadata.getFirstDirectoryOfType(GpsDirectory.class);
+        } catch (CompoundException | IOException p) {
+            setExifCoor(null);
+            setPos(null);
+            return;
+        }
+
+        try {
+            if (dirExif != null) {
+                int orientation = dirExif.getInt(ExifIFD0Directory.TAG_ORIENTATION);
+                setExifOrientation(orientation);
+            }
+        } catch (MetadataException ex) {
+            Main.debug(ex.getMessage());
+        }
+
+        if (dirGps == null) {
+            setExifCoor(null);
+            setPos(null);
+            return;
+        }
+
+        try {
+            double speed = dirGps.getDouble(GpsDirectory.TAG_SPEED);
+            String speedRef = dirGps.getString(GpsDirectory.TAG_SPEED_REF);
+            if ("M".equalsIgnoreCase(speedRef)) {
+                // miles per hour
+                speed *= SystemOfMeasurement.IMPERIAL.bValue / 1000;
+            } else if ("N".equalsIgnoreCase(speedRef)) {
+                // knots == nautical miles per hour
+                speed *= SystemOfMeasurement.NAUTICAL_MILE.bValue / 1000;
+            }
+            // default is K (km/h)
+            setSpeed(speed);
+        } catch (Exception ex) {
+            Main.debug(ex.getMessage());
+        }
+
+        try {
+            double ele = dirGps.getDouble(GpsDirectory.TAG_ALTITUDE);
+            int d = dirGps.getInt(GpsDirectory.TAG_ALTITUDE_REF);
+            if (d == 1) {
+                ele *= -1;
+            }
+            setElevation(ele);
+        } catch (MetadataException ex) {
+            Main.debug(ex.getMessage());
+        }
+
+        try {
+            LatLon latlon = ExifReader.readLatLon(dirGps);
+            setExifCoor(latlon);
+            setPos(getExifCoor());
+
+        } catch (Exception ex) { // (other exceptions, e.g. #5271)
+            Main.error("Error reading EXIF from file: " + ex);
+            setExifCoor(null);
+            setPos(null);
+        }
+
+        try {
+            Double direction = ExifReader.readDirection(dirGps);
+            if (direction != null) {
+                setExifImgDir(direction);
+            }
+        } catch (Exception ex) { // (CompoundException and other exceptions, e.g. #5271)
+            Main.debug(ex.getMessage());
+        }
+
+        // Changed to silently cope with no time info in exif. One case
+        // of person having time that couldn't be parsed, but valid GPS info
+        try {
+            setExifTime(ExifReader.readTime(file));
+        } catch (ParseException ex) {
+            setExifTime(null);
+        }
+
+        // Time and date. We can have these cases:
+        // 1) GPS_TIME_STAMP not set -> date/time will be null
+        // 2) GPS_DATE_STAMP not set -> use EXIF date or set to default
+        // 3) GPS_TIME_STAMP and GPS_DATE_STAMP are set
+        int[] timeStampComps = dirGps.getIntArray(GpsDirectory.TAG_TIME_STAMP);
+        if (timeStampComps != null) {
+            int gpsHour = timeStampComps[0];
+            int gpsMin = timeStampComps[1];
+            int gpsSec = timeStampComps[2];
+            Calendar cal = new GregorianCalendar(TimeZone.getTimeZone("UTC"));
+
+            // We have the time. Next step is to check if the GPS date stamp is set.
+            // dirGps.getString() always succeeds, but the return value might be null.
+            String dateStampStr = dirGps.getString(GpsDirectory.TAG_DATE_STAMP);
+            if (dateStampStr != null && dateStampStr.matches("^\\d+:\\d+:\\d+$")) {
+                String[] dateStampComps = dateStampStr.split(":");
+                cal.set(Calendar.YEAR, Integer.parseInt(dateStampComps[0]));
+                cal.set(Calendar.MONTH, Integer.parseInt(dateStampComps[1]) - 1);
+                cal.set(Calendar.DAY_OF_MONTH, Integer.parseInt(dateStampComps[2]));
+            } else {
+                // No GPS date stamp in EXIF data. Copy it from EXIF time.
+                // Date is not set if EXIF time is not available.
+                if (hasExifTime()) {
+                    // Time not set yet, so we can copy everything, not just date.
+                    cal.setTime(getExifTime());
+                }
+            }
+
+            cal.set(Calendar.HOUR_OF_DAY, gpsHour);
+            cal.set(Calendar.MINUTE, gpsMin);
+            cal.set(Calendar.SECOND, gpsSec);
+
+            setExifGpsTime(cal.getTime());
+        }
+    }
 }
diff --git a/src/org/openstreetmap/josm/gui/layer/geoimage/ImageViewerDialog.java b/src/org/openstreetmap/josm/gui/layer/geoimage/ImageViewerDialog.java
index 8ff6a51..6666eb2 100644
--- a/src/org/openstreetmap/josm/gui/layer/geoimage/ImageViewerDialog.java
+++ b/src/org/openstreetmap/josm/gui/layer/geoimage/ImageViewerDialog.java
@@ -69,6 +69,7 @@ public static ImageViewerDialog getInstance() {
     private JButton btnNext;
     private JButton btnPrevious;
     private JButton btnCollapse;
+    private JToggleButton tbCentre;
 
     private ImageViewerDialog() {
         super(tr("Geotagged Images"), "geoimage", tr("Display geotagged images"), Shortcut.registerShortcut("tools:geotagged",
@@ -149,7 +150,7 @@ protected void build() {
                         "geoimage:last", tr("Geoimage: {0}", tr("Show last Image")), KeyEvent.VK_END, Shortcut.DIRECT)
         );
 
-        JToggleButton tbCentre = new JToggleButton(new ImageAction(COMMAND_CENTERVIEW,
+        tbCentre = new JToggleButton(new ImageAction(COMMAND_CENTERVIEW,
                 ImageProvider.get("dialogs", "centreview"), tr("Center view")));
         tbCentre.setPreferredSize(buttonDim);
 
@@ -224,7 +225,8 @@ public void actionPerformed(ActionEvent e) {
             } else if (COMMAND_LAST.equals(action) && currentLayer != null) {
                 currentLayer.showLastPhoto();
             } else if (COMMAND_CENTERVIEW.equals(action)) {
-                centerView = ((JToggleButton) e.getSource()).isSelected();
+                final JToggleButton button = (JToggleButton) e.getSource();
+                centerView = button.isEnabled() && button.isSelected();
                 if (centerView && currentEntry != null && currentEntry.getPos() != null) {
                     Main.map.mapView.zoomTo(currentEntry.getPos());
                 }
@@ -275,6 +277,19 @@ public static void setNextEnabled(boolean value) {
         getInstance().btnNext.setEnabled(value);
     }
 
+    /**
+     * Enables (or disables) the "Center view" button.
+     * @param value {@code true} to enable the button, {@code false} otherwise
+     * @return the old enabled value. Can be used to restore the original enable state
+     */
+    public static synchronized boolean setCentreEnabled(boolean value) {
+        final ImageViewerDialog instance = getInstance();
+        final boolean wasEnabled = instance.tbCentre.isEnabled();
+        instance.tbCentre.setEnabled(value);
+        instance.tbCentre.getAction().actionPerformed(new ActionEvent(instance.tbCentre, 0, null));
+        return wasEnabled;
+    }
+
     private transient GeoImageLayer currentLayer;
     private transient ImageEntry currentEntry;
 
@@ -303,7 +318,7 @@ public void displayImage(GeoImageLayer layer, ImageEntry entry) {
             setTitle(tr("Geotagged Images") + (entry.getFile() != null ? " - " + entry.getFile().getName() : ""));
             StringBuilder osd = new StringBuilder(entry.getFile() != null ? entry.getFile().getName() : "");
             if (entry.getElevation() != null) {
-                osd.append(tr("\nAltitude: {0} m", entry.getElevation().longValue()));
+                osd.append(tr("\nAltitude: {0} m", Math.round(entry.getElevation())));
             }
             if (entry.getSpeed() != null) {
                 osd.append(tr("\nSpeed: {0} km/h", Math.round(entry.getSpeed())));
diff --git a/src/org/openstreetmap/josm/gui/layer/geoimage/ThumbsLoader.java b/src/org/openstreetmap/josm/gui/layer/geoimage/ThumbsLoader.java
index 9460d76..47706a3 100644
--- a/src/org/openstreetmap/josm/gui/layer/geoimage/ThumbsLoader.java
+++ b/src/org/openstreetmap/josm/gui/layer/geoimage/ThumbsLoader.java
@@ -54,8 +54,8 @@ public void run() {
             if (stop) return;
 
             // Do not load thumbnails that were loaded before.
-            if (entry.thumbnail == null) {
-                entry.thumbnail = loadThumb(entry);
+            if (entry.hasThumbnail()) {
+                entry.setThumbnail(loadThumb(entry));
 
                 if (Main.isDisplayingMapView()) {
                     layer.updateOffscreenBuffer = true;
