Index: src/org/openstreetmap/josm/gui/layer/geoimage/GeoImageLayer.java
===================================================================
--- src/org/openstreetmap/josm/gui/layer/geoimage/GeoImageLayer.java	(revision 7767)
+++ src/org/openstreetmap/josm/gui/layer/geoimage/GeoImageLayer.java	(working copy)
@@ -15,6 +15,9 @@
 import java.awt.event.MouseAdapter;
 import java.awt.event.MouseEvent;
 import java.awt.image.BufferedImage;
+import java.awt.datatransfer.Clipboard;
+import java.awt.datatransfer.StringSelection;
+import java.awt.Toolkit;
 import java.beans.PropertyChangeEvent;
 import java.beans.PropertyChangeListener;
 import java.io.File;
@@ -755,6 +758,17 @@
         }
     }
 
+    public void copyCurrentPhotoPath() {
+        ImageEntry toCopy = null;
+        if (data != null && data.size() > 0 && currentPhoto >= 0 && currentPhoto < data.size()) {
+            toCopy = data.get(currentPhoto);
+            String copyString = toCopy.getFile().toString();
+            StringSelection stringSelection = new StringSelection(copyString);
+            Clipboard clpbrd = Toolkit.getDefaultToolkit().getSystemClipboard ();
+            clpbrd.setContents (stringSelection, null);
+        }
+    }
+    
     /**
      * Removes a photo from the list of images by index.
      * @param idx Image index
Index: src/org/openstreetmap/josm/gui/layer/geoimage/ImageViewerDialog.java
===================================================================
--- src/org/openstreetmap/josm/gui/layer/geoimage/ImageViewerDialog.java	(revision 7767)
+++ src/org/openstreetmap/josm/gui/layer/geoimage/ImageViewerDialog.java	(working copy)
@@ -42,6 +42,7 @@
     private static final String COMMAND_COLLAPSE = "collapse";
     private static final String COMMAND_FIRST = "first";
     private static final String COMMAND_LAST = "last";
+    private static final String COMMAND_COPY_PATH = "copypath";
 
     private ImageDisplay imgDisplay = new ImageDisplay();
     private boolean centerView = false;
@@ -111,6 +112,16 @@
         btnDeleteFromDisk.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(scDeleteFromDisk.getKeyStroke(), ADELFROMDISK);
         btnDeleteFromDisk.getActionMap().put(ADELFROMDISK, delFromDiskAction);
 
+        ImageAction copyPathAction = new ImageAction(COMMAND_COPY_PATH, ImageProvider.get("", "copy"), tr("Copy image path"));
+        JButton btnCopyPath = new JButton(copyPathAction);
+        btnCopyPath.setPreferredSize(buttonDim);
+        Shortcut scCopyPath = Shortcut.registerShortcut(
+                "geoimage:copypath", tr("Geoimage: {0}", tr("Copy image path")), KeyEvent.VK_C, Shortcut.ALT_CTRL_SHIFT);
+        final String ACOPYPATH = "Copy image path";
+        Main.registerActionShortcut(copyPathAction, scCopyPath);
+        btnCopyPath.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(scCopyPath.getKeyStroke(), ACOPYPATH);
+        btnCopyPath.getActionMap().put(ACOPYPATH, copyPathAction);
+
         ImageAction nextAction = new ImageAction(COMMAND_NEXT, ImageProvider.get("dialogs", "next"), tr("Next"));
         btnNext = new JButton(nextAction);
         btnNext.setPreferredSize(buttonDim);
@@ -152,6 +163,8 @@
         buttons.add(Box.createRigidArea(new Dimension(14, 0)));
         buttons.add(btnDelete);
         buttons.add(btnDeleteFromDisk);
+        buttons.add(Box.createRigidArea(new Dimension(14, 0)));
+        buttons.add(btnCopyPath);
 
         JPanel bottomPane = new JPanel();
         bottomPane.setLayout(new GridBagLayout());
@@ -221,6 +234,10 @@
                 if (currentLayer != null) {
                     currentLayer.removeCurrentPhotoFromDisk();
                 }
+            } else if (COMMAND_COPY_PATH.equals(action)) {
+                if (currentLayer != null) {
+                    currentLayer.copyCurrentPhotoPath();
+                }
             } else if (COMMAND_COLLAPSE.equals(action)) {
                 collapseButtonClicked = true;
                 detachedDialog.getToolkit().getSystemEventQueue().postEvent(new WindowEvent(detachedDialog, WindowEvent.WINDOW_CLOSING));
