Index: /trunk/src/org/openstreetmap/josm/actions/downloadtasks/DownloadOsmTask.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/downloadtasks/DownloadOsmTask.java	(revision 15446)
+++ /trunk/src/org/openstreetmap/josm/actions/downloadtasks/DownloadOsmTask.java	(revision 15447)
@@ -477,7 +477,10 @@
                     rememberErrorMessage(remark);
                 }
-                // need to synthesize a download bounds lest the visual indication of downloaded area doesn't work
-                dataSet.addDataSource(new DataSource(currentBounds != null ? currentBounds :
-                    new Bounds(LatLon.ZERO), "OpenStreetMap server"));
+                if (!(reader instanceof BoundingBoxDownloader)
+                        || ((BoundingBoxDownloader) reader).considerAsFullDownload()) {
+                    // need to synthesize a download bounds lest the visual indication of downloaded area doesn't work
+                    dataSet.addDataSource(new DataSource(
+                            currentBounds != null ? currentBounds : new Bounds(LatLon.ZERO), "OpenStreetMap server"));
+                }
             }
 
Index: /trunk/src/org/openstreetmap/josm/gui/download/OverpassDownloadSource.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/download/OverpassDownloadSource.java	(revision 15446)
+++ /trunk/src/org/openstreetmap/josm/gui/download/OverpassDownloadSource.java	(revision 15447)
@@ -52,4 +52,12 @@
  */
 public class OverpassDownloadSource implements DownloadSource<OverpassDownloadSource.OverpassDownloadData> {
+    /** Overpass query to retrieve all nodes and related parent objects, */
+    public static final String FULL_DOWNLOAD_QUERY = "[out:xml]; \n"
+            + "(\n"
+            + "    node({{bbox}});\n"
+            + "<;\n"
+            + ");\n"
+            + "(._;>;);"
+            + "out meta;";
 
     @Override
@@ -249,13 +257,5 @@
                         JOptionPane.YES_OPTION);
                 if (doFix) {
-                    String repairedQuery = "[out:xml]; \n"
-                            + query + "\n"
-                            + "(\n"
-                            + "    node({{bbox}});\n"
-                            + "<;\n"
-                            + ");\n"
-                            + "(._;>;);"
-                            + "out meta;";
-                    this.overpassQuery.setText(repairedQuery);
+                    this.overpassQuery.setText(FULL_DOWNLOAD_QUERY);
                 } else {
                     return false;
Index: /trunk/src/org/openstreetmap/josm/io/BoundingBoxDownloader.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/io/BoundingBoxDownloader.java	(revision 15446)
+++ /trunk/src/org/openstreetmap/josm/io/BoundingBoxDownloader.java	(revision 15447)
@@ -256,3 +256,11 @@
         }
     }
+
+    /**
+     * @return true if download is complete for the given bounding box (not filtered)
+     */
+    public boolean considerAsFullDownload() {
+        return true;
+    }
+
 }
Index: /trunk/src/org/openstreetmap/josm/io/OverpassDownloadReader.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/io/OverpassDownloadReader.java	(revision 15446)
+++ /trunk/src/org/openstreetmap/josm/io/OverpassDownloadReader.java	(revision 15447)
@@ -31,4 +31,5 @@
 import org.openstreetmap.josm.data.osm.BBox;
 import org.openstreetmap.josm.data.osm.DataSet;
+import org.openstreetmap.josm.data.osm.DataSetMerger;
 import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
 import org.openstreetmap.josm.data.osm.PrimitiveId;
@@ -36,4 +37,5 @@
 import org.openstreetmap.josm.data.preferences.ListProperty;
 import org.openstreetmap.josm.data.preferences.StringProperty;
+import org.openstreetmap.josm.gui.download.OverpassDownloadSource;
 import org.openstreetmap.josm.gui.progress.ProgressMonitor;
 import org.openstreetmap.josm.io.NameFinder.SearchResult;
@@ -385,23 +387,28 @@
 
         DataSet ds = super.parseOsm(progressMonitor);
-
-        // add bounds if necessary (note that Overpass API does not return bounds in the response XML)
-        if (ds != null && ds.getDataSources().isEmpty() && overpassQuery.contains("{{bbox}}")) {
-            if (crosses180th) {
-                Bounds bounds = new Bounds(lat1, lon1, lat2, 180.0);
-                DataSource src = new DataSource(bounds, getBaseUrl());
-                ds.addDataSource(src);
-
-                bounds = new Bounds(lat1, -180.0, lat2, lon2);
-                src = new DataSource(bounds, getBaseUrl());
-                ds.addDataSource(src);
-            } else {
-                Bounds bounds = new Bounds(lat1, lon1, lat2, lon2);
-                DataSource src = new DataSource(bounds, getBaseUrl());
-                ds.addDataSource(src);
-            }
-        }
-
-        return ds;
+        if (!considerAsFullDownload()) {
+            DataSet noBounds = new DataSet();
+            DataSetMerger dsm = new DataSetMerger(noBounds, ds);
+            dsm.merge(null, false);
+            return dsm.getTargetDataSet();
+        } else {
+            // add bounds if necessary (note that Overpass API does not return bounds in the response XML)
+            if (ds != null && ds.getDataSources().isEmpty() && overpassQuery.contains("{{bbox}}")) {
+                if (crosses180th) {
+                    Bounds bounds = new Bounds(lat1, lon1, lat2, 180.0);
+                    DataSource src = new DataSource(bounds, getBaseUrl());
+                    ds.addDataSource(src);
+
+                    bounds = new Bounds(lat1, -180.0, lat2, lon2);
+                    src = new DataSource(bounds, getBaseUrl());
+                    ds.addDataSource(src);
+                } else {
+                    Bounds bounds = new Bounds(lat1, lon1, lat2, lon2);
+                    DataSource src = new DataSource(bounds, getBaseUrl());
+                    ds.addDataSource(src);
+                }
+            }
+            return ds;
+        }
     }
 
@@ -417,3 +424,8 @@
                 .replaceAll("(?s)\\[out:(csv)[^\\]]*\\]", "[out:xml]");
     }
+
+    @Override
+    public boolean considerAsFullDownload() {
+        return overpassQuery.equals(OverpassDownloadSource.FULL_DOWNLOAD_QUERY);
+    }
 }
