Index: trunk/src/org/openstreetmap/josm/gui/ExtendedDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/ExtendedDialog.java	(revision 2626)
+++ trunk/src/org/openstreetmap/josm/gui/ExtendedDialog.java	(revision 2627)
@@ -44,4 +44,7 @@
     private String[] bToolTipTexts;
     private String[] bIcons;
+    private int cancelButtonIdx = -1;
+    private int defaultButtonIdx = -1;
+    private JButton defaultButton = null;
 
     /** true, if the dialog should include a help button */
@@ -171,4 +174,7 @@
 
         setupDialog();
+        if (defaultButton != null) {
+            getRootPane().setDefaultButton(defaultButton);
+        }
         setVisible(true);
         toggleSaveState();
@@ -200,4 +206,7 @@
 
             button = new JButton(action);
+            if (i == defaultButtonIdx-1) {
+                defaultButton = button;
+            }
             if(bIcons != null && bIcons[i] != null) {
                 button.setIcon(ImageProvider.get(bIcons[i]));
@@ -385,4 +394,22 @@
 
     /**
+     * Sets the button that will react to ENTER.
+     */
+    public ExtendedDialog setDefaultButton(int defaultButtonIdx) {
+        this.defaultButtonIdx = defaultButtonIdx;
+        return this;
+    }
+
+    /**
+     * Used in combination with toggle:
+     * If the user presses 'cancel' the toggle settings are ignored and not saved to the pref
+     * @param cancelButton index of the button that stands for cancel
+     */
+    public ExtendedDialog setCancelButton(int cancelButtonIdx) {
+        this.cancelButtonIdx = cancelButtonIdx;
+        return this;
+    }
+
+    /**
      * This function returns true if the dialog has been set to "do not show again"
      * @return true if dialog should not be shown again
@@ -394,5 +421,4 @@
         if(!toggleable)
             return false;
-
         this.togglePref = togglePref;
         // The pref is true, if the dialog should be shown.
@@ -405,5 +431,5 @@
      */
     private void toggleSaveState() {
-        if(!toggleable || toggleCheckbox == null)
+        if(!toggleable || toggleCheckbox == null || result == cancelButtonIdx || result == ExtendedDialog.DialogClosedOtherwise)
             return;
         Main.pref.put("message."+ togglePref, !toggleCheckbox.isSelected());
Index: trunk/src/org/openstreetmap/josm/gui/layer/geoimage/GeoImageLayer.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/layer/geoimage/GeoImageLayer.java	(revision 2626)
+++ trunk/src/org/openstreetmap/josm/gui/layer/geoimage/GeoImageLayer.java	(revision 2627)
@@ -10,4 +10,5 @@
 
 import java.awt.AlphaComposite;
+import java.awt.BorderLayout;
 import java.awt.Color;
 import java.awt.Component;
@@ -36,7 +37,10 @@
 
 import javax.swing.Icon;
+import javax.swing.JLabel;
 import javax.swing.JMenuItem;
 import javax.swing.JOptionPane;
+import javax.swing.JPanel;
 import javax.swing.JSeparator;
+import javax.swing.SwingConstants;
 
 import org.openstreetmap.josm.Main;
@@ -46,4 +50,5 @@
 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.MapView;
 import org.openstreetmap.josm.gui.PleaseWaitRunnable;
@@ -587,7 +592,55 @@
                 ImageViewerDialog.showImage(this, null);
             }
-        }
-        updateOffscreenBuffer = true;
-        Main.main.map.repaint();
+            updateOffscreenBuffer = true;
+            Main.main.map.repaint();
+        }
+    }
+
+    public void removeCurrentPhotoFromDisk() {
+        ImageEntry toDelete = null;
+        if (data != null && data.size() > 0 && currentPhoto >= 0 && currentPhoto < data.size()) {
+            toDelete = data.get(currentPhoto);
+
+            int result = new ExtendedDialog(
+                    Main.parent,
+                    tr("Delete image file from disk"),
+                    new String[] {tr("Cancel"), tr("Delete")})
+                .setButtonIcons(new String[] {"cancel.png", "dialogs/delete.png"})
+                .setContent(new JLabel(tr("<html><h3>Delete the file {0}  from the disk?<p>The image file will be permanently lost!"
+                    ,toDelete.file.getName()), ImageProvider.get("dialogs/geoimage/deletefromdisk"),SwingConstants.LEFT))
+                .toggleEnable("geoimage.deleteimagefromdisk")
+                .setToggleCheckboxText(tr("Always delete and don't show this dialog again"))
+                .setCancelButton(1)
+                .setDefaultButton(2)
+                .showDialog()
+                .getValue();
+
+            if(result == 2 || result == ExtendedDialog.DialogNotShown)
+            {
+                data.remove(currentPhoto);
+                if (currentPhoto >= data.size()) {
+                    currentPhoto = data.size() - 1;
+                }
+                if (currentPhoto >= 0) {
+                    ImageViewerDialog.showImage(this, data.get(currentPhoto));
+                } else {
+                    ImageViewerDialog.showImage(this, null);
+                }
+
+                if (toDelete.file.delete()) {
+                    System.out.println("File "+toDelete.file.toString()+" deleted. ");
+                } else {
+                    JOptionPane.showMessageDialog(
+                        Main.parent,
+                        tr("Image file could not be deleted."),
+                        tr("Error"),
+                        JOptionPane.ERROR_MESSAGE
+                    );
+                }
+
+                updateOffscreenBuffer = true;
+                Main.main.map.repaint();
+            }
+        }
     }
 
