Index: src/org/openstreetmap/josm/actions/OpenFileAction.java
===================================================================
--- src/org/openstreetmap/josm/actions/OpenFileAction.java	(revision 19103)
+++ src/org/openstreetmap/josm/actions/OpenFileAction.java	(working copy)
@@ -6,6 +6,7 @@
 import static org.openstreetmap.josm.tools.I18n.tr;
 import static org.openstreetmap.josm.tools.I18n.trn;
 
+import java.awt.GraphicsEnvironment;
 import java.awt.event.ActionEvent;
 import java.awt.event.KeyEvent;
 import java.io.BufferedReader;
@@ -23,6 +24,7 @@
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Objects;
+import java.util.Optional;
 import java.util.Set;
 import java.util.concurrent.Future;
 import java.util.regex.Matcher;
@@ -33,6 +35,8 @@
 import javax.swing.SwingUtilities;
 import javax.swing.filechooser.FileFilter;
 
+import org.openstreetmap.josm.data.Data;
+import org.openstreetmap.josm.data.ImageData;
 import org.openstreetmap.josm.data.PreferencesUtils;
 import org.openstreetmap.josm.gui.HelpAwareOptionPane;
 import org.openstreetmap.josm.gui.MainApplication;
@@ -41,7 +45,13 @@
 import org.openstreetmap.josm.gui.PleaseWaitRunnable;
 import org.openstreetmap.josm.gui.io.importexport.AllFormatsImporter;
 import org.openstreetmap.josm.gui.io.importexport.FileImporter;
+import org.openstreetmap.josm.gui.io.importexport.ImageImporter;
 import org.openstreetmap.josm.gui.io.importexport.Options;
+import org.openstreetmap.josm.gui.layer.Layer;
+import org.openstreetmap.josm.gui.layer.LayerManager;
+import org.openstreetmap.josm.gui.layer.MainLayerManager;
+import org.openstreetmap.josm.gui.layer.geoimage.GeoImageLayer;
+import org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog;
 import org.openstreetmap.josm.gui.util.GuiHelper;
 import org.openstreetmap.josm.gui.widgets.AbstractFileChooser;
 import org.openstreetmap.josm.gui.widgets.FileChooserManager;
@@ -293,6 +303,7 @@
                 chosenImporter = null;
             }
             getProgressMonitor().setTicksCount(files.size());
+            boolean openImageViewerDialog = false;
 
             if (chosenImporter != null) {
                 // The importer was explicitly chosen, so use it.
@@ -345,8 +356,9 @@
                 List<FileImporter> importers = new ArrayList<>(importerMap.keySet());
                 Collections.sort(importers);
                 Collections.reverse(importers);
-
                 for (FileImporter importer : importers) {
+                	if (importer instanceof ImageImporter)
+                		openImageViewerDialog = true;
                     importData(importer, new ArrayList<>(importerMap.get(importer)));
                 }
 
@@ -377,8 +389,24 @@
                 int maxsize = Math.max(0, Config.getPref().getInt("file-open.history.max-size", 15));
                 PreferencesUtils.putListBounded(Config.getPref(), "file-open.history", maxsize, new ArrayList<>(fileHistory));
             }
+			if (openImageViewerDialog && !GraphicsEnvironment.isHeadless()) {
+				showFirstImage();
+			}
         }
 
