Index: trunk/src/org/openstreetmap/josm/Main.java
===================================================================
--- trunk/src/org/openstreetmap/josm/Main.java	(revision 1142)
+++ trunk/src/org/openstreetmap/josm/Main.java	(revision 1146)
@@ -484,5 +484,5 @@
         if (s.startsWith("file:")) {
             try {
-                main.menu.open.openFile(new File(new URI(s)));
+                main.menu.openFile.openFile(new File(new URI(s)));
             } catch (URISyntaxException e) {
                 JOptionPane.showMessageDialog(Main.parent, tr("Ignoring malformed file url: \"{0}\"", s));
@@ -501,5 +501,5 @@
         }
 
-        main.menu.open.openFile(new File(s));
+        main.menu.openFile.openFile(new File(s));
     }
 
Index: trunk/src/org/openstreetmap/josm/actions/OpenAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/OpenAction.java	(revision 1142)
+++ 	(revision )
@@ -1,150 +1,0 @@
-// License: GPL. Copyright 2007 by Immanuel Scholz and others
-package org.openstreetmap.josm.actions;
-
-import static org.openstreetmap.josm.tools.I18n.tr;
-
-import java.awt.event.ActionEvent;
-import java.awt.event.KeyEvent;
-import java.io.InputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.util.zip.GZIPInputStream;
-
-import javax.swing.JFileChooser;
-import javax.swing.JOptionPane;
-
-import org.openstreetmap.josm.Main;
-import org.openstreetmap.josm.data.osm.DataSet;
-import org.openstreetmap.josm.gui.layer.GpxLayer;
-import org.openstreetmap.josm.gui.layer.OsmDataLayer;
-import org.openstreetmap.josm.gui.layer.markerlayer.MarkerLayer;
-import org.openstreetmap.josm.io.GpxReader;
-import org.openstreetmap.josm.io.NmeaReader;
-import org.openstreetmap.josm.io.OsmReader;
-import org.xml.sax.SAXException;
-import org.openstreetmap.josm.tools.Shortcut;
-
-/**
- * Open a file chooser dialog and select an file to import. Then call the gpx-import
- * driver. Finally open an internal frame into the main window with the gpx data shown.
- *
- * @author imi
- */
-public class OpenAction extends DiskAccessAction {
-
-	/**
-	 * Create an open action. The name is "Open a file".
-	 */
-	public OpenAction() {
-		super(tr("Open ..."), "open", tr("Open a file."),
-		Shortcut.registerShortcut("system:open", tr("File: {0}", tr("Open ...")), KeyEvent.VK_O, Shortcut.GROUP_MENU));
-	}
-
-	public void actionPerformed(ActionEvent e) {
-		JFileChooser fc = createAndOpenFileChooser(true, true, null);
-		if (fc == null)
-			return;
-		File[] files = fc.getSelectedFiles();
-		for (int i = files.length; i > 0; --i)
-			openFile(files[i-1]);
-	}
-
-	/**
-	 * Open the given file.
-	 */
-	public void openFile(File file) {
-		try {
-			if (asGpxData(file.getName()))
-				openFileAsGpx(file);
-			else if (asNmeaData(file.getName()))
-				openFileAsNmea(file);
-			else
-				openAsData(file);
-		} catch (SAXException x) {
-			x.printStackTrace();
-			JOptionPane.showMessageDialog(Main.parent, tr("Error while parsing {0}",file.getName())+": "+x.getMessage());
-		} catch (IOException x) {
-			x.printStackTrace();
-			JOptionPane.showMessageDialog(Main.parent, tr("Could not read \"{0}\"",file.getName())+"\n"+x.getMessage());
-		}
-	}
-
-	private void openAsData(File file) throws SAXException, IOException, FileNotFoundException {
-		String fn = file.getName();
-		if (ExtensionFileFilter.filters[ExtensionFileFilter.OSM].acceptName(fn)) {
-			DataSet dataSet = OsmReader.parseDataSet(new FileInputStream(file), null, Main.pleaseWaitDlg);
-			OsmDataLayer layer = new OsmDataLayer(dataSet, file.getName(), file);
-			Main.main.addLayer(layer);
-			layer.fireDataChange();
-		}
-		else
-			JOptionPane.showMessageDialog(Main.parent, fn+": "+tr("Unknown file extension: {0}", fn.substring(file.getName().lastIndexOf('.')+1)));
-	}
-
-	private void openFileAsGpx(File file) throws SAXException, IOException, FileNotFoundException {
-		String fn = file.getName();
-		if (ExtensionFileFilter.filters[ExtensionFileFilter.GPX].acceptName(fn)) {
-			GpxReader r = null;
-			InputStream is;
-			if (file.getName().endsWith(".gpx.gz")) {
-				is = new GZIPInputStream(new FileInputStream(file));
-			} else {
-				is = new FileInputStream(file);
-			}
-			// Workaround for SAX BOM bug
-			// http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6206835
-			if(!((is.read()==0xef)&&(is.read()==0xbb)&&(is.read()==0xbf))) {
-				is.close();
-				if (file.getName().endsWith(".gpx.gz")) {
-					is = new GZIPInputStream(new FileInputStream(file));
-				} else {
-					is = new FileInputStream(file);
-				}
-			}
-			r = new GpxReader(is,file.getAbsoluteFile().getParentFile());
-			r.data.storageFile = file;
-			GpxLayer gpxLayer = new GpxLayer(r.data, fn);
-			Main.main.addLayer(gpxLayer);
-			if (Main.pref.getBoolean("marker.makeautomarkers", true)) {
-				MarkerLayer ml = new MarkerLayer(r.data, tr("Markers from {0}", fn), file, gpxLayer);
-				if (ml.data.size() > 0) {
-					Main.main.addLayer(ml);
-				}
-			}
-
-		} else {
-			throw new IllegalStateException();
-		}
-    }
-
-	private void openFileAsNmea(File file) throws IOException, FileNotFoundException {
-		String fn = file.getName();
-		if (ExtensionFileFilter.filters[ExtensionFileFilter.NMEA].acceptName(fn)) {
-			NmeaReader r = new NmeaReader(new FileInputStream(file), file.getAbsoluteFile().getParentFile());
-			r.data.storageFile = file;
-			GpxLayer gpxLayer = new GpxLayer(r.data, fn);
-			Main.main.addLayer(gpxLayer);
-			if (Main.pref.getBoolean("marker.makeautomarkers", true)) {
-				MarkerLayer ml = new MarkerLayer(r.data, tr("Markers from {0}", fn), file, gpxLayer);
-				if (ml.data.size() > 0) {
-					Main.main.addLayer(ml);
-				}
-			}
-
-		} else {
-			throw new IllegalStateException();
-		}
-    }
-
-	private boolean asGpxData(String fn) {
-		return ExtensionFileFilter.filters[ExtensionFileFilter.GPX].acceptName(fn);
-	}
-
-	private boolean asNmeaData(String fn) {
-		return ExtensionFileFilter.filters[ExtensionFileFilter.NMEA].acceptName(fn);
-	}
-
-
-}
Index: trunk/src/org/openstreetmap/josm/actions/OpenFileAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/OpenFileAction.java	(revision 1146)
+++ trunk/src/org/openstreetmap/josm/actions/OpenFileAction.java	(revision 1146)
@@ -0,0 +1,150 @@
+// License: GPL. Copyright 2007 by Immanuel Scholz and others
+package org.openstreetmap.josm.actions;
+
+import static org.openstreetmap.josm.tools.I18n.tr;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.KeyEvent;
+import java.io.InputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.util.zip.GZIPInputStream;
+
+import javax.swing.JFileChooser;
+import javax.swing.JOptionPane;
+
+import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.data.osm.DataSet;
+import org.openstreetmap.josm.gui.layer.GpxLayer;
+import org.openstreetmap.josm.gui.layer.OsmDataLayer;
+import org.openstreetmap.josm.gui.layer.markerlayer.MarkerLayer;
+import org.openstreetmap.josm.io.GpxReader;
+import org.openstreetmap.josm.io.NmeaReader;
+import org.openstreetmap.josm.io.OsmReader;
+import org.xml.sax.SAXException;
+import org.openstreetmap.josm.tools.Shortcut;
+
+/**
+ * Open a file chooser dialog and select an file to import. Then call the gpx-import
+ * driver. Finally open an internal frame into the main window with the gpx data shown.
+ *
+ * @author imi
+ */
+public class OpenFileAction extends DiskAccessAction {
+
+	/**
+	 * Create an open action. The name is "Open a file".
+	 */
+	public OpenFileAction() {
+		super(tr("Open ..."), "open", tr("Open a file."),
+		Shortcut.registerShortcut("system:open", tr("File: {0}", tr("Open ...")), KeyEvent.VK_O, Shortcut.GROUP_MENU));
+	}
+
+	public void actionPerformed(ActionEvent e) {
+		JFileChooser fc = createAndOpenFileChooser(true, true, null);
+		if (fc == null)
+			return;
+		File[] files = fc.getSelectedFiles();
+		for (int i = files.length; i > 0; --i)
+			openFile(files[i-1]);
+	}
+
+	/**
+	 * Open the given file.
+	 */
+	public void openFile(File file) {
+		try {
+			if (asGpxData(file.getName()))
+				openFileAsGpx(file);
+			else if (asNmeaData(file.getName()))
+				openFileAsNmea(file);
+			else
+				openAsData(file);
+		} catch (SAXException x) {
+			x.printStackTrace();
+			JOptionPane.showMessageDialog(Main.parent, tr("Error while parsing {0}",file.getName())+": "+x.getMessage());
+		} catch (IOException x) {
+			x.printStackTrace();
+			JOptionPane.showMessageDialog(Main.parent, tr("Could not read \"{0}\"",file.getName())+"\n"+x.getMessage());
+		}
+	}
+
+	private void openAsData(File file) throws SAXException, IOException, FileNotFoundException {
+		String fn = file.getName();
+		if (ExtensionFileFilter.filters[ExtensionFileFilter.OSM].acceptName(fn)) {
+			DataSet dataSet = OsmReader.parseDataSet(new FileInputStream(file), null, Main.pleaseWaitDlg);
+			OsmDataLayer layer = new OsmDataLayer(dataSet, file.getName(), file);
+			Main.main.addLayer(layer);
+			layer.fireDataChange();
+		}
+		else
+			JOptionPane.showMessageDialog(Main.parent, fn+": "+tr("Unknown file extension: {0}", fn.substring(file.getName().lastIndexOf('.')+1)));
+	}
+
+	private void openFileAsGpx(File file) throws SAXException, IOException, FileNotFoundException {
+		String fn = file.getName();
+		if (ExtensionFileFilter.filters[ExtensionFileFilter.GPX].acceptName(fn)) {
+			GpxReader r = null;
+			InputStream is;
+			if (file.getName().endsWith(".gpx.gz")) {
+				is = new GZIPInputStream(new FileInputStream(file));
+			} else {
+				is = new FileInputStream(file);
+			}
+			// Workaround for SAX BOM bug
+			// http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6206835
+			if(!((is.read()==0xef)&&(is.read()==0xbb)&&(is.read()==0xbf))) {
+				is.close();
+				if (file.getName().endsWith(".gpx.gz")) {
+					is = new GZIPInputStream(new FileInputStream(file));
+				} else {
+					is = new FileInputStream(file);
+				}
+			}
+			r = new GpxReader(is,file.getAbsoluteFile().getParentFile());
+			r.data.storageFile = file;
+			GpxLayer gpxLayer = new GpxLayer(r.data, fn);
+			Main.main.addLayer(gpxLayer);
+			if (Main.pref.getBoolean("marker.makeautomarkers", true)) {
+				MarkerLayer ml = new MarkerLayer(r.data, tr("Markers from {0}", fn), file, gpxLayer);
+				if (ml.data.size() > 0) {
+					Main.main.addLayer(ml);
+				}
+			}
+
+		} else {
+			throw new IllegalStateException();
+		}
+    }
+
+	private void openFileAsNmea(File file) throws IOException, FileNotFoundException {
+		String fn = file.getName();
+		if (ExtensionFileFilter.filters[ExtensionFileFilter.NMEA].acceptName(fn)) {
+			NmeaReader r = new NmeaReader(new FileInputStream(file), file.getAbsoluteFile().getParentFile());
+			r.data.storageFile = file;
+			GpxLayer gpxLayer = new GpxLayer(r.data, fn);
+			Main.main.addLayer(gpxLayer);
+			if (Main.pref.getBoolean("marker.makeautomarkers", true)) {
+				MarkerLayer ml = new MarkerLayer(r.data, tr("Markers from {0}", fn), file, gpxLayer);
+				if (ml.data.size() > 0) {
+					Main.main.addLayer(ml);
+				}
+			}
+
+		} else {
+			throw new IllegalStateException();
+		}
+    }
+
+	private boolean asGpxData(String fn) {
+		return ExtensionFileFilter.filters[ExtensionFileFilter.GPX].acceptName(fn);
+	}
+
+	private boolean asNmeaData(String fn) {
+		return ExtensionFileFilter.filters[ExtensionFileFilter.NMEA].acceptName(fn);
+	}
+
+
+}
Index: trunk/src/org/openstreetmap/josm/actions/OpenLocationAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/OpenLocationAction.java	(revision 1146)
+++ trunk/src/org/openstreetmap/josm/actions/OpenLocationAction.java	(revision 1146)
@@ -0,0 +1,74 @@
+// License: GPL. Copyright 2007 by Immanuel Scholz and others
+package org.openstreetmap.josm.actions;
+
+import static org.openstreetmap.josm.tools.I18n.tr;
+
+import java.awt.GridBagLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.KeyEvent;
+import java.io.InputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.util.zip.GZIPInputStream;
+
+import javax.swing.JCheckBox;
+import javax.swing.JFileChooser;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JTextField;
+
+import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.actions.downloadtasks.DownloadOsmTask;
+import org.openstreetmap.josm.data.osm.DataSet;
+import org.openstreetmap.josm.gui.layer.GpxLayer;
+import org.openstreetmap.josm.gui.layer.OsmDataLayer;
+import org.openstreetmap.josm.gui.layer.markerlayer.MarkerLayer;
+import org.openstreetmap.josm.io.GpxReader;
+import org.openstreetmap.josm.io.NmeaReader;
+import org.openstreetmap.josm.io.OsmReader;
+import org.openstreetmap.josm.io.OsmServerLocationReader;
+import org.xml.sax.SAXException;
+import org.openstreetmap.josm.tools.GBC;
+import org.openstreetmap.josm.tools.Shortcut;
+
+/**
+ * Open an URL input dialog and load data from the given URL.
+ *
+ * @author imi
+ */
+public class OpenLocationAction extends JosmAction {
+
+	/**
+	 * Create an open action. The name is "Open a file".
+	 */
+	public OpenLocationAction() {
+		super(tr("Open Location..."), "open", tr("Open a URL."),
+		Shortcut.registerShortcut("system:open_location", tr("File: {0}", tr("Open Location...")), KeyEvent.VK_L, Shortcut.GROUP_MENU), true);
+	}
+
+	public void actionPerformed(ActionEvent e) {
+
+	    JCheckBox layer = new JCheckBox(tr("Separate Layer"));
+	    layer.setSelected(Main.pref.getBoolean("download.newlayer"));
+	    JPanel all = new JPanel(new GridBagLayout());
+	    all.add(new JLabel("Enter URL to download:"), GBC.eol());
+	    JTextField urltext = new JTextField(40);
+	    all.add(urltext, GBC.eol());
+	    all.add(layer, GBC.eol());
+	    int answer = JOptionPane.showConfirmDialog(Main.parent, all, tr("Download Location"), JOptionPane.OK_CANCEL_OPTION);
+	    if (answer != JOptionPane.OK_OPTION)
+	        return;
+	    openUrl(layer.isSelected(), urltext.getText());
+	}
+
+	/**
+	 * Open the given file.
+	 */
+	public void openUrl(boolean new_layer, String url) {
+	    new DownloadOsmTask().loadUrl(new_layer, url);
+	}
+
+}
Index: trunk/src/org/openstreetmap/josm/actions/downloadtasks/DownloadOsmTask.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/downloadtasks/DownloadOsmTask.java	(revision 1142)
+++ trunk/src/org/openstreetmap/josm/actions/downloadtasks/DownloadOsmTask.java	(revision 1146)
@@ -16,4 +16,6 @@
 import org.openstreetmap.josm.gui.layer.OsmDataLayer;
 import org.openstreetmap.josm.io.BoundingBoxDownloader;
