Index: trunk/src/org/openstreetmap/josm/gui/layer/geoimage/ImageEntry.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/layer/geoimage/ImageEntry.java	(revision 9276)
+++ trunk/src/org/openstreetmap/josm/gui/layer/geoimage/ImageEntry.java	(revision 9277)
@@ -7,4 +7,5 @@
 import java.text.ParseException;
 import java.util.Calendar;
+import java.util.Collections;
 import java.util.Date;
 import java.util.GregorianCalendar;
@@ -220,4 +221,14 @@
     public void setThumbnail(Image thumbnail) {
         this.thumbnail = thumbnail;
+    }
+
+    /**
+     * Loads the thumbnail if it was not loaded yet.
+     * @see ThumbsLoader
+     */
+    public void loadThumbnail() {
+        if (thumbnail == null) {
+            new ThumbsLoader(Collections.singleton(this)).run();
+        }
     }
 
Index: trunk/src/org/openstreetmap/josm/gui/layer/geoimage/ThumbsLoader.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/layer/geoimage/ThumbsLoader.java	(revision 9276)
+++ trunk/src/org/openstreetmap/josm/gui/layer/geoimage/ThumbsLoader.java	(revision 9277)
@@ -13,5 +13,5 @@
 import java.io.IOException;
 import java.util.ArrayList;
-import java.util.List;
+import java.util.Collection;
 
 import javax.imageio.ImageIO;
@@ -27,9 +27,15 @@
     public static final int minSize = 22;
     public volatile boolean stop;
-    private final List<ImageEntry> data;
+    private final Collection<ImageEntry> data;
     private final GeoImageLayer layer;
     private MediaTracker tracker;
     private ICacheAccess<String, BufferedImageCacheEntry> cache;
     private final boolean cacheOff = Main.pref.getBoolean("geoimage.noThumbnailCache", false);
+
+    private ThumbsLoader(Collection<ImageEntry> data, GeoImageLayer layer) {
+        this.data = data;
+        this.layer = layer;
+        initCache();
+    }
 
     /**
@@ -38,7 +44,13 @@
      */
     public ThumbsLoader(GeoImageLayer layer) {
-        this.layer = layer;
-        this.data = new ArrayList<>(layer.data);
-        initCache();
+        this(new ArrayList<>(layer.data), layer);
+    }
+
+    /**
+     * Constructs a new thumbnail loader that operates on the image entries
+     * @param entries image entries
+     */
+    public ThumbsLoader(Collection<ImageEntry> entries) {
+        this(entries, null);
     }
 
@@ -69,5 +81,5 @@
                 entry.setThumbnail(loadThumb(entry));
 
-                if (Main.isDisplayingMapView()) {
+                if (layer != null && Main.isDisplayingMapView()) {
                     layer.updateOffscreenBuffer = true;
                     Main.map.mapView.repaint();
@@ -75,7 +87,9 @@
             }
         }
-        layer.thumbsLoaded();
-        layer.updateOffscreenBuffer = true;
-        Main.map.mapView.repaint();
+        if (layer != null) {
+            layer.thumbsLoaded();
+            layer.updateOffscreenBuffer = true;
+            Main.map.mapView.repaint();
+        }
     }
 
