Index: src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesDialog.java
===================================================================
--- src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesDialog.java	(revision 4502)
+++ src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesDialog.java	(working copy)
@@ -101,6 +101,8 @@
 import org.openstreetmap.josm.tools.OpenBrowser;
 import org.openstreetmap.josm.tools.Shortcut;
 import org.openstreetmap.josm.tools.Utils;
+import org.openstreetmap.josm.actions.search.SearchAction.SearchMode;
+import org.openstreetmap.josm.actions.search.SearchAction.SearchSetting;
 
 /**
  * This dialog displays the properties of the current selected primitives.
@@ -181,6 +183,8 @@
     private CopyValueAction copyValueAction = new CopyValueAction();
     private CopyKeyValueAction copyKeyValueAction = new CopyKeyValueAction();
     private CopyAllKeyValueAction copyAllKeyValueAction = new CopyAllKeyValueAction();
+    private SearchAction searchActionAny = new SearchAction(false);
+    private SearchAction searchActionSame = new SearchAction(true);
     private AddAction addAction = new AddAction();
 
     @Override
@@ -615,6 +619,9 @@
         propertyMenu.add(copyKeyValueAction);
         propertyMenu.add(copyAllKeyValueAction);
         propertyMenu.addSeparator();
+        propertyMenu.add(searchActionSame);
+        propertyMenu.add(searchActionAny);        
+        propertyMenu.addSeparator();
         propertyMenu.add(helpAction);
         
         propertyData.setColumnIdentifiers(new String[]{tr("Key"),tr("Value")});
@@ -1411,4 +1418,53 @@
             return r;
         }
     }
+
+    class SearchAction extends AbstractAction {
+        final boolean sameType;
+
+        public SearchAction(boolean sameType) {
+            this.sameType = sameType;
+            if (sameType) {
+                putValue(NAME, tr("Search Key/Value keep type"));
+                putValue(SHORT_DESCRIPTION, tr("Search with the key and value of the selected tag, keep type"));
+            } else {
+                putValue(NAME, tr("Search Key/Value"));
+                putValue(SHORT_DESCRIPTION, tr("Search with the key and value of the selected tag"));
+            }
+        }
+
+        public void actionPerformed(ActionEvent e) {
+            if (propertyTable.getSelectedRowCount() != 1) {
+                return;
+            }
+            String key = propertyData.getValueAt(propertyTable.getSelectedRow(), 0).toString();
+            Collection<OsmPrimitive> sel = Main.main.getCurrentDataSet().getSelected();
+            if (sel.isEmpty()) {
+                return;
+            }
+            String sep = "";
+            String s = "";
+            for (OsmPrimitive p : sel) {
+                String val = p.get(key);
+                if (val == null) {
+                    continue;
+                }
+                String t = "";
+                if (!sameType) {
+                    t = "";
+                } else if (p instanceof Node) {
+                    t = "type:node ";
+                } else if (p instanceof Way) {
+                    t = "type:way ";
+                } else if (p instanceof Relation) {
+                    t = "type:relation ";
+                }
+                s += sep + "(" + t + "\"" + key + "\"=\"" + val + "\")";
+                sep = " OR ";
+            }
+
+            SearchSetting ss = new SearchSetting(s, SearchMode.replace, true, false, false);
+            org.openstreetmap.josm.actions.search.SearchAction.searchWithoutHistory(ss);
+        }
+    }
 }
