Index: /trunk/src/org/openstreetmap/josm/gui/download/AbstractDownloadSourcePanel.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/download/AbstractDownloadSourcePanel.java	(revision 12654)
+++ /trunk/src/org/openstreetmap/josm/gui/download/AbstractDownloadSourcePanel.java	(revision 12655)
@@ -13,7 +13,12 @@
  * {@link DownloadDialog}.
  * @param <T> The type of the data that a download source uses.
+ * @since 12652
  */
 public abstract class AbstractDownloadSourcePanel<T> extends JPanel {
 
+    /**
+     * Called when creating a new {@link AbstractDownloadSourcePanel} for the given download source
+     * @param downloadSource The download source this panel is for
+     */
     public AbstractDownloadSourcePanel(final DownloadSource<T> downloadSource) {
         Objects.requireNonNull(downloadSource);
@@ -53,9 +58,10 @@
      * Performs the logic needed in case if the user triggered the download
      * action in {@link DownloadDialog}.
+     * @param settings The settings to check.
      * @return Returns {@code true} if the required procedure of handling the
      * download action succeeded and {@link DownloadDialog} can be closed, e.g. validation,
      * otherwise {@code false}.
      */
-    public abstract boolean checkDownload(Bounds bbox, DownloadSettings settings);
+    public abstract boolean checkDownload(DownloadSettings settings);
 
     /**
@@ -87,9 +93,8 @@
     /**
      * Tells the {@link DownloadSource} to start downloading
-     * @param currentBounds The bounds to download for
-     * @param downloadSettings The remaining download settings
+     * @param downloadSettings The download settings
      */
-    public void triggerDownload(Bounds currentBounds, DownloadSettings downloadSettings) {
-        getDownloadSource().doDownload(currentBounds, getData(), downloadSettings);
+    public void triggerDownload(DownloadSettings downloadSettings) {
+        getDownloadSource().doDownload(getData(), downloadSettings);
     }
 }
Index: /trunk/src/org/openstreetmap/josm/gui/download/DownloadDialog.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/download/DownloadDialog.java	(revision 12654)
+++ /trunk/src/org/openstreetmap/josm/gui/download/DownloadDialog.java	(revision 12655)
@@ -473,5 +473,5 @@
      */
     public DownloadSettings getDownloadSettings() {
-        return new DownloadSettings(isNewLayerRequired(), isZoomToDownloadedDataRequired());
+        return new DownloadSettings(currentBounds, isNewLayerRequired(), isZoomToDownloadedDataRequired());
     }
 
@@ -545,4 +545,7 @@
         }
 
+        /**
+         * Cancels the download
+         */
         public void run() {
             setCanceled(true);
@@ -569,4 +572,7 @@
         }
 
+        /**
+         * Starts the download, if possible
+         */
         public void run() {
             Component panel = downloadSourcesTab.getSelectedComponent();
@@ -574,9 +580,9 @@
                 AbstractDownloadSourcePanel<?> pnl = (AbstractDownloadSourcePanel<?>) panel;
                 DownloadSettings downloadSettings = getDownloadSettings();
-                if (pnl.checkDownload(currentBounds, downloadSettings)) {
+                if (pnl.checkDownload(downloadSettings)) {
                     rememberSettings();
                     setCanceled(false);
                     setVisible(false);
-                    pnl.triggerDownload(currentBounds, downloadSettings);
+                    pnl.triggerDownload(downloadSettings);
                 }
             }
Index: /trunk/src/org/openstreetmap/josm/gui/download/DownloadSettings.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/download/DownloadSettings.java	(revision 12654)
+++ /trunk/src/org/openstreetmap/josm/gui/download/DownloadSettings.java	(revision 12655)
@@ -2,19 +2,29 @@
 package org.openstreetmap.josm.gui.download;
 
+import java.util.Optional;
+
+import org.openstreetmap.josm.data.Bounds;
+
 /**
  * The global settings of {@link DownloadDialog}.
+ * <p>
+ * This class is immutable
+ * @since 12652
  */
 public final class DownloadSettings {
 
-    private boolean downloadAsNewLayer;
-    private boolean zoomToDownloadedData;
+    private final Bounds downloadBounds;
+    private final boolean downloadAsNewLayer;
+    private final boolean zoomToDownloadedData;
 
     /**
      * Initializes a new instance of {@code DownloadSettings}.
+     * @param bbox The bounding box
      * @param downloadAsNewLayer The flag defining if a new layer must be created for the downloaded data.
      * @param zoomToDownloadedData The flag defining if the map view, see {@link SlippyMapChooser},
      *                             must zoom to the downloaded data.
      */
-    public DownloadSettings(boolean downloadAsNewLayer, boolean zoomToDownloadedData) {
+    public DownloadSettings(Bounds bbox, boolean downloadAsNewLayer, boolean zoomToDownloadedData) {
+        this.downloadBounds = bbox;
         this.downloadAsNewLayer = downloadAsNewLayer;
         this.zoomToDownloadedData = zoomToDownloadedData;
@@ -36,3 +46,15 @@
         return this.zoomToDownloadedData;
     }
+
+    /**
+     * Gets the download bounds that are requested
+     * @return The bounds or an empty {@link Optional} if no bounds are selected
+     */
+    public Optional<Bounds> getDownloadBounds() {
+        if (downloadBounds == null) {
+            return Optional.empty();
+        } else {
+            return Optional.of(downloadBounds);
+        }
+    }
 }
Index: /trunk/src/org/openstreetmap/josm/gui/download/DownloadSource.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/download/DownloadSource.java	(revision 12654)
+++ /trunk/src/org/openstreetmap/josm/gui/download/DownloadSource.java	(revision 12655)
@@ -2,10 +2,10 @@
 package org.openstreetmap.josm.gui.download;
 
-
-import org.openstreetmap.josm.data.Bounds;
-
 /**
  * Defines an interface for different download sources.
+ * <p>
+ * Plugins may implement this to provide new download sources to the main download dialog.
  * @param <T> The type of the data that a download source uses.
+ * @since 12652
  */
 public interface DownloadSource<T> {
@@ -19,9 +19,8 @@
     /**
      * Downloads the data.
-     * @param bbox The bounding box. Can be null if no bounding box selected.
      * @param data The required data for the download source.
      * @param settings The global settings of the download dialog, see {@link DownloadDialog}.
      */
-    void doDownload(Bounds bbox, T data, DownloadSettings settings);
+    void doDownload(T data, DownloadSettings settings);
 
     /**
Index: /trunk/src/org/openstreetmap/josm/gui/download/OSMDownloadSource.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/download/OSMDownloadSource.java	(revision 12654)
+++ /trunk/src/org/openstreetmap/josm/gui/download/OSMDownloadSource.java	(revision 12655)
@@ -38,4 +38,5 @@
 /**
  * Class defines the way data is fetched from the OSM server.
+ * @since 12652
  */
 public class OSMDownloadSource implements DownloadSource<OSMDownloadSource.OSMDownloadData> {
@@ -47,5 +48,7 @@
 
     @Override
-    public void doDownload(Bounds bbox, OSMDownloadData data, DownloadSettings settings) {
+    public void doDownload(OSMDownloadData data, DownloadSettings settings) {
+        Bounds bbox = settings.getDownloadBounds()
+                .orElseThrow(() -> new IllegalArgumentException("OSM downloads requires bounds"));
         boolean zoom = settings.zoomToData();
         boolean newLayer = settings.asNewLayer();
@@ -126,4 +129,5 @@
     /**
      * The GUI representation of the OSM download source.
+     * @since 12652
      */
     public static class OSMDownloadSourcePanel extends AbstractDownloadSourcePanel<OSMDownloadData> {
@@ -138,4 +142,8 @@
         private static final BooleanProperty DOWNLOAD_NOTES = new BooleanProperty("download.osm.notes", false);
 
+        /**
+         * Creates a new {@link OSMDownloadSourcePanel}
+         * @param ds The osm download source the panel is for
+         */
         public OSMDownloadSourcePanel(OSMDownloadSource ds) {
             super(ds);
@@ -192,9 +200,9 @@
 
         @Override
-        public boolean checkDownload(Bounds bbox, DownloadSettings settings) {
+        public boolean checkDownload(DownloadSettings settings) {
             /*
              * It is mandatory to specify the area to download from OSM.
              */
-            if (bbox == null) {
+            if (!settings.getDownloadBounds().isPresent()) {
                 JOptionPane.showMessageDialog(
                         this.getParent(),
@@ -304,7 +312,7 @@
      */
     static class OSMDownloadData {
-        private boolean downloadOSMData;
-        private boolean downloadNotes;
-        private boolean downloadGPX;
+        private final boolean downloadOSMData;
+        private final boolean downloadNotes;
+        private final boolean downloadGPX;
 
         OSMDownloadData(boolean downloadOSMData, boolean downloadNotes, boolean downloadGPX) {
Index: /trunk/src/org/openstreetmap/josm/gui/download/OverpassDownloadSource.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/download/OverpassDownloadSource.java	(revision 12654)
+++ /trunk/src/org/openstreetmap/josm/gui/download/OverpassDownloadSource.java	(revision 12655)
@@ -41,4 +41,5 @@
 /**
  * Class defines the way data is fetched from Overpass API.
+ * @since 12652
  */
 public class OverpassDownloadSource implements DownloadSource<OverpassDownloadSource.OverpassDownloadData> {
@@ -50,10 +51,10 @@
 
     @Override
-    public void doDownload(Bounds bbox, OverpassDownloadData data, DownloadSettings settings) {
+    public void doDownload(OverpassDownloadData data, DownloadSettings settings) {
         /*
          * In order to support queries generated by the Overpass Turbo Query Wizard tool
          * which do not require the area to be specified.
          */
-        Bounds area = bbox != null ? bbox : new Bounds(0, 0, 0, 0);
+        Bounds area = settings.getDownloadBounds().orElse(new Bounds(0, 0, 0, 0));
         DownloadOsmTask task = new DownloadOsmTask();
         task.setZoomAfterDownload(settings.zoomToData());
@@ -81,4 +82,5 @@
     /**
      * The GUI representation of the Overpass download source.
+     * @since 12652
      */
     public static class OverpassDownloadSourcePanel extends AbstractDownloadSourcePanel<OverpassDownloadData> {
@@ -91,4 +93,8 @@
         private static final String ACTION_IMG_SUBDIR = "dialogs";
 
+        /**
+         * Create a new {@link OverpassDownloadSourcePanel}
+         * @param ds The download source to create the panel for
+         */
         public OverpassDownloadSourcePanel(OverpassDownloadSource ds) {
             super(ds);
@@ -208,5 +214,5 @@
 
         @Override
-        public boolean checkDownload(Bounds bbox, DownloadSettings settings) {
+        public boolean checkDownload(DownloadSettings settings) {
             String query = getData().getQuery();
 
@@ -215,5 +221,5 @@
              * is not restricted to bbox.
              */
-            if (bbox == null && query.contains("{{bbox}}")) {
+            if (!settings.getDownloadBounds().isPresent() && query.contains("{{bbox}}")) {
                 JOptionPane.showMessageDialog(
                         this.getParent(),
Index: /trunk/src/org/openstreetmap/josm/gui/download/OverpassQueryWizardDialog.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/download/OverpassQueryWizardDialog.java	(revision 12654)
+++ /trunk/src/org/openstreetmap/josm/gui/download/OverpassQueryWizardDialog.java	(revision 12655)
@@ -34,4 +34,5 @@
  * This dialog provides an easy and fast way to create an overpass query.
  * @since 12576
+ * @since 12652: Moved here
  */
 public final class OverpassQueryWizardDialog extends ExtendedDialog {