Index: trunk/src/org/openstreetmap/josm/gui/layer/geoimage/ImageViewerDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/layer/geoimage/ImageViewerDialog.java	(revision 2626)
+++ trunk/src/org/openstreetmap/josm/gui/layer/geoimage/ImageViewerDialog.java	(revision 2627)
@@ -39,4 +39,5 @@
     private static final String COMMAND_NEXT = "next";
     private static final String COMMAND_REMOVE = "remove";
+    private static final String COMMAND_REMOVE_FROM_DISK = "removefromdisk";
     private static final String COMMAND_PREVIOUS = "previous";
     private static final String COMMAND_COLLAPSE = "collapse";
@@ -93,6 +94,25 @@
         btnPrevious.getActionMap().put(APREVIOUS, prevAction);
 
-        JButton btnDelete = new JButton(new ImageAction(COMMAND_REMOVE, ImageProvider.get("dialogs", "delete"), tr("Remove photo from layer")));
+        final String DELETE_TEXT = tr("Remove photo from layer");
+        ImageAction delAction = new ImageAction(COMMAND_REMOVE, ImageProvider.get("dialogs", "delete"), DELETE_TEXT);
+        JButton btnDelete = new JButton(delAction);
         btnDelete.setPreferredSize(buttonDim);
+        Shortcut scDelete = Shortcut.registerShortcut(
+            "geoimage:deleteimagefromlayer", tr("Geoimage: {0}", DELETE_TEXT), KeyEvent.VK_DELETE, Shortcut.GROUP_DIRECT, Shortcut.SHIFT_DEFAULT);
+        Main.contentPane.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(scDelete.getKeyStroke(), DELETE_TEXT);
+        Main.contentPane.getActionMap().put(DELETE_TEXT, delAction);
+        btnDelete.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(scDelete.getKeyStroke(), DELETE_TEXT);
+        btnDelete.getActionMap().put(DELETE_TEXT, delAction);
+
+        ImageAction delFromDiskAction = new ImageAction(COMMAND_REMOVE_FROM_DISK, ImageProvider.get("dialogs", "geoimage/deletefromdisk"), tr("Delete image file from disk"));
+        JButton btnDeleteFromDisk = new JButton(delFromDiskAction);
+        btnDeleteFromDisk.setPreferredSize(buttonDim);
+        Shortcut scDeleteFromDisk = Shortcut.registerShortcut(
+            "geoimage:deletefilefromdisk", tr("Geoimage: {0}", tr("Delete File from disk")), KeyEvent.VK_DELETE, Shortcut.GROUP_DIRECT, Shortcut.GROUP_MENU + Shortcut.SHIFT_DEFAULT);
+        final String ADELFROMDISK = "Delete image file from disk";
+        Main.contentPane.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(scDeleteFromDisk.getKeyStroke(), ADELFROMDISK);
+        Main.contentPane.getActionMap().put(ADELFROMDISK, delFromDiskAction);
+        btnDeleteFromDisk.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(scDeleteFromDisk.getKeyStroke(), ADELFROMDISK);
+        btnDeleteFromDisk.getActionMap().put(ADELFROMDISK, delFromDiskAction);
 
         ImageAction nextAction = new ImageAction(COMMAND_NEXT, ImageProvider.get("dialogs", "next"), tr("Next"));
@@ -125,4 +145,5 @@
         buttons.add(Box.createRigidArea(new Dimension(14, 0)));
         buttons.add(btnDelete);
+        buttons.add(btnDeleteFromDisk);
 
         JPanel bottomPane = new JPanel();
@@ -176,4 +197,8 @@
                 if (currentLayer != null) {
                    currentLayer.removeCurrentPhoto();
+                }
+            } else if (COMMAND_REMOVE_FROM_DISK.equals(action)) {
+                if (currentLayer != null) {
+                    currentLayer.removeCurrentPhotoFromDisk();
                 }
             } else if (COMMAND_COLLAPSE.equals(action)) {
