Index: trunk/src/org/openstreetmap/josm/actions/OpenLocationAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/OpenLocationAction.java	(revision 2284)
+++ trunk/src/org/openstreetmap/josm/actions/OpenLocationAction.java	(revision 2285)
@@ -4,16 +4,20 @@
 import static org.openstreetmap.josm.tools.I18n.tr;
 
+import java.awt.GridBagConstraints;
 import java.awt.GridBagLayout;
 import java.awt.event.ActionEvent;
 import java.awt.event.KeyEvent;
+import java.util.Collections;
+import java.util.LinkedList;
+import java.util.List;
 
 import javax.swing.JCheckBox;
 import javax.swing.JLabel;
 import javax.swing.JPanel;
-import javax.swing.JTextField;
 
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.actions.downloadtasks.DownloadOsmTask;
 import org.openstreetmap.josm.gui.ExtendedDialog;
+import org.openstreetmap.josm.gui.widgets.HistoryComboBox;
 import org.openstreetmap.josm.tools.GBC;
 import org.openstreetmap.josm.tools.Shortcut;
@@ -34,22 +38,62 @@
     }
 
+    /**
+     * Restore the current history from the preferences
+     * 
+     * @param cbHistory
+     */
+    protected void restoreUploadAddressHistory(HistoryComboBox cbHistory) {
+        List<String> cmtHistory = new LinkedList<String>(Main.pref.getCollection(getClass().getName() + ".uploadAddressHistory", new LinkedList<String>()));
+        // we have to reverse the history, because ComboBoxHistory will reverse it again
+        // in addElement()
+        //
+        Collections.reverse(cmtHistory);
+        cbHistory.setPossibleItems(cmtHistory);
+    }
+
+    /**
+     * Remind the current history in the preferences
+     * @param cbHistory
+     */
+    protected void remindUploadAddressHistory(HistoryComboBox cbHistory) {
+        cbHistory.addCurrentItemToHistory();
+        Main.pref.putCollection(getClass().getName() + ".uploadAddressHistory", cbHistory.getHistory());
+    }
+
     public void actionPerformed(ActionEvent e) {
 
         JCheckBox layer = new JCheckBox(tr("Separate Layer"));
+        layer.setToolTipText(tr("Select if the data should be downloaded in a new layer"));
         layer.setSelected(Main.pref.getBoolean("download.newlayer"));
         JPanel all = new JPanel(new GridBagLayout());
-        all.add(new JLabel(tr("Enter URL to download:")), GBC.eol());
-        JTextField urltext = new JTextField(40);
-        all.add(urltext, GBC.eol());
-        all.add(layer, GBC.eol());
+        GridBagConstraints gc = new GridBagConstraints();
+        gc.fill = GridBagConstraints.HORIZONTAL;
+        gc.weightx = 1.0;
+        gc.anchor = GridBagConstraints.FIRST_LINE_START;
+        all.add(new JLabel(tr("Enter URL to download:")), gc);
+        HistoryComboBox uploadAdresses = new HistoryComboBox();
+        uploadAdresses.setToolTipText(tr("Enter an URL from where data should be downloaded"));
+        restoreUploadAddressHistory(uploadAdresses);
+        gc.gridy = 1;
+        all.add(uploadAdresses, gc);
+        gc.gridy = 2;
+        gc.fill = GridBagConstraints.BOTH;
+        gc.weighty = 1.0;
+        all.add(layer, gc);
         ExtendedDialog dialog = new ExtendedDialog(Main.parent,
                 tr("Download Location"),
                 new String[] {tr("Download URL"), tr("Cancel")}
         );
-        dialog.setContent(all);
+        dialog.setContent(all, false /* don't embedded content in JScrollpane  */);
         dialog.setButtonIcons(new String[] {"download.png", "cancel.png"});
+        dialog.setToolTipTexts(new String[] {
+                tr("Start downloading data"),
+                tr("Close dialog and cancel downloading")
+        });
+        dialog.configureContextsensitiveHelp("Help/Action/OpenLocation", true /* show help button */);
         dialog.showDialog();
         if (dialog.getValue() != 1) return;
-        openUrl(layer.isSelected(), urltext.getText());
+        remindUploadAddressHistory(uploadAdresses);
+        openUrl(layer.isSelected(), uploadAdresses.getText());
     }
 
@@ -60,4 +104,3 @@
         new DownloadOsmTask().loadUrl(new_layer, url, null);
     }
-
 }
Index: trunk/src/org/openstreetmap/josm/data/osm/RelationMember.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/RelationMember.java	(revision 2284)
+++ trunk/src/org/openstreetmap/josm/data/osm/RelationMember.java	(revision 2285)
@@ -104,12 +104,12 @@
      * @param role Can be null, in this case it's save as ""
      * @param member Cannot be null
+     * @throw IllegalArgumentException thrown if member is null
      */
