Index: src/org/openstreetmap/josm/actions/downloadtasks/DownloadOsmTask.java
===================================================================
--- src/org/openstreetmap/josm/actions/downloadtasks/DownloadOsmTask.java	(revision 15348)
+++ src/org/openstreetmap/josm/actions/downloadtasks/DownloadOsmTask.java	(working copy)
@@ -467,9 +467,12 @@
                 if (remark != null && !remark.isEmpty()) {
                     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"));
+                }
             }
 
             rememberDownloadedData(dataSet);
Index: src/org/openstreetmap/josm/gui/download/OverpassDownloadSource.java
===================================================================
--- src/org/openstreetmap/josm/gui/download/OverpassDownloadSource.java	(revision 15348)
+++ src/org/openstreetmap/josm/gui/download/OverpassDownloadSource.java	(working copy)
@@ -51,6 +51,14 @@
  * @since 12652
  */
 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
     public AbstractDownloadSourcePanel<OverpassDownloadData> createPanel(DownloadDialog dialog) {
@@ -248,15 +256,7 @@
                         JOptionPane.QUESTION_MESSAGE,
                         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: src/org/openstreetmap/josm/io/BoundingBoxDownloader.java
===================================================================
--- src/org/openstreetmap/josm/io/BoundingBoxDownloader.java	(revision 15348)
+++ src/org/openstreetmap/josm/io/BoundingBoxDownloader.java	(working copy)
@@ -255,4 +255,12 @@
             this.limit = limit;
         }
     }
+
+    /**
+     * @return true if download is complete for the given bounding box (not filtered)
+     */
+    public boolean considerAsFullDownload() {
+        return true;
+    }
+
 }
Index: src/org/openstreetmap/josm/io/OverpassDownloadReader.java
===================================================================
--- src/org/openstreetmap/josm/io/OverpassDownloadReader.java	(revision 15348)
+++ src/org/openstreetmap/josm/io/OverpassDownloadReader.java	(working copy)
@@ -30,11 +30,13 @@
 import org.openstreetmap.josm.data.coor.LatLon;
 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;
 import org.openstreetmap.josm.data.preferences.BooleanProperty;
 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;
 import org.openstreetmap.josm.tools.HttpClient;
@@ -384,25 +386,30 @@
     public DataSet parseOsm(ProgressMonitor progressMonitor) throws OsmTransferException {
 
         DataSet ds = super.parseOsm(progressMonitor);
+        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);
 
-        // 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);
+                    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;
         }
-
-        return ds;
     }
 
     /**
@@ -416,4 +423,9 @@
                 .replaceAll("out( body| skel| ids)?( id| qt)?;", "out meta$2;")
                 .replaceAll("(?s)\\[out:(csv)[^\\]]*\\]", "[out:xml]");
     }
+
+    @Override
+    public boolean considerAsFullDownload() {
+        return overpassQuery.equals(OverpassDownloadSource.FULL_DOWNLOAD_QUERY);
+    }
 }
