Index: /trunk/src/org/openstreetmap/josm/actions/downloadtasks/DownloadOsmTask.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/downloadtasks/DownloadOsmTask.java	(revision 14356)
+++ /trunk/src/org/openstreetmap/josm/actions/downloadtasks/DownloadOsmTask.java	(revision 14357)
@@ -5,4 +5,5 @@
 
 import java.io.IOException;
+import java.net.MalformedURLException;
 import java.net.URL;
 import java.util.ArrayList;
@@ -42,4 +43,5 @@
 import org.openstreetmap.josm.io.OsmTransferCanceledException;
 import org.openstreetmap.josm.io.OsmTransferException;
+import org.openstreetmap.josm.io.OverpassDownloadReader;
 import org.openstreetmap.josm.tools.Logging;
 import org.openstreetmap.josm.tools.Utils;
@@ -59,4 +61,6 @@
     /** This allows subclasses to ignore this warning */
     protected boolean warnAboutEmptyArea = true;
+
+    protected static final String OVERPASS_INTERPRETER_DATA = "interpreter?data=";
 
     @Override
@@ -149,11 +153,27 @@
     public Future<?> loadUrl(DownloadParams settings, String url, ProgressMonitor progressMonitor) {
         String newUrl = modifyUrlBeforeLoad(url);
-        downloadTask = new DownloadTask(settings,
-                new OsmServerLocationReader(newUrl),
-                progressMonitor);
+        downloadTask = new DownloadTask(settings, getOsmServerReader(newUrl), progressMonitor);
         currentBounds = null;
         // Extract .osm filename from URL to set the new layer name
         extractOsmFilename(settings, "https?://.*/(.*\\.osm)", newUrl);
         return MainApplication.worker.submit(downloadTask);
+    }
+
+    protected OsmServerReader getOsmServerReader(String url) {
+        try {
+            String host = new URL(url).getHost();
+            for (String knownOverpassServer : OverpassDownloadReader.OVERPASS_SERVER_HISTORY.get()) {
+                if (host.equals(new URL(knownOverpassServer).getHost())) {
+                    int index = url.indexOf(OVERPASS_INTERPRETER_DATA);
+                    if (index > 0) {
+                        return new OverpassDownloadReader(new Bounds(LatLon.ZERO), knownOverpassServer,
+                                Utils.decodeUrl(url.substring(index + OVERPASS_INTERPRETER_DATA.length())));
+                    }
+                }
+            }
+        } catch (MalformedURLException e) {
+            Logging.error(e);
+        }
+        return new OsmServerLocationReader(url);
     }
 
