Index: src/org/openstreetmap/josm/gui/tagging/TaggingPreset.java
===================================================================
--- src/org/openstreetmap/josm/gui/tagging/TaggingPreset.java	(revision 3919)
+++ src/org/openstreetmap/josm/gui/tagging/TaggingPreset.java	(working copy)
@@ -1034,6 +1034,7 @@
     public static class Key extends Item {
         public String key;
         public String value;
+        public boolean match_only_key = false;
 
         @Override public boolean addToPanel(JPanel p, Collection<OsmPrimitive> sel) { return false; }
         @Override public void addCommands(List<Tag> changedTags) {
Index: src/org/openstreetmap/josm/gui/dialogs/properties/PresetListPanel.java
===================================================================
--- src/org/openstreetmap/josm/gui/dialogs/properties/PresetListPanel.java	(revision 3919)
+++ src/org/openstreetmap/josm/gui/dialogs/properties/PresetListPanel.java	(working copy)
@@ -100,6 +100,7 @@
                     if(i instanceof TaggingPreset.Key) {
                         String val = ((TaggingPreset.Key)i).value;
                         String key = ((TaggingPreset.Key)i).key;
+                        boolean match_only_key = ((TaggingPreset.Key)i).match_only_key;
                         // we subtract 100 if not found and add 1 if found
                         found -= 100;
                         if(key == null || !valueCount.containsKey(key)) {
@@ -107,7 +108,13 @@
                         }
 
                         Map<String, Integer> v = valueCount.get(key);
-                        if(v.size() == 1 && val != null && v.containsKey(val) && v.get(val) == total) {
+                        if (match_only_key) {
+                            int sum = 0;
+                            for (Integer vi : v.values()) sum+=vi;
+                            if (total == sum) {
+                                found += 101;
+                            }
+                        } else if(v.size() == 1 && val != null && v.containsKey(val) && v.get(val) == total) {
                             found += 101;
                         }
                     } else {
Index: data/defaultpresets.xml
===================================================================
--- data/defaultpresets.xml	(revision 3919)
+++ data/defaultpresets.xml	(working copy)
@@ -24,6 +24,7 @@
 key: fixed key/value pair to be set
   key: key to set
   value: value to set
+  match_only_key: if true, only key would be considered when looking for matching preset to show in panel
 
 text: text box
   key: key to set
@@ -2906,7 +2907,15 @@
   <group name="Man Made" icon="presets/works.png">
     <group name="Man Made" icon="presets/works.png">
         <item name="Building" icon="styles/standard/misc/landmark/building.png" type="node,closedway,relation">
-            <key key="building" value="yes" />
+            <link href="http://wiki.openstreetmap.org/wiki/Proposed_features/Building_attributes" />
+            <key key="building" value="yes" match_only_key="true" />
+            <combo key="building" text="Type of building" values="train_station,hangar,yes" default="yes" use_last_as_default="true"/>
+            <label text="Value 'yes' means that no type is specified" />
+            <optional>
+                <label text="Building size" />
+                <text key="height" text="Height (meters) from ground to roof" delete_if_empty="true" />
+                <text key="building:levels" text="Number of stories, including the ground floor" delete_if_empty="true" />
+            </optional>
         </item>
         <item name="Tower" icon="presets/tower.png" type="node,closedway">
             <label text="Edit Tower" />
