Index: src/org/openstreetmap/josm/actions/downloadtasks/DownloadOsmTask.java
===================================================================
--- src/org/openstreetmap/josm/actions/downloadtasks/DownloadOsmTask.java	(Revision 1876)
+++ src/org/openstreetmap/josm/actions/downloadtasks/DownloadOsmTask.java	(Arbeitskopie)
@@ -49,7 +49,14 @@
         }
 
         @Override public void realRun() throws IOException, SAXException, OsmTransferException {
-            dataSet = reader.parseOsm(progressMonitor.createSubTaskMonitor(ProgressMonitor.ALL_TICKS, false));
+            final ProgressMonitor subProgressMonitor
+                = progressMonitor.createSubTaskMonitor(ProgressMonitor.ALL_TICKS, false);
+            subProgressMonitor.beginTask(tr("Contacting OSM Server..."), 10);
+            try {
+                dataSet = reader.parseOsm(subProgressMonitor);
+            } finally {
+                subProgressMonitor.finishTask();
+            }
         }
 
         protected OsmDataLayer getEditLayer() {
Index: src/org/openstreetmap/josm/io/ProgressInputStream.java
===================================================================
--- src/org/openstreetmap/josm/io/ProgressInputStream.java	(Revision 1876)
+++ src/org/openstreetmap/josm/io/ProgressInputStream.java	(Arbeitskopie)
@@ -29,7 +29,6 @@
             progressMonitor = NullProgressMonitor.INSTANCE;
         }
         this.progressMonitor = progressMonitor;
-        progressMonitor.beginTask(tr("Contacting OSM Server..."), 1);
         progressMonitor.indeterminateSubTask(null);
 
         try {
Index: src/org/openstreetmap/josm/io/BoundingBoxDownloader.java
===================================================================
--- src/org/openstreetmap/josm/io/BoundingBoxDownloader.java	(Revision 1876)
+++ src/org/openstreetmap/josm/io/BoundingBoxDownloader.java	(Arbeitskopie)
@@ -49,21 +49,27 @@
             GpxData result = null;
             for (int i = 0;!done;++i) {
                 progressMonitor.subTask(tr("Downloading points {0} to {1}...", i * 5000, ((i + 1) * 5000)));
-                InputStream in = getInputStream(url+i, progressMonitor.createSubTaskMonitor(1, true));
-                if (in == null) {
-                    break;
+                ProgressMonitor subProgressMonitor = progressMonitor.createSubTaskMonitor(1, true);
+                subProgressMonitor.beginTask(tr("Contacting OSM Server..."), 1);
+                try {
+                    InputStream in = getInputStream(url+i, subProgressMonitor);
+                    if (in == null) {
+                        break;
+                    }
+                    progressMonitor.setTicks(0);
+                    GpxData currentGpx = new GpxReader(in, null).data;
+                    if (result == null) {
+                        result = currentGpx;
+                    } else if (currentGpx.hasTrackPoints()) {
+                        result.mergeFrom(currentGpx);
+                    } else{
+                        done = true;
+                    }
+                    in.close();
+                    activeConnection = null;
+                } finally {
+                    subProgressMonitor.finishTask();
                 }
-                progressMonitor.setTicks(0);
-                GpxData currentGpx = new GpxReader(in, null).data;
-                if (result == null) {
-                    result = currentGpx;
-                } else if (currentGpx.hasTrackPoints()) {
-                    result.mergeFrom(currentGpx);
-                } else{
-                    done = true;
-                }
-                in.close();
-                activeConnection = null;
             }
             result.fromServer = true;
             return result;
@@ -97,16 +103,26 @@
      */
     @Override
     public DataSet parseOsm(ProgressMonitor progressMonitor) throws OsmTransferException {
-        progressMonitor.beginTask(tr("Contacting OSM Server..."), 10);
         try {
             progressMonitor.indeterminateSubTask(null);
-            final InputStream in = getInputStream("map?bbox="+lon1+","+lat1+","+lon2+","+lat2, progressMonitor.createSubTaskMonitor(9, false));
-            if (in == null)
-                return null;
-            final DataSet data = OsmReader.parseDataSet(in, progressMonitor.createSubTaskMonitor(1, false));
-            in.close();
-            activeConnection = null;
-            return data;
+            ProgressMonitor subProgressMonitor1 = progressMonitor.createSubTaskMonitor(9, false);
+            subProgressMonitor1.beginTask(tr("Prepare OSM data...", 2));
+            try {
+                final InputStream in = getInputStream("map?bbox="+lon1+","+lat1+","+lon2+","+lat2, subProgressMonitor1);
+                if (in == null)
+                    return null;
+                ProgressMonitor subProgressMonitor2 = progressMonitor.createSubTaskMonitor(1, false);
+                try {
+                    final DataSet data = OsmReader.parseDataSet(in, subProgressMonitor2);
+                    in.close();
+                    activeConnection = null;
+                    return data;
+                } finally {
+                    subProgressMonitor2.finishTask();
+                }
+            } finally {
+                subProgressMonitor1.finishTask();
+            }
         } catch (IOException e) {
             if (cancel)
                 return null;
Index: src/org/openstreetmap/josm/io/OsmReader.java
===================================================================
--- src/org/openstreetmap/josm/io/OsmReader.java	(Revision 1876)
+++ src/org/openstreetmap/josm/io/OsmReader.java	(Arbeitskopie)
@@ -462,7 +462,6 @@
             throw new SAXException(e1);
         }
 
-        progressMonitor.beginTask(tr("Prepare OSM data...", 2));
         try {
             for (Node n : reader.nodes.values()) {
                 reader.ds.addPrimitive(n);
