diff --git a/src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesDialog.java b/src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesDialog.java
index fbb70b9..e9c7f1e 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesDialog.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesDialog.java
@@ -165,6 +165,7 @@
 
     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();
     private final CopyKeyValueAction copyKeyValueAction = new CopyKeyValueAction();
@@ -396,6 +397,7 @@ private void setupMembershipMenu() {
         membershipMenuHandler.addAction(downloadSelectedIncompleteMembersAction);
         membershipMenu.addSeparator();
         membershipMenu.add(helpAction);
+        membershipMenu.add(taginfoAction);
 
         membershipTable.addMouseListener(new PopupMenuLauncher(membershipMenu) {
             @Override
@@ -449,6 +451,7 @@ private void setupTagsMenu() {
         tagMenu.add(searchActionSame);
         tagMenu.addSeparator();
         tagMenu.add(helpAction);
+        tagMenu.add(taginfoAction);
         tagTable.addMouseListener(new PopupMenuLauncher(tagMenu));
     }
 
@@ -1146,6 +1149,36 @@ public void actionPerformed(ActionEvent e) {
         }
     }
 
+    class TaginfoAction extends AbstractAction {
+
+        public TaginfoAction() {
+            putValue(NAME, tr("Go to Taginfo"));
+            putValue(SHORT_DESCRIPTION, tr("Launch browser with Taginfo statistics for selected object"));
+        }
+
+        @Override
+        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 = "https://taginfo.openstreetmap.org/tags/" + key /* do not URL encode key, otherwise addr:street does not work */
+                            + "=" + Utils.encodeUrl(values.keySet().iterator().next());
+                } else {
+                    url = "https://taginfo.openstreetmap.org/tags/" + 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 = "https://taginfo.openstreetmap.org/relations/" + Utils.encodeUrl(type);
+            } else {
+                return;
+            }
+            OpenBrowser.displayUrl(url);
+        }
+    }
+
     class PasteValueAction extends AbstractAction {
         public PasteValueAction() {
             putValue(NAME, tr("Paste Value"));
