Index: src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesDialog.java
===================================================================
--- src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesDialog.java	(revision 3522)
+++ src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesDialog.java	(working copy)
@@ -6,10 +6,11 @@
 
 import java.awt.BorderLayout;
 import java.awt.Component;
+import java.awt.Desktop;
+import java.awt.Dialog.ModalityType;
 import java.awt.Font;
 import java.awt.GridBagLayout;
 import java.awt.Point;
-import java.awt.Dialog.ModalityType;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
 import java.awt.event.FocusAdapter;
@@ -17,6 +18,7 @@
 import java.awt.event.KeyEvent;
 import java.awt.event.MouseAdapter;
 import java.awt.event.MouseEvent;
+import java.net.URI;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
@@ -25,9 +27,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;
@@ -67,8 +69,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;
@@ -87,6 +89,7 @@
 import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.tools.Shortcut;
 
+
 /**
  * This dialog displays the properties of the current selected primitives.
  *
@@ -704,6 +707,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) {
@@ -1021,6 +1032,69 @@
         }
     }
 
+    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();
+        }
+
+        @SuppressWarnings("unchecked")
+        public void actionPerformed(ActionEvent e) {
+            if (!isEnabled())
+                return;
+
+            try {
+                URI uri = new URI("http://wiki.openstreetmap.org/");
+
+                if (propertyTable.getSelectedRowCount() == 1) {
+                    int row = propertyTable.getSelectedRow();
+                    uri = new URI("http://wiki.openstreetmap.org/wiki/Tag:"+
+                            propertyData.getValueAt(row, 0).toString()+"="+
+                            ((Map<String,Integer>)propertyData.getValueAt(row, 1))
+                            .entrySet().iterator().next().getKey()
+                    );
+
+                    byte[] b = new byte[4096];
+                    InputStream is = uri.toURL().openStream();
+                    is.read(b);
+                    is.close();
+
+                    String id = new String(b);
+                    int i1 = id.indexOf("wgArticleId=");
+                    if (i1 > -1) {
+                        id = id.substring(id.indexOf('=', i1) + 1, id.indexOf(',', i1));
+                    } else {
+                        id = "0";
+                    }
+                    if (id.equals("0")) {
+                        uri = new URI("http://wiki.openstreetmap.org/wiki/Key:"+
+                                propertyData.getValueAt(row, 0).toString());
+                    }
+                } else if (membershipTable.getSelectedRowCount() == 1) {
+                    int row = membershipTable.getSelectedRow();
+                    uri = new URI("http://wiki.openstreetmap.org/wiki/Relation:"+
+                            ((Relation)membershipData.getValueAt(row, 0)).get("type"));
+                }
+
+                Desktop.getDesktop().browse(uri);
+            } 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;
