Index: trunk/src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesDialog.java	(revision 8678)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesDialog.java	(revision 8679)
@@ -75,4 +75,5 @@
 import org.openstreetmap.josm.data.osm.event.DatasetEventManager.FireMode;
 import org.openstreetmap.josm.data.osm.event.SelectionEventManager;
+import org.openstreetmap.josm.data.preferences.StringProperty;
 import org.openstreetmap.josm.gui.ConditionalOptionPaneUtil;
 import org.openstreetmap.josm.gui.DefaultNameFormatter;
@@ -166,4 +167,5 @@
     private final transient DataSetListenerAdapter dataChangedAdapter = new DataSetListenerAdapter(this);
     private final HelpAction helpAction = new HelpAction();
+    private final TaginfoAction taginfoAction = new TaginfoAction();
     private final PasteValueAction pasteValueAction = new PasteValueAction();
     private final CopyValueAction copyValueAction = new CopyValueAction();
@@ -397,4 +399,5 @@
         membershipMenu.addSeparator();
         membershipMenu.add(helpAction);
+        membershipMenu.add(taginfoAction);
 
         membershipTable.addMouseListener(new PopupMenuLauncher(membershipMenu) {
@@ -450,4 +453,5 @@
         tagMenu.addSeparator();
         tagMenu.add(helpAction);
+        tagMenu.add(taginfoAction);
         tagTable.addMouseListener(new PopupMenuLauncher(tagMenu));
     }
@@ -1147,4 +1151,37 @@
     }
 
+    class TaginfoAction extends AbstractAction {
+
+        final StringProperty TAGINFO_URL_PROP = new StringProperty("taginfo.url", "https://taginfo.openstreetmap.org/");
+
+        public TaginfoAction() {
+            putValue(NAME, tr("Go to Taginfo"));
+            putValue(SHORT_DESCRIPTION, tr("Launch browser with Taginfo statistics for selected object"));
+        }
+
+        @Override
+        @SuppressWarnings("unchecked")
+        public void actionPerformed(ActionEvent e) {
+            final String url;
+            if (tagTable.getSelectedRowCount() == 1) {
+                final int row = tagTable.getSelectedRow();
+                final String key = Utils.encodeUrl(tagData.getValueAt(row, 0).toString());
+                Map<String, Integer> values = (Map<String, Integer>) tagData.getValueAt(row, 1);
+                if (values.size() == 1) {
+                    url = TAGINFO_URL_PROP.get() + "tags/" + key /* do not URL encode key, otherwise addr:street does not work */
+                            + "=" + Utils.encodeUrl(values.keySet().iterator().next());
+                } else {
+                    url = TAGINFO_URL_PROP.get() + "keys/" + key; /* do not URL encode key, otherwise addr:street does not work */
+                }
+            } else if (membershipTable.getSelectedRowCount() == 1) {
+                final String type = ((Relation) membershipData.getValueAt(membershipTable.getSelectedRow(), 0)).get("type");
+                url = TAGINFO_URL_PROP.get() + "relations/" + type;
+            } else {
+                return;
+            }
+            OpenBrowser.displayUrl(url);
+        }
+    }
+
     class PasteValueAction extends AbstractAction {
         public PasteValueAction() {
