Index: src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesDialog.java
===================================================================
--- src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesDialog.java	(revision 3517)
+++ src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesDialog.java	(working copy)
@@ -7,6 +7,7 @@
 import java.awt.BorderLayout;
 import java.awt.Component;
 import java.awt.Cursor;
+import java.awt.Desktop;
 import java.awt.Dialog.ModalityType;
 import java.awt.Dimension;
 import java.awt.Font;
@@ -20,6 +21,7 @@
 import java.awt.event.MouseAdapter;
 import java.awt.event.MouseEvent;
 import java.awt.event.MouseListener;
+import java.net.URI;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
@@ -28,9 +30,9 @@
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
+import java.util.Map.Entry;
 import java.util.TreeMap;
 import java.util.Vector;
-import java.util.Map.Entry;
 
 import javax.swing.AbstractAction;
 import javax.swing.Box;
@@ -69,8 +71,8 @@
 import org.openstreetmap.josm.data.osm.event.AbstractDatasetChangedEvent;
 import org.openstreetmap.josm.data.osm.event.DataSetListenerAdapter;
 import org.openstreetmap.josm.data.osm.event.DatasetEventManager;
-import org.openstreetmap.josm.data.osm.event.SelectionEventManager;
 import org.openstreetmap.josm.data.osm.event.DatasetEventManager.FireMode;
+import org.openstreetmap.josm.data.osm.event.SelectionEventManager;
 import org.openstreetmap.josm.gui.DefaultNameFormatter;
 import org.openstreetmap.josm.gui.ExtendedDialog;
 import org.openstreetmap.josm.gui.MapFrame;
@@ -706,6 +708,14 @@
         getActionMap().put("delete", deleteAction);
         buttonPanel.add(this.btnDel);
         add(buttonPanel, BorderLayout.SOUTH);
+
+        // -- help action
+        //
+        HelpAction helpAction = new HelpAction();
+        propertyTable.getSelectionModel().addListSelectionListener(helpAction);
+        getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(
+                KeyStroke.getKeyStroke(KeyEvent.VK_F1, 0), "onHelp");
+        getActionMap().put("onHelp", helpAction);
     }
 
     @Override public void setVisible(boolean b) {
@@ -1094,6 +1104,48 @@
         }
     }
 
+    class HelpAction extends AbstractAction implements ListSelectionListener {
+        public HelpAction() {
+            putValue(NAME, tr("Help"));
+            putValue(SHORT_DESCRIPTION, tr("Launch browser with wiki help to selected object"));
+            updateEnabledState();
+        }
+
+        public void actionPerformed(ActionEvent e) {
+            if (!isEnabled())
+                return;
+
+            try {
+                URI url = new URI("http://wiki.openstreetmap.org/");
+
+                if (propertyTable.getSelectedRowCount() == 1) {
+                    int row = propertyTable.getSelectedRow();
+                    url = new URI("http://wiki.openstreetmap.org/wiki/Key:"+
+                            propertyData.getValueAt(row, 0).toString());
+                } else if (membershipTable.getSelectedRowCount() == 1) {
+                    int row = membershipTable.getSelectedRow();
+                    url = new URI("http://wiki.openstreetmap.org/wiki/Relation:"+
+                            ((Relation)membershipData.getValueAt(row, 0)).get("type"));
+                }
+
+                Desktop.getDesktop().browse(url);
+            } catch (Exception e1) {
+                e1.printStackTrace();
+            }
+        }
+
+        protected void updateEnabledState() {
+            setEnabled(
+                    propertyTable.getSelectedRowCount() == 1
+                    ^ membershipTable.getSelectedRowCount() == 1
+            );
+        }
+
+        public void valueChanged(ListSelectionEvent e) {
+            updateEnabledState();
+        }
+    }
+
     static class SelectRelationAction extends AbstractAction {
         boolean selectionmode;
         Relation relation;