-    public RelationMember(String role, OsmPrimitive member) {
+    public RelationMember(String role, OsmPrimitive member) throws IllegalArgumentException{
         if (role == null) {
             role = "";
         }
-        if (member == null) {
+        if (member == null)
             throw new IllegalArgumentException("Relation member cannot be null");
-        }
         this.role = role;
         this.member = member;
@@ -154,7 +154,6 @@
             RelationMember other = (RelationMember) obj;
             return member.equals(other.getMember()) && role.equals(other.getRole());
-        } else {
+        } else
             return false;
-        }
     }
 }
Index: trunk/src/org/openstreetmap/josm/gui/ExtendedDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/ExtendedDialog.java	(revision 2284)
+++ trunk/src/org/openstreetmap/josm/gui/ExtendedDialog.java	(revision 2285)
@@ -23,4 +23,6 @@
 
 import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.gui.help.HelpBrowserProxy;
+import org.openstreetmap.josm.gui.help.HelpBuilder;
 import org.openstreetmap.josm.tools.GBC;
 import org.openstreetmap.josm.tools.ImageProvider;
@@ -41,5 +43,12 @@
     private Component content;
     private final String[] bTexts;
+    private String[] bToolTipTexts;
     private String[] bIcons;
+
+    /** true, if the dialog should include a help button */
+    private boolean showHelpButton;
+    /** the help topic */
+    private String helpTopic;
+
     /**
      * set to true if the content of the extended dialog should
@@ -99,4 +108,14 @@
 
     /**
+     * Allows decorating the buttons with tooltips. Expects an String[] with translated
+     * tooltip texts.
+     * 
+     * @param toolTipTexts the tool tip texts. Ignored, if null.
+     */
+    public void setToolTipTexts(String[] toolTipTexts) {
+        this.bToolTipTexts = toolTipTexts;
+    }
+
+    /**
      * Sets the content that will be displayed in the message dialog.
      * 
@@ -187,4 +206,7 @@
                 button.setIcon(ImageProvider.get(bIcons[i]));
             }
+            if (bToolTipTexts != null && i < bToolTipTexts.length && bToolTipTexts[i] != null) {
+                button.setToolTipText(bToolTipTexts[i]);
+            }
 
             if(i == 0) {
@@ -193,4 +215,8 @@
             buttonsPanel.add(button, GBC.std().insets(2,2,2,2));
             buttons.add(button);
+        }
+        if (showHelpButton) {
+            buttonsPanel.add(new JButton(new HelpAction()), GBC.std().insets(2,2,2,2));
+            HelpBuilder.setHelpContext(getRootPane(),helpTopic);
         }
 
@@ -396,3 +422,34 @@
         return lbl;
     }
+
+    /**
+     * Configures how this dialog support for context sensitive help.
+     * <ul>
+     *  <li>if helpTopic is null, the dialog doesn't provide context sensitive help</li>
+     *  <li>if helpTopic != null, the dialog redirect user to the help page for this helpTopic when
+     *  the user clicks F1 in the dialog</li>
+     *  <li>if showHelpButton is true, the dialog displays "Help" button (rightmost button in
+     *  the button row)</li>
+     * </ul>
+     * 
+     * @param helpTopic the help topic
+     * @param showHelpButton true, if the dialog displays a help button
+     */
+    public void configureContextsensitiveHelp(String helpTopic, boolean showHelpButton) {
+        this.helpTopic = helpTopic;
+        this.showHelpButton = showHelpButton;
+    }
+
+
+    class HelpAction extends AbstractAction {
+        public HelpAction() {
+            putValue(SHORT_DESCRIPTION, tr("Show help information"));
+            putValue(NAME, tr("Help"));
+            putValue(SMALL_ICON, ImageProvider.get("help"));
+        }
+
+        public void actionPerformed(ActionEvent e) {
+            HelpBrowserProxy.getInstance().setUrlForHelpTopic(helpTopic);
+        }
+    }
 }
Index: trunk/src/org/openstreetmap/josm/gui/conflict/pair/nodes/NodeListTableCellRenderer.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/conflict/pair/nodes/NodeListTableCellRenderer.java	(revision 2284)
+++ trunk/src/org/openstreetmap/josm/gui/conflict/pair/nodes/NodeListTableCellRenderer.java	(revision 2285)
@@ -6,8 +6,6 @@
 import java.awt.Color;
 import java.awt.Component;
-import java.text.DecimalFormat;
 import java.util.ArrayList;
 import java.util.Collections;
-import java.util.logging.Logger;
 
 import javax.swing.BorderFactory;
Index: trunk/src/org/openstreetmap/josm/gui/io/UploadDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/io/UploadDialog.java	(revision 2284)
+++ trunk/src/org/openstreetmap/josm/gui/io/UploadDialog.java	(revision 2285)
@@ -46,5 +46,4 @@
 import javax.swing.event.ListDataEvent;
 import javax.swing.event.ListDataListener;
-import javax.swing.text.JTextComponent;
 
 import org.openstreetmap.josm.Main;
