Index: trunk/src/org/openstreetmap/josm/gui/BookmarkList.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/BookmarkList.java	(revision 2343)
+++ trunk/src/org/openstreetmap/josm/gui/BookmarkList.java	(revision 2344)
@@ -10,4 +10,5 @@
 
 import javax.swing.DefaultListModel;
+import javax.swing.ImageIcon;
 import javax.swing.JLabel;
 import javax.swing.JList;
@@ -20,4 +21,5 @@
 import org.openstreetmap.josm.data.Preferences;
 import org.openstreetmap.josm.data.Preferences.Bookmark;
+import org.openstreetmap.josm.tools.ImageProvider;
 
 /**
@@ -83,6 +85,10 @@
     class BookmarkCellRenderer extends JLabel implements ListCellRenderer {
 
+        private ImageIcon icon;
+        
         public BookmarkCellRenderer() {
             setOpaque(true);
+            icon = ImageProvider.get("dialogs", "bookmark");
+            setIcon(icon);
         }
         
Index: trunk/src/org/openstreetmap/josm/gui/download/BookmarkSelection.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/download/BookmarkSelection.java	(revision 2343)
+++ trunk/src/org/openstreetmap/josm/gui/download/BookmarkSelection.java	(revision 2344)
@@ -6,5 +6,8 @@
 import java.awt.GridBagConstraints;
 import java.awt.GridBagLayout;
+import java.awt.Insets;
 import java.awt.event.ActionEvent;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
 
 import javax.swing.AbstractAction;
@@ -14,4 +17,5 @@
 import javax.swing.JPanel;
 import javax.swing.JScrollPane;
+import javax.swing.SwingUtilities;
 import javax.swing.event.ListSelectionEvent;
 import javax.swing.event.ListSelectionListener;
@@ -21,36 +25,51 @@
 import org.openstreetmap.josm.data.Preferences;
 import org.openstreetmap.josm.data.Preferences.Bookmark;
+import org.openstreetmap.josm.data.coor.CoordinateFormat;
 import org.openstreetmap.josm.gui.BookmarkList;
+import org.openstreetmap.josm.gui.JMultilineLabel;
 import org.openstreetmap.josm.tools.ImageProvider;
 
 /**
- * Bookmark selector.
- *
- * Provides selection, creation and deletion of bookmarks.
- * Extracted from old DownloadAction.
- *
- * @author Frederik Ramm <frederik@remote.org>
+ * DownloadAreaSelector which manages a list of "bookmarks", i.e. a list of
+ * name download areas.
  *
  */
 public class BookmarkSelection implements DownloadSelection {
 
+    /** the currently selected download area. One can add bookmarks for this
+     * area, if not null
+     */
     private Bounds currentArea;
+    /** the list of bookmarks */
     private BookmarkList bookmarks;
     
+    /** the parent download GUI */
+    private DownloadDialog parent;
+    
+    /** displays information about the current download area */
+    private JMultilineLabel lblCurrentDownloadArea;
+    /** the add action */
+    private AddAction actAdd;
+    
+    /**
+     * Creates the panel with the action buttons on the left 
+     * 
+     * @return the panel with the action buttons on the left
+     */
     protected JPanel buildButtonPanel() {
         JPanel pnl = new JPanel();
         pnl.setLayout(new GridBagLayout());
         GridBagConstraints gc = new GridBagConstraints();
-        gc.fill = GridBagConstraints.HORIZONTAL;
-        gc.weightx = 1.0;
-        gc.weighty = 0.0;
-        pnl.add(new JButton(new AddAction()), gc);
-
-        gc.gridy = 1;
+//        gc.fill = GridBagConstraints.HORIZONTAL;
+//        gc.weightx = 1.0;
+//        gc.weighty = 0.0;
+//        pnl.add(new JButton(actAdd = new AddAction()), gc);
+
+        gc.gridy = 0;
         RemoveAction removeAction = new RemoveAction();
         bookmarks.addListSelectionListener(removeAction);
         pnl.add(new JButton(removeAction), gc);
 
-        gc.gridy = 2;
+        gc.gridy = 1;
         RenameAction renameAction = new RenameAction();
         bookmarks.addListSelectionListener(renameAction);
@@ -62,4 +81,26 @@
         gc.gridy = 3;
         pnl.add(new JPanel(), gc); // just a filler
+        return pnl;
+    }
+    
+    protected JPanel buildDownloadAreaAddPanel() {
+        JPanel pnl = new JPanel();
+        pnl.setLayout(new GridBagLayout());
+        
+        GridBagConstraints  gc = new GridBagConstraints();
+        gc.anchor = GridBagConstraints.NORTHWEST;
+        gc.fill = GridBagConstraints.BOTH;
+        gc.weightx = 1.0;
+        gc.weighty = 1.0;
+        gc.insets = new Insets(5,5,5,5);
+        
+        pnl.add(lblCurrentDownloadArea = new JMultilineLabel(""), gc);
+        
+        gc.anchor = GridBagConstraints.NORTHEAST;
+        gc.fill = GridBagConstraints.HORIZONTAL;
+        gc.weightx = 0.0;
+        gc.weighty = 0.0;
+        gc.insets = new Insets(5,5,5,5);
+        pnl.add(new JButton(actAdd = new AddAction()), gc);
         return pnl;
     }
@@ -80,27 +121,67 @@
             }
         });
