Index: src/org/openstreetmap/josm/actions/InfoAction.java
===================================================================
--- src/org/openstreetmap/josm/actions/InfoAction.java	(revision 0)
+++ src/org/openstreetmap/josm/actions/InfoAction.java	(revision 0)
@@ -0,0 +1,81 @@
+//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.util.Collection;
+import java.util.LinkedList;
+import java.util.regex.Pattern;
+
+import javax.swing.JOptionPane;
+
+import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.data.osm.Node;
+import org.openstreetmap.josm.data.osm.OsmPrimitive;
+import org.openstreetmap.josm.data.osm.Relation;
+import org.openstreetmap.josm.data.osm.Way;
+import org.openstreetmap.josm.data.osm.visitor.AbstractVisitor;
+import org.openstreetmap.josm.tools.OpenBrowser;
+import org.openstreetmap.josm.tools.Shortcut;
+
+public class InfoAction extends JosmAction {
+
+    public InfoAction() {
+        super(tr("Info about Element"), "about",
+        tr("Display object information about OSM notes, ways and relations."),
+        Shortcut.registerShortcut("core:information",
+        tr("Info about Element"), KeyEvent.VK_I, Shortcut.GROUP_HOTKEY), true);
+    }
+
+    /**
+     * replies the base URL for browsing information about an OSM primitive
+     *
+     * @return the base URL, i.e. http://api.openstreetmap.org/browse
+     */
+    protected String getBaseURL() {
+        String baseUrl = Main.pref.get("osm-server.url", "http://api.openstreetmap.org/api");
+        Pattern pattern = Pattern.compile("/api/?$");
+        String ret =  pattern.matcher(baseUrl).replaceAll("/browse");
+        if (ret.equals(baseUrl)) {
+            System.out.println("WARNING: unexpected format of API base URL. Redirection to information page for OSM primitive will probably fail. API base URL is: " + baseUrl);
+        }
+        return ret;
+    }
+
+    public void actionPerformed(ActionEvent e) {
+        final Collection<Object> sel = new LinkedList<Object>();
+        final String baseUrl  = getBaseURL();
+        new AbstractVisitor() {
+            public void visit(Node n) {
+                if(n.id <= 0) return;
+                OpenBrowser.displayUrl(baseUrl + "/node/" + n.id);
+                sel.add(n);
+            }
+
+            public void visit(Way w) {
+                if(w.id <= 0) return;
+                OpenBrowser.displayUrl(baseUrl + "/way/" + w.id);
+                sel.add(w);
+            }
+
+            public void visit(Relation e) {
+                if(e.id <= 0) return;
+                OpenBrowser.displayUrl(baseUrl + "/relation/" + e.id);
+                sel.add(e);
+            }
+
+            public void visitAll() {
+                for (OsmPrimitive osm : Main.ds.getSelected())
+                    osm.visit(this);
+            }
+        }.visitAll();
+
+        if (sel.isEmpty()) {
+            JOptionPane.showMessageDialog(Main.parent,
+            tr("Please select at least one node, way or relation. Only already uploaded elements have information on the server."));
+                return;
+        }
+    }
+}
Index: src/org/openstreetmap/josm/gui/MainMenu.java
===================================================================
--- src/org/openstreetmap/josm/gui/MainMenu.java	(revision 1694)
+++ src/org/openstreetmap/josm/gui/MainMenu.java	(working copy)
@@ -37,6 +37,7 @@
 import org.openstreetmap.josm.actions.ExitAction;
 import org.openstreetmap.josm.actions.GpxExportAction;
 import org.openstreetmap.josm.actions.HelpAction;
+import org.openstreetmap.josm.actions.InfoAction;
 import org.openstreetmap.josm.actions.HistoryInfoAction;
 import org.openstreetmap.josm.actions.JoinNodeWayAction;
 import org.openstreetmap.josm.actions.JosmAction;
@@ -129,6 +130,7 @@
     public final JosmAction mergeNodes = new MergeNodesAction();
     public final JosmAction joinNodeWay = new JoinNodeWayAction();
     public final JosmAction unglueNodes = new UnGlueAction();
+    public final InfoAction info = new InfoAction();
     public final HistoryInfoAction historyinfo = new HistoryInfoAction();
 
     /* Audio menu */
@@ -283,6 +285,7 @@
         add(toolsMenu, joinNodeWay);
         add(toolsMenu, unglueNodes);
         toolsMenu.addSeparator();
+        add(toolsMenu, info);
         add(toolsMenu, historyinfo);
 
         if (!Main.pref.getBoolean("audio.menuinvisible", false)) {