+import org.openstreetmap.josm.io.OsmServerLocationReader;
+import org.openstreetmap.josm.io.OsmServerReader;
 import org.openstreetmap.josm.data.Bounds;
 import org.openstreetmap.josm.data.coor.LatLon;
@@ -30,9 +32,9 @@
 
 	private static class Task extends PleaseWaitRunnable {
-		private BoundingBoxDownloader reader;
+		private OsmServerReader reader;
 		private DataSet dataSet;
 		private boolean newLayer;
 
-		public Task(boolean newLayer, BoundingBoxDownloader reader) {
+		public Task(boolean newLayer, OsmServerReader reader) {
 			super(tr("Downloading data"));
 			this.reader = reader;
@@ -83,4 +85,12 @@
 		Main.worker.execute(task);
     }
+    
+    public void loadUrl(boolean new_layer, String url) {
+        Task task = new Task(new_layer, new OsmServerLocationReader(url));
+        Main.worker.execute(task);
+    }
+    
+    
+    
 
 	public JCheckBox getCheckBox() {
Index: trunk/src/org/openstreetmap/josm/gui/MainApplet.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/MainApplet.java	(revision 1142)
+++ trunk/src/org/openstreetmap/josm/gui/MainApplet.java	(revision 1146)
@@ -108,5 +108,5 @@
 		m.remove(m.fileMenu);
 		m.editMenu.add(new UploadPreferencesAction());
-		m.open.setEnabled(false);
+		m.openFile.setEnabled(false);
 		m.exit.setEnabled(false);
 		m.save.setEnabled(false);
Index: trunk/src/org/openstreetmap/josm/gui/MainMenu.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/MainMenu.java	(revision 1142)
+++ trunk/src/org/openstreetmap/josm/gui/MainMenu.java	(revision 1146)
@@ -20,4 +20,5 @@
 import org.openstreetmap.josm.actions.AlignInCircleAction;
 import org.openstreetmap.josm.actions.AlignInLineAction;
+import org.openstreetmap.josm.actions.OpenLocationAction;
 import org.openstreetmap.josm.actions.OrthogonalizeAction;
 import org.openstreetmap.josm.actions.AutoScaleAction;
@@ -36,5 +37,5 @@
 import org.openstreetmap.josm.actions.MergeNodesAction;
 import org.openstreetmap.josm.actions.NewAction;
-import org.openstreetmap.josm.actions.OpenAction;
+import org.openstreetmap.josm.actions.OpenFileAction;
 import org.openstreetmap.josm.actions.PasteAction;
 import org.openstreetmap.josm.actions.PasteTagsAction;
@@ -76,5 +77,6 @@
     /* File menu */
     public final NewAction newAction = new NewAction();
-    public final OpenAction open = new OpenAction();
+    public final OpenFileAction openFile = new OpenFileAction();
+    public final OpenLocationAction openLocation = new OpenLocationAction();
     public final JosmAction save = new SaveAction(null);
     public final JosmAction saveAs = new SaveAsAction(null);
@@ -167,5 +169,6 @@
 
         add(fileMenu, newAction);
-        add(fileMenu, open);
+        add(fileMenu, openFile);
+        add(fileMenu, openLocation);
         fileMenu.addSeparator();
         add(fileMenu, save);
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/RelationEditor.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/RelationEditor.java	(revision 1142)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/RelationEditor.java	(revision 1146)
@@ -539,8 +539,7 @@
 		}
 		if (download) {
-			OsmServerObjectReader reader = new OsmServerObjectReader();
+			OsmServerObjectReader reader = new OsmServerObjectReader(clone.id, OsmServerObjectReader.TYPE_REL, true);
 			try {
-				DataSet dataSet = reader.parseOsm(clone.id,
-						OsmServerObjectReader.TYPE_REL, true);
+				DataSet dataSet = reader.parseOsm();
 				if (dataSet != null) {
 					final MergeVisitor visitor = new MergeVisitor(Main.main
Index: trunk/src/org/openstreetmap/josm/io/OsmServerLocationReader.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/OsmServerLocationReader.java	(revision 1146)
+++ trunk/src/org/openstreetmap/josm/io/OsmServerLocationReader.java	(revision 1146)
@@ -0,0 +1,56 @@
+//License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.io;
+
+import static org.openstreetmap.josm.tools.I18n.tr;
+
+import java.io.IOException;
+import java.io.InputStream;
+
+import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.data.osm.DataSet;
+import org.xml.sax.SAXException;
+
+public class OsmServerLocationReader extends OsmServerReader {
+ 
+    String url;
+    
+    public OsmServerLocationReader(String url) {
+        this.url = url;
+    }
+    
+    /**
+     * Method to download OSM files from somewhere
+     */
+    public DataSet parseOsm() throws SAXException, IOException {
+        try {
+            Main.pleaseWaitDlg.progress.setValue(0);
+            Main.pleaseWaitDlg.currentAction.setText(tr("Contacting Server..."));
+
+            final InputStream in = getInputStreamRaw(url, Main.pleaseWaitDlg);
+            if (in == null)
+                return null;
+            Main.pleaseWaitDlg.currentAction.setText(tr("Downloading OSM data..."));
+            final DataSet data = OsmReader.parseDataSet(in, null, Main.pleaseWaitDlg);
+//          String origin = Main.pref.get("osm-server.url")+"/"+Main.pref.get("osm-server.version", "0.5");
+//          Bounds bounds = new Bounds(new LatLon(lat1, lon1), new LatLon(lat2, lon2));
+//          DataSource src = new DataSource(bounds, origin);
+//          data.dataSources.add(src);
+            in.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);
+        }
+    }
+
+}
Index: trunk/src/org/openstreetmap/josm/io/OsmServerObjectReader.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/OsmServerObjectReader.java	(revision 1142)
+++ trunk/src/org/openstreetmap/josm/io/OsmServerObjectReader.java	(revision 1146)
@@ -17,4 +17,13 @@
     public final static  String TYPE_NODE = "node";
 
+    long id;
+    String type;
+    boolean full;
+    
+    public OsmServerObjectReader(long id, String type, boolean full) {
+        this.id = id;
+        this.type = type;
+        this.full = full;
+    }
     /**
      * Method to download single objects from OSM server. ways, relations, nodes
@@ -26,7 +35,6 @@
      * @throws IOException
      */
-    public DataSet parseOsm(long id, String type, boolean full) throws SAXException, IOException {
+    public DataSet parseOsm() throws SAXException, IOException {
         try {
-
             Main.pleaseWaitDlg.progress.setValue(0);
             Main.pleaseWaitDlg.currentAction.setText(tr("Contacting OSM Server..."));
Index: trunk/src/org/openstreetmap/josm/io/OsmServerReader.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/OsmServerReader.java	(revision 1142)
+++ trunk/src/org/openstreetmap/josm/io/OsmServerReader.java	(revision 1146)
@@ -13,5 +13,7 @@
 
 import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.gui.PleaseWaitDialog;
+import org.xml.sax.SAXException;
 
 /**
@@ -24,5 +26,5 @@
  * @author imi
  */
-abstract class OsmServerReader extends OsmConnection {
+public abstract class OsmServerReader extends OsmConnection {
 	/**
 	 * Open a connection to the given url and return a reader on the input stream
@@ -35,4 +37,9 @@
 		String version = Main.pref.get("osm-server.version", "0.5");
 		urlStr = Main.pref.get("osm-server.url")+"/"+version+"/" + urlStr;
+        return getInputStreamRaw(urlStr, pleaseWaitDlg);
+    }
+    
+    protected InputStream getInputStreamRaw(String urlStr, PleaseWaitDialog pleaseWaitDlg) throws IOException {
+        
 		System.out.println("download: "+urlStr);
 		initAuthentication();
@@ -50,5 +57,5 @@
 		if (isAuthCancelled() && activeConnection.getResponseCode() == 401)
 			return null;
-		if( activeConnection.getResponseCode() == 500 )
+		if (activeConnection.getResponseCode() == 500)
 		{
 			throw new IOException(tr("Server returned internal error. Try a reduced area or retry after waiting some time."));
@@ -66,3 +73,6 @@
 		return inputStream;
 	}
+    
+    public abstract DataSet parseOsm() throws SAXException, IOException;
+    
 }
