Index: /trunk/src/org/openstreetmap/josm/actions/DownloadAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/DownloadAction.java	(revision 2137)
+++ /trunk/src/org/openstreetmap/josm/actions/DownloadAction.java	(revision 2138)
@@ -46,20 +46,13 @@
 
         final String prefName = dialog.getClass().getName()+ ".geometry";
-        ExtendedDialog dialog = new ExtendedDialog(Main.parent, tr("Download"), new String[] {tr("OK"), tr("Cancel")}) {
-            @Override
-            public void setVisible(boolean visible) {
-                if (visible) {
-                    new WindowGeometry(
-                            prefName,
-                            WindowGeometry.centerInWindow(Main.parent, new Dimension(1000,600))
-                    ).apply(this);
-                } else {
-                    new WindowGeometry(this).remember(prefName);
-                }
-                super.setVisible(visible);
-            }
-        };
+        final WindowGeometry wg = WindowGeometry.centerInWindow(Main.parent,
+                new Dimension(1000,600));
+
+        ExtendedDialog dialog = new ExtendedDialog(Main.parent,
+                tr("Download"),
+                new String[] {tr("OK"), tr("Cancel")});
         dialog.setContent(downPanel, false /* don't use a scroll pane inside the dialog */);
         dialog.setButtonIcons(new String[] {"ok", "cancel"});
+        dialog.setRememberWindowGeometry(prefName, wg);
         return dialog;
     }
Index: /trunk/src/org/openstreetmap/josm/gui/ExtendedDialog.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/ExtendedDialog.java	(revision 2137)
+++ /trunk/src/org/openstreetmap/josm/gui/ExtendedDialog.java	(revision 2138)
@@ -25,4 +25,5 @@
 import org.openstreetmap.josm.tools.GBC;
 import org.openstreetmap.josm.tools.ImageProvider;
+import org.openstreetmap.josm.tools.WindowGeometry;
 
 
@@ -32,4 +33,6 @@
     public static final int DialogClosedOtherwise = 0;
     private boolean toggleable = false;
+    private String rememberSizePref = "";
+    private WindowGeometry defaultWindowGeometry = null;
     private String togglePref = "";
     private String toggleCheckboxText = tr("Do not show again");
@@ -59,4 +62,5 @@
      *   <li><code>toggleDisable</code></li>
      *   <li><code>setToggleCheckboxText</code></li>
+     *   <li><code>setRememberWindowGeometry</code></li>
      * </ul>
      * 
@@ -286,8 +290,37 @@
     @Override
     public void setVisible(boolean visible) {
-        super.setVisible(visible);
         if (visible) {
             repaint();
         }
+
+        // Ensure all required variables are available
+        if(!rememberSizePref.isEmpty() && defaultWindowGeometry != null) {
+            if(visible) {
+                new WindowGeometry(rememberSizePref,
+                        defaultWindowGeometry).apply(this);
+            } else {
+                new WindowGeometry(this).remember(rememberSizePref);
+            }
+        }
+        super.setVisible(visible);
+    }
+
+    /**
+     * Call this if you want the dialog to remember the size set by the user.
+     * Set the pref to <code>null</code> or to an empty string to disable again.
+     * By default, it's disabled.
+     * 
+     * Note: If you want to set the width of this dialog directly use the usual
+     * setSize, setPreferredSize, setMaxSize, setMinSize
+     * 
+     * @param pref  The preference to save the dimension to
+     * @param wg    The default window geometry that should be used if no
+     *              existing preference is found (only takes effect if
+     *              <code>pref</code> is not null or empty
+     * 
+     */
+    public void setRememberWindowGeometry(String pref, WindowGeometry wg) {
+        rememberSizePref = pref == null ? "" : pref;
+        defaultWindowGeometry = wg;
     }
 
