Index: src/org/openstreetmap/josm/actions/downloadtasks/DownloadGpsTask.java
===================================================================
--- src/org/openstreetmap/josm/actions/downloadtasks/DownloadGpsTask.java	(revision 14735)
+++ src/org/openstreetmap/josm/actions/downloadtasks/DownloadGpsTask.java	(working copy)
@@ -15,10 +15,8 @@
 import org.openstreetmap.josm.data.Bounds;
 import org.openstreetmap.josm.data.Bounds.ParseMethod;
 import org.openstreetmap.josm.data.ProjectionBounds;
-import org.openstreetmap.josm.data.ViewportData;
 import org.openstreetmap.josm.data.gpx.GpxData;
 import org.openstreetmap.josm.gui.MainApplication;
-import org.openstreetmap.josm.gui.MapFrame;
 import org.openstreetmap.josm.gui.PleaseWaitRunnable;
 import org.openstreetmap.josm.gui.io.importexport.GpxImporter;
 import org.openstreetmap.josm.gui.io.importexport.GpxImporter.GpxImporterData;
@@ -160,10 +158,6 @@
             } else {
                 mergeLayer.mergeFrom(layer);
                 mergeLayer.invalidate();
-                MapFrame map = MainApplication.getMap();
-                if (map != null && zoomAfterDownload && layer instanceof GpxLayer) {
-                    map.mapView.scheduleZoomTo(new ViewportData(layer.getViewProjectionBounds()));
-                }
                 return mergeLayer;
             }
         }
Index: src/org/openstreetmap/josm/gui/io/importexport/GpxImporter.java
===================================================================
--- src/org/openstreetmap/josm/gui/io/importexport/GpxImporter.java	(revision 14735)
+++ src/org/openstreetmap/josm/gui/io/importexport/GpxImporter.java	(working copy)
@@ -144,9 +144,7 @@
             final String gpxLayerName, String markerLayerName) {
         GpxLayer gpxLayer = null;
         MarkerLayer markerLayer = null;
-        if (data.hasRoutePoints() || data.hasTrackPoints()) {
-            gpxLayer = new GpxLayer(data, gpxLayerName, data.storageFile != null);
-        }
+        gpxLayer = new GpxLayer(data, gpxLayerName, data.storageFile != null);
         if (Config.getPref().getBoolean("marker.makeautomarkers", true) && !data.waypoints.isEmpty()) {
             markerLayer = new MarkerLayer(data, markerLayerName, data.storageFile, gpxLayer);
             if (markerLayer.data.isEmpty()) {
Index: src/org/openstreetmap/josm/io/BoundingBoxDownloader.java
===================================================================
--- src/org/openstreetmap/josm/io/BoundingBoxDownloader.java	(revision 14735)
+++ src/org/openstreetmap/josm/io/BoundingBoxDownloader.java	(working copy)
@@ -50,9 +50,10 @@
     private GpxData downloadRawGps(Bounds b, ProgressMonitor progressMonitor) throws IOException, OsmTransferException, SAXException {
         boolean done = false;
         GpxData result = null;
+        final int pointsPerPage = 5000; // see https://wiki.openstreetmap.org/wiki/API_v0.6#GPS_traces
         String url = "trackpoints?bbox="+b.getMinLon()+','+b.getMinLat()+','+b.getMaxLon()+','+b.getMaxLat()+"&page=";
         for (int i = 0; !done && !isCanceled(); ++i) {
-            progressMonitor.subTask(tr("Downloading points {0} to {1}...", i * 5000, (i + 1) * 5000));
+            progressMonitor.subTask(tr("Downloading points {0} to {1}...", i * pointsPerPage, (i + 1) * pointsPerPage));
             try (InputStream in = getInputStream(url+i, progressMonitor.createSubTaskMonitor(1, true))) {
                 if (in == null) {
                     break;
@@ -64,6 +65,10 @@
                 if (result == null) {
                     result = currentGpx;
                 } else if (currentGpx.hasTrackPoints()) {
+                    long count = currentGpx.getTrackPoints().count();
+                    Logging.debug("got {0} gpx points", count);
+                    if (count < pointsPerPage)
+                        done = true;
                     result.mergeFrom(currentGpx);
                 } else {
                     done = true;