+        bookmarks.addMouseListener(new DoubleClickAdapter());
+        
+        gc.fill = GridBagConstraints.HORIZONTAL;
+        gc.weightx = 1.0;
+        gc.weighty = 0.0;        
+        gc.gridwidth = 2;
+        dlg.add(buildDownloadAreaAddPanel(),gc);
                 
+        gc.gridwidth = 1;
+        gc.gridx = 0;
+        gc.gridy = 1;
         gc.fill = GridBagConstraints.VERTICAL;
         gc.weightx = 0.0;
         gc.weighty = 1.0;        
         dlg.add(buildButtonPanel(),gc);
-        
+
+        gc.gridwidth = 1;
+        gc.gridx = 1;
+        gc.gridy = 1;
         gc.fill = GridBagConstraints.BOTH;
         gc.weightx = 1.0;
         gc.weighty = 1.0;   
         gc.gridx = 1;
-        dlg.add(new JScrollPane(bookmarks), gc);        
-    }
-    
+        dlg.add(new JScrollPane(bookmarks), gc);       
+        
+        this.parent = gui;
+    }
+    
+    protected void updateDownloadAreaLabel() {
+        if (currentArea == null) {
+            lblCurrentDownloadArea.setText(tr("<html>There is currently no download area selected.</html>"));
+        } else {
+            lblCurrentDownloadArea.setText(tr("<html><strong>Current download area</strong> (minlat,minlon, maxlat, maxlon): {0}, {1}, {2}, {3}</html>",
+                    currentArea.getMin().latToString(CoordinateFormat.DECIMAL_DEGREES),
+                    currentArea.getMin().lonToString(CoordinateFormat.DECIMAL_DEGREES),
+                    currentArea.getMax().latToString(CoordinateFormat.DECIMAL_DEGREES),
+                    currentArea.getMax().lonToString(CoordinateFormat.DECIMAL_DEGREES)
+                    )
+            );                   
+        }
+    }
+    
+    /**
+     * Sets the current download area 
+     * 
+     * @param area the download area. 
+     */
     public void setDownloadArea(Bounds area) {
         if (area == null) return;
         this.currentArea = area;
         bookmarks.clearSelection();
-    }
-    
+        updateDownloadAreaLabel();
+        actAdd.setEnabled(area != null);
+    }
+    
+    /**
+     * The action to add a new bookmark for the current download area.
+     *
+     */
     class AddAction extends AbstractAction {
         public AddAction() {
-            //putValue(NAME, tr("Add"));
-            putValue(SMALL_ICON, ImageProvider.get("dialogs", "add"));
+            putValue(NAME, tr("Create bookmark"));
+            putValue(SMALL_ICON, ImageProvider.get("dialogs", "bookmark-new"));
             putValue(SHORT_DESCRIPTION, tr("Add a bookmark for the currently selected download area"));
         }
@@ -193,4 +274,16 @@
         }       
     }
-   
+    
+    class DoubleClickAdapter extends MouseAdapter {
+        @Override
+        public void mouseClicked(MouseEvent e) {
+            if (!(SwingUtilities.isLeftMouseButton(e) && e.getClickCount() == 2)) 
+                return;
+            int idx = bookmarks.locationToIndex(e.getPoint());
+            if (idx < 0 || idx >= bookmarks.getModel().getSize())
+                return;
+            Bookmark b = (Bookmark)bookmarks.getModel().getElementAt(idx);
+            parent.startDownload(b.getArea());            
+        }       
+    }   
 }
Index: trunk/src/org/openstreetmap/josm/gui/download/DownloadDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/download/DownloadDialog.java	(revision 2343)
+++ trunk/src/org/openstreetmap/josm/gui/download/DownloadDialog.java	(revision 2344)
@@ -55,4 +55,5 @@
     static private DownloadDialog instance;
     
+    
     /**
      * Replies the unique instance of the download dialog
@@ -75,4 +76,7 @@
     private JCheckBox cbDownloadOsmData = new JCheckBox(tr("OpenStreetMap data"), true);
     private JCheckBox cbDownloadGpxData = new JCheckBox(tr("Raw GPS data"));
+    /** the download action and button */
+    private DownloadAction actDownload;
+    private SideButton btnDownload;
 
     
@@ -124,6 +128,7 @@
         JPanel pnl = new JPanel();
         pnl.setLayout(new FlowLayout());
-        
-        pnl.add(new SideButton(new DownloadAction()));
+         
+        pnl.add(btnDownload = new SideButton(actDownload = new DownloadAction()));
+        btnDownload.setFocusable(true);
         pnl.add(new SideButton(new CancelAction()));
         pnl.add(new SideButton(new ContextSensitiveHelpAction(ht("/Dialog/DownloadDialog"))));
@@ -199,4 +204,13 @@
         }
         updateSizeCheck();
+    }
+    
+    /**
+     * Invoked by 
+     * @param b
+     */
+    public void startDownload(Bounds b) {
+        this.currentBounds = b;
+        actDownload.run();
     }
     
@@ -343,5 +357,5 @@
         }
         
-        public void actionPerformed(ActionEvent e) {
+        public void run() {
             if (currentBounds == null) {
                 JOptionPane.showMessageDialog(
@@ -367,5 +381,9 @@
             }
             setCanceled(false);
-            setVisible(false);            
+            setVisible(false);  
+        }
+        
+        public void actionPerformed(ActionEvent e) {
+            run();
         }       
     }
@@ -375,4 +393,9 @@
         public void windowClosing(WindowEvent e) {
             new CancelAction().run();
+        }
+
+        @Override
+        public void windowActivated(WindowEvent e) {
+            btnDownload.requestFocusInWindow();
         }        
     }
