Index: src/org/openstreetmap/josm/gui/MainApplication.java
===================================================================
--- src/org/openstreetmap/josm/gui/MainApplication.java	(revision 7767)
+++ src/org/openstreetmap/josm/gui/MainApplication.java	(working copy)
@@ -68,6 +68,15 @@
 import org.openstreetmap.josm.tools.PlatformHookWindows;
 import org.openstreetmap.josm.tools.Utils;
 
+
+import org.openstreetmap.gui.jmapviewer.tilesources.BingAerialTileSource;
+import org.openstreetmap.josm.data.imagery.ImageryInfo;
+
+import org.openstreetmap.josm.gui.layer.TMSLayer;
+import org.openstreetmap.gui.jmapviewer.interfaces.TileSource;
+
+
+
 /**
  * Main window class application.
  *
@@ -278,7 +287,10 @@
      * Main application Startup
      * @param argArray Command-line arguments
      */
-    public static void main(final String[] argArray) {
+    public static void main(final String[] argArray) throws Exception {
+
+
+
         I18n.init();
         Main.checkJavaVersion();
 
Index: src/org/openstreetmap/josm/gui/layer/TMSLayer.java
===================================================================
--- src/org/openstreetmap/josm/gui/layer/TMSLayer.java	(revision 7767)
+++ src/org/openstreetmap/josm/gui/layer/TMSLayer.java	(working copy)
@@ -321,7 +321,7 @@
         class BingAttributionData extends CacheCustomContent<IOException> {
 
             public BingAttributionData() {
-                super("bing.attribution.xml", CacheCustomContent.INTERVAL_HOURLY);
+                super("bing.attribution.xml", CacheCustomContent.INTERVAL_NEVER);
             }
 
             @Override
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,8 @@
 import java.awt.event.MouseAdapter;
 import java.awt.event.MouseEvent;
 import java.awt.image.BufferedImage;
+import java.awt.datatransfer.*;
+import java.awt.Toolkit;
 import java.beans.PropertyChangeEvent;
 import java.beans.PropertyChangeListener;
 import java.io.File;
@@ -755,6 +757,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.CTRL_SHIFT);
+        final String ACOPYPATH = "Copy image path";
+        Main.registerActionShortcut(copyPathAction, scCopyPath);
+        btnDeleteFromDisk.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(scCopyPath.getKeyStroke(), ACOPYPATH);
+        btnDeleteFromDisk.getActionMap().put(ADELFROMDISK, 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));
