Index: trunk/src/org/openstreetmap/josm/gui/GettingStarted.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/GettingStarted.java	(revision 10880)
+++ trunk/src/org/openstreetmap/josm/gui/GettingStarted.java	(revision 10881)
@@ -24,5 +24,5 @@
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.Version;
-import org.openstreetmap.josm.gui.datatransfer.FileTransferHandler;
+import org.openstreetmap.josm.gui.datatransfer.OpenTransferHandler;
 import org.openstreetmap.josm.gui.preferences.server.ProxyPreference;
 import org.openstreetmap.josm.gui.preferences.server.ProxyPreferenceListener;
@@ -133,5 +133,5 @@
         getMOTD();
 
-        setTransferHandler(new FileTransferHandler());
+        setTransferHandler(new OpenTransferHandler());
     }
 
Index: trunk/src/org/openstreetmap/josm/gui/datatransfer/AbstractStackTransferHandler.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/datatransfer/AbstractStackTransferHandler.java	(revision 10881)
+++ trunk/src/org/openstreetmap/josm/gui/datatransfer/AbstractStackTransferHandler.java	(revision 10881)
@@ -0,0 +1,63 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.gui.datatransfer;
+
+import java.awt.datatransfer.UnsupportedFlavorException;
+import java.io.IOException;
+import java.util.Collection;
+
+import javax.swing.JComponent;
+import javax.swing.TransferHandler;
+
+import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.data.coor.EastNorth;
+import org.openstreetmap.josm.gui.datatransfer.importers.AbstractOsmDataPaster;
+import org.openstreetmap.josm.gui.layer.OsmDataLayer;
+import org.openstreetmap.josm.tools.bugreport.BugReport;
+
+/**
+ * A transfer handler class that allows you to manage a prioritized stack of transfer handlers.
+ * @author Michael Zangl
+ * @since 10881
+ */
+public abstract class AbstractStackTransferHandler extends TransferHandler {
+
+    protected abstract Collection<AbstractOsmDataPaster> getSupportedPasters();
+
+    @Override
+    public int getSourceActions(JComponent c) {
+        return COPY;
+    }
+
+    @Override
+    public boolean canImport(TransferSupport support) {
+        // import everything for now, only support copy.
+        for (AbstractOsmDataPaster df : getSupportedPasters()) {
+            if (df.supports(support)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    @Override
+    public boolean importData(TransferSupport support) {
+        return importData(support, Main.getLayerManager().getEditLayer(), null);
+    }
+
+    protected boolean importData(TransferSupport support, OsmDataLayer layer, EastNorth center) {
+        for (AbstractOsmDataPaster df : getSupportedPasters()) {
+            if (df.supports(support)) {
+                try {
+                    if (df.importData(support, layer, center)) {
+                        return true;
+                    }
+                } catch (UnsupportedFlavorException | IOException e) {
+                    Main.warn(e);
+                } catch (RuntimeException e) {
+                    BugReport.intercept(e).put("paster", df).put("flavors", () -> support.getDataFlavors()).warn();
+                }
+            }
+        }
+        return super.importData(support);
+    }
+}
Index: trunk/src/org/openstreetmap/josm/gui/datatransfer/FileTransferHandler.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/datatransfer/FileTransferHandler.java	(revision 10880)
+++ 	(revision )
@@ -1,44 +1,0 @@
-// License: GPL. For details, see LICENSE file.
-package org.openstreetmap.josm.gui.datatransfer;
-
-import java.awt.datatransfer.UnsupportedFlavorException;
-import java.io.IOException;
-
-import javax.swing.JComponent;
-import javax.swing.TransferHandler;
-
-import org.openstreetmap.josm.Main;
-import org.openstreetmap.josm.gui.datatransfer.importers.FilePaster;
-
-/**
- * This transfer handler allows to drop files to open them.
- *
- * @author Michael Zangl
- * @since 10620
- */
-public class FileTransferHandler extends TransferHandler {
-
-    private static final FilePaster filePaster = new FilePaster();
-
-    @Override
-    public int getSourceActions(JComponent c) {
-        return COPY;
-    }
-
-    @Override
-    public boolean canImport(TransferSupport support) {
-        return filePaster.supports(support);
-    }
-
-    @Override
-    public boolean importData(TransferSupport support) {
-        try {
-            if (filePaster.supports(support)) {
-                return filePaster.importData(support, null, null);
-            }
-        } catch (UnsupportedFlavorException | IOException e) {
-            Main.warn(e, "Error while importing file.");
-        }
-        return super.importData(support);
-    }
-}
Index: trunk/src/org/openstreetmap/josm/gui/datatransfer/OpenTransferHandler.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/datatransfer/OpenTransferHandler.java	(revision 10881)
+++ trunk/src/org/openstreetmap/josm/gui/datatransfer/OpenTransferHandler.java	(revision 10881)
@@ -0,0 +1,26 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.gui.datatransfer;
+
+import java.util.Arrays;
+import java.util.Collection;
+
+import org.openstreetmap.josm.gui.datatransfer.importers.AbstractOsmDataPaster;
+import org.openstreetmap.josm.gui.datatransfer.importers.FilePaster;
+import org.openstreetmap.josm.gui.datatransfer.importers.OsmLinkPaster;
+
+/**
+ * This transfer handler allows to e.g. drop files to open them.
+ *
+ * @author Michael Zangl
+ * @since 10620
+ * @since 10881 rename
+ */
+public class OpenTransferHandler extends AbstractStackTransferHandler {
+
+    private static final Collection<AbstractOsmDataPaster> SUPPORTED = Arrays.asList(new FilePaster(), new OsmLinkPaster());
+
+    @Override
+    protected Collection<AbstractOsmDataPaster> getSupportedPasters() {
+        return SUPPORTED;
+    }
+}
Index: trunk/src/org/openstreetmap/josm/gui/datatransfer/OsmTransferHandler.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/datatransfer/OsmTransferHandler.java	(revision 10880)
+++ trunk/src/org/openstreetmap/josm/gui/datatransfer/OsmTransferHandler.java	(revision 10881)
@@ -9,6 +9,4 @@
 import java.util.Collection;
 
-import javax.swing.TransferHandler;
-
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.coor.EastNorth;
@@ -16,4 +14,5 @@
 import org.openstreetmap.josm.gui.datatransfer.importers.AbstractOsmDataPaster;
 import org.openstreetmap.josm.gui.datatransfer.importers.FilePaster;
+import org.openstreetmap.josm.gui.datatransfer.importers.OsmLinkPaster;
 import org.openstreetmap.josm.gui.datatransfer.importers.PrimitiveDataPaster;
 import org.openstreetmap.josm.gui.datatransfer.importers.PrimitiveTagTransferPaster;
@@ -27,40 +26,14 @@
  * @since 10604
  */
-public class OsmTransferHandler extends TransferHandler {
+public class OsmTransferHandler extends AbstractStackTransferHandler {
 
     private static final Collection<AbstractOsmDataPaster> SUPPORTED = Arrays.asList(
             new FilePaster(), new PrimitiveDataPaster(),
             new PrimitiveTagTransferPaster(),
-            new TagTransferPaster(), new TextTagPaster());
+            new TagTransferPaster(), new OsmLinkPaster(), new TextTagPaster());
 
     @Override
-    public boolean canImport(TransferSupport support) {
-        // import everything for now, only support copy.
-        for (AbstractOsmDataPaster df : SUPPORTED) {
-            if (df.supports(support)) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    @Override
-    public boolean importData(TransferSupport support) {
-        return importData(support, Main.getLayerManager().getEditLayer(), null);
-    }
-
-    private boolean importData(TransferSupport support, OsmDataLayer layer, EastNorth center) {
-        for (AbstractOsmDataPaster df : SUPPORTED) {
-            if (df.supports(support)) {
-                try {
-                    if (df.importData(support, layer, center)) {
-                        return true;
-                    }
-                } catch (UnsupportedFlavorException | IOException e) {
-                    Main.warn(e);
-                }
-            }
-        }
-        return super.importData(support);
+    protected Collection<AbstractOsmDataPaster> getSupportedPasters() {
+        return SUPPORTED;
     }
 
Index: trunk/src/org/openstreetmap/josm/gui/datatransfer/importers/AbstractOsmDataPaster.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/datatransfer/importers/AbstractOsmDataPaster.java	(revision 10880)
+++ trunk/src/org/openstreetmap/josm/gui/datatransfer/importers/AbstractOsmDataPaster.java	(revision 10881)
@@ -57,5 +57,5 @@
      * Attempts to import the given transfer data.
      * @param support The transfer support to import from.
-     * @param layer The layer to paste at.
+     * @param layer The layer to paste at. May be null.
      * @param pasteAt The position to paste at.
      * @return <code>true</code> if the import was successful.
Index: trunk/src/org/openstreetmap/josm/gui/datatransfer/importers/OsmLinkPaster.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/datatransfer/importers/OsmLinkPaster.java	(revision 10881)
+++ trunk/src/org/openstreetmap/josm/gui/datatransfer/importers/OsmLinkPaster.java	(revision 10881)
@@ -0,0 +1,114 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.gui.datatransfer.importers;
+
+import java.awt.Component;
+import java.awt.datatransfer.DataFlavor;
+import java.awt.datatransfer.UnsupportedFlavorException;
+import java.io.IOException;
+import java.util.Collections;
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import javax.swing.TransferHandler.TransferSupport;
+
+import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.data.coor.EastNorth;
+import org.openstreetmap.josm.data.coor.LatLon;
+import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
+import org.openstreetmap.josm.data.osm.PrimitiveId;
+import org.openstreetmap.josm.data.osm.SimplePrimitiveId;
+import org.openstreetmap.josm.data.preferences.BooleanProperty;
+import org.openstreetmap.josm.gui.MapView;
+import org.openstreetmap.josm.gui.io.DownloadPrimitivesWithReferrersTask;
+import org.openstreetmap.josm.gui.layer.OsmDataLayer;
+
+/**
+ * Handles the paste / drop of an OSM address.
+ * <p>
+ * e.g. http://www.openstreetmap.org/node/123 downloads node 123
+ *
+ * @author Michael Zangl
+ * @since 10881
+ */
+public class OsmLinkPaster extends AbstractOsmDataPaster {
+
+    private static final BooleanProperty PASTE_REFERRERS = new BooleanProperty("paste.url.download-referrers", true);
+    private static final String OSM_SERVER = "^https?\\://(\\w+\\.)?(osm|openstreetmap)\\.org/";
+
+    /**
+     * Create a new Osm address paster
+     */
+    public OsmLinkPaster() {
+        super(DataFlavor.stringFlavor);
+    }
+
+    @Override
+    public boolean importData(TransferSupport support, OsmDataLayer layer, EastNorth pasteAt)
+            throws UnsupportedFlavorException, IOException {
+        if (!supports(support)) {
+            throw new UnsupportedFlavorException(df);
+        }
+
+        String transferData = (String) support.getTransferable().getTransferData(df);
+        List<PrimitiveId> ids = parseIds(transferData);
+
+        if (!ids.isEmpty()) {
+            Main.worker.submit(new DownloadPrimitivesWithReferrersTask(layer == null,
+                    ids, PASTE_REFERRERS.get(), PASTE_REFERRERS.get(), null, null));
+            return true;
+        }
+
+        LatLon ll = parseLatLon(transferData);
+        if (ll != null) {
+            Component comp = support.getComponent();
+            if (comp instanceof MapView) {
+                ((MapView) comp).zoomTo(ll);
+            }
+        }
+
+        return false;
+    }
+
+    protected static LatLon parseLatLon(String transferData) {
+        Matcher matcher = Pattern
+                .compile(OSM_SERVER + "#map=(?<zoom>\\d+)/(?<lat>-?\\d+\\.\\d+)/(?<lon>-?\\d+\\.\\d+)$")
+                .matcher(transferData);
+
+        if (!matcher.matches()) {
+            return null;
+        } else {
+            return new LatLon(Double.parseDouble(matcher.group("lat")), Double.parseDouble(matcher.group("lon")));
+        }
+    }
+
+    static List<PrimitiveId> parseIds(String transferData) {
+        Matcher matcher = Pattern
+                .compile(OSM_SERVER + "(?<type>node|way|relation)/(?<id>\\d+)(\\/.*)?$")
+                .matcher(transferData);
+
+        if (!matcher.matches()) {
+            return Collections.emptyList();
+        }
+
+        OsmPrimitiveType type;
+        switch (matcher.group("type")) {
+        case "way":
+            type = OsmPrimitiveType.WAY;
+            break;
+
+        case "node":
+            type = OsmPrimitiveType.NODE;
+            break;
+
+        case "relation":
+            type = OsmPrimitiveType.RELATION;
+            break;
+
+        default:
+            throw new AssertionError();
+        }
+
+        return Collections.singletonList(new SimplePrimitiveId(Long.parseLong(matcher.group("id")), type));
+    }
+}