+		private static void showFirstImage() {
+			// We do have to wrap the EDT call in a worker call, since layers may be created in the EDT.
+			// And the layer must be added to the layer list in order for the dialog to work properly.
+			MainApplication.worker.execute(() -> {
+				Optional<Layer> l = MainApplication.getLayerManager().getLayers().stream()
+						.filter(GeoImageLayer.class::isInstance).findFirst();
+				if (l.isPresent()) {
+					GeoImageLayer imageLayer = (GeoImageLayer) l.get();
+					imageLayer.showFirstImage();
+				}
+			});
+		}
+
         /**
          * Import data files with the given importer.
          * @param importer file importer
Index: src/org/openstreetmap/josm/gui/layer/geoimage/GeoImageLayer.java
===================================================================
--- src/org/openstreetmap/josm/gui/layer/geoimage/GeoImageLayer.java	(revision 19103)
+++ src/org/openstreetmap/josm/gui/layer/geoimage/GeoImageLayer.java	(working copy)
@@ -15,6 +15,7 @@
 import java.awt.Point;
 import java.awt.Rectangle;
 import java.awt.RenderingHints;
+import java.awt.event.ActionEvent;
 import java.awt.event.MouseAdapter;
 import java.awt.event.MouseEvent;
 import java.awt.event.MouseMotionAdapter;
@@ -30,6 +31,7 @@
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 
+import javax.swing.AbstractAction;
 import javax.swing.Action;
 import javax.swing.Icon;
 import javax.swing.ImageIcon;
@@ -89,6 +91,7 @@
     GpxData gpxFauxData;
 
     private CorrelateGpxWithImages gpxCorrelateAction;
+    private ShowFirstImageAction showFirstImageAction;
 
     private final Icon icon = ImageProvider.get("dialogs/geoimage/photo-marker");
     private final Icon selectedIcon = ImageProvider.get("dialogs/geoimage/photo-marker-selected");
@@ -191,19 +194,6 @@
         this.useThumbs = useThumbs;
         this.data.addImageDataUpdateListener(this);
         this.data.setLayer(this);
-        if (!ImageViewerDialog.hasInstance()) {
-            GuiHelper.runInEDTAndWait(() -> {
-                if (!ImageViewerDialog.hasInstance()) {
-                    ImageViewerDialog.createInstance();
-                }
-            });
-        }
-        if (getInvalidGeoImages().size() == data.size()) {
-            this.data.setSelectedImage(this.data.getFirstImage());
-            // We do have to wrap the EDT call in a worker call, since layers may be created in the EDT.
-            // And the layer must be added to the layer list in order for the dialog to work properly.
-            MainApplication.worker.execute(() -> GuiHelper.runInEDT(() -> ImageViewerDialog.getInstance().displayImages(this.getSelection())));
-        }
     }
 
     private final class ImageMouseListener extends MouseAdapter {
@@ -348,6 +338,7 @@
         entries.add(SeparatorLayerAction.INSTANCE);
         entries.add(new JumpToNextMarker(this));
         entries.add(new JumpToPreviousMarker(this));
+        entries.add(getShowFirstImageAction());
         entries.add(SeparatorLayerAction.INSTANCE);
         entries.add(new LayerListPopup.InfoAction(this));
 
@@ -997,4 +988,38 @@
                 .sorted(Comparator.comparing(ImageEntry::getExifInstant))
                 .collect(toList());
     }
+
+    private class ShowFirstImageAction extends AbstractAction  {
+    	public ShowFirstImageAction() {
+            super(tr("Show first image"), ImageProvider.get("dialogs/first", ImageProvider.ImageSizes.MENU));
+            setEnabled(true);
+		}
+
+		@Override
+		public void actionPerformed(ActionEvent e) {
+			showFirstImage();
+		}
+    }
+
+    /**
+     * Returns the gpxCorrelateAction
+     * @return the gpxCorrelateAction
+     */
+    private ShowFirstImageAction getShowFirstImageAction() {
+        if (showFirstImageAction == null) {
+            showFirstImageAction = new ShowFirstImageAction();
+        }
+        return showFirstImageAction;
+    }
+
+    /**
+     * Open ImageViewerDialog with the first image in layer (if available).
+     * @since xxx
+     */
+	public void showFirstImage() {
+		if (data != null && !data.getImages().isEmpty()) {
+			data.setSelectedImage(data.getFirstImage());
+			GuiHelper.runInEDT(() -> ImageViewerDialog.getInstance().displayImages(getSelection()));
+		}
+	}
 }
