Index: src/org/openstreetmap/josm/actions/DownloadAction.java
===================================================================
--- src/org/openstreetmap/josm/actions/DownloadAction.java	(revision 94)
+++ src/org/openstreetmap/josm/actions/DownloadAction.java	(revision 95)
@@ -72,8 +72,4 @@
 		@Override public void realRun() throws IOException, SAXException {
 			dataSet = reader.parseOsm();
-			if (dataSet == null)
-				return;
-			if (dataSet.nodes.isEmpty())
-				JOptionPane.showMessageDialog(Main.main, "No data imported.");
 		}
 
@@ -81,4 +77,6 @@
 			if (dataSet == null)
 				return; // user cancelled download or error occoured
+			if (dataSet.nodes.isEmpty())
+				errorMessage = "No data imported.";
 			Layer layer = new OsmDataLayer(dataSet, "Data Layer", false);
 			if (Main.main.getMapFrame() == null)
@@ -120,4 +118,5 @@
 
 		@Override protected void cancel() {
+			reader.cancel();
 		}
 	}
Index: src/org/openstreetmap/josm/gui/PleaseWaitRunnable.java
===================================================================
--- src/org/openstreetmap/josm/gui/PleaseWaitRunnable.java	(revision 94)
+++ src/org/openstreetmap/josm/gui/PleaseWaitRunnable.java	(revision 95)
@@ -32,5 +32,5 @@
 public abstract class PleaseWaitRunnable implements Runnable {
 	public final JDialog pleaseWaitDlg;
-	private String errorMessage;
+	public String errorMessage;
 
 	private final JProgressBar progressBar = new JProgressBar();
Index: src/org/openstreetmap/josm/io/OsmServerReader.java
===================================================================
--- src/org/openstreetmap/josm/io/OsmServerReader.java	(revision 94)
+++ src/org/openstreetmap/josm/io/OsmServerReader.java	(revision 95)
@@ -47,29 +47,43 @@
 	 */
 	public Collection<Collection<GpsPoint>> parseRawGps() throws IOException, JDOMException {
-		String url = Main.pref.get("osm-server.url")+"/0.3/trackpoints?bbox="+lon1+","+lat1+","+lon2+","+lat2+"&page=";
-		Collection<Collection<GpsPoint>> data = new LinkedList<Collection<GpsPoint>>();
-		Collection<GpsPoint> list = new LinkedList<GpsPoint>();
-		
-		for (int i = 0;;++i) {
-			Reader r = getReader(url+i);
-			if (r == null)
-				break;
-			RawGpsReader gpsReader = new RawGpsReader(r);
-			Collection<Collection<GpsPoint>> allWays = gpsReader.parse();
-			boolean foundSomething = false;
-			for (Collection<GpsPoint> t : allWays) {
-				if (!t.isEmpty()) {
-					foundSomething = true;
-					list.addAll(t);
+		try {
+			String url = Main.pref.get("osm-server.url")+"/0.3/trackpoints?bbox="+lon1+","+lat1+","+lon2+","+lat2+"&page=";
+			Collection<Collection<GpsPoint>> data = new LinkedList<Collection<GpsPoint>>();
+			Collection<GpsPoint> list = new LinkedList<GpsPoint>();
+			
+			for (int i = 0;;++i) {
+				Reader r = getReader(url+i);
+				if (r == null)
+					break;
+				RawGpsReader gpsReader = new RawGpsReader(r);
+				Collection<Collection<GpsPoint>> allWays = gpsReader.parse();
+				boolean foundSomething = false;
+				for (Collection<GpsPoint> t : allWays) {
+					if (!t.isEmpty()) {
+						foundSomething = true;
+						list.addAll(t);
+					}
 				}
+				if (!foundSomething)
+					break;
+				r.close();
+				activeConnection = null;
 			}
-			if (!foundSomething)
-				break;
-			r.close();
-			activeConnection = null;
+	
+			data.add(list);
+			return data;
+		} catch (IOException e) {
+			if (cancel)
+				return null;
+			throw e;
+		} catch (JDOMException e) {
+			throw e;
+		} catch (Exception e) {
+			if (cancel)
+				return null;
+			if (e instanceof RuntimeException)
+				throw (RuntimeException)e;
+			throw new RuntimeException(e);
 		}
-
-		data.add(list);
-		return data;
 	}
 
@@ -80,12 +94,26 @@
 	 */
 	public DataSet parseOsm() throws SAXException, IOException {
-		Reader r = getReader(Main.pref.get("osm-server.url")+"/0.3/map?bbox="+lon1+","+lat1+","+lon2+","+lat2);
-		if (r == null)
-			return null;
-		currentAction.setText("Downloading OSM data...");
-		DataSet data = OsmReader.parseDataSet(r);
-		r.close();
-		activeConnection = null;
-		return data;
+		try {
+			final Reader r = getReader(Main.pref.get("osm-server.url")+"/0.3/map?bbox="+lon1+","+lat1+","+lon2+","+lat2);
+			if (r == null)
+				return null;
+			currentAction.setText("Downloading OSM data...");
+			final DataSet data = OsmReader.parseDataSet(r);
+			r.close();
+			activeConnection = null;
+			return data;
+		} catch (IOException e) {
+			if (cancel)
+				return null;
+			throw e;
+		} catch (SAXException e) {
+			throw e;
+		} catch (Exception e) {
+			if (cancel)
+				return null;
+			if (e instanceof RuntimeException)
+				throw (RuntimeException)e;
+			throw new RuntimeException(e);
+		}
 	}
 
