Index: trunk/src/org/openstreetmap/josm/gui/tagging/presets/items/Check.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/tagging/presets/items/Check.java	(revision 9359)
+++ trunk/src/org/openstreetmap/josm/gui/tagging/presets/items/Check.java	(revision 9360)
@@ -82,4 +82,6 @@
         check = new QuadStateCheckBox(locale_text, initialState,
                 allowedStates.toArray(new QuadStateCheckBox.State[allowedStates.size()]));
+        check.setPropertyText(key);
+        check.setState(check.getState()); // to update the tooltip text
 
         p.add(check, GBC.eol().fill(GBC.HORIZONTAL));
Index: trunk/src/org/openstreetmap/josm/gui/tagging/presets/items/ComboMultiSelect.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/tagging/presets/items/ComboMultiSelect.java	(revision 9359)
+++ trunk/src/org/openstreetmap/josm/gui/tagging/presets/items/ComboMultiSelect.java	(revision 9360)
@@ -321,6 +321,9 @@
         }
 
-        p.add(new JLabel(tr("{0}:", locale_text)), GBC.std().insets(0, 0, 10, 0));
+        final JLabel label = new JLabel(tr("{0}:", locale_text));
+        label.setToolTipText(getKeyTooltipText());
+        p.add(label, GBC.std().insets(0, 0, 10, 0));
         addToPanelAnchor(p, default_, presetInitiallyMatches);
+        component.setToolTipText(getKeyTooltipText());
 
         return true;
Index: trunk/src/org/openstreetmap/josm/gui/tagging/presets/items/KeyedItem.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/tagging/presets/items/KeyedItem.java	(revision 9359)
+++ trunk/src/org/openstreetmap/josm/gui/tagging/presets/items/KeyedItem.java	(revision 9360)
@@ -136,4 +136,8 @@
     public abstract Collection<String> getValues();
 
+    protected String getKeyTooltipText() {
+        return tr("This corresponds to the key ''{0}''", key);
+    }
+
     @Override
     protected Boolean matches(Map<String, String> tags) {
Index: trunk/src/org/openstreetmap/josm/gui/tagging/presets/items/Text.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/tagging/presets/items/Text.java	(revision 9359)
+++ trunk/src/org/openstreetmap/josm/gui/tagging/presets/items/Text.java	(revision 9360)
@@ -167,6 +167,9 @@
             value = pnl;
         }
-        p.add(new JLabel(locale_text+':'), GBC.std().insets(0, 0, 10, 0));
+        final JLabel label = new JLabel(locale_text + ':');
+        label.setToolTipText(getKeyTooltipText());
+        p.add(label, GBC.std().insets(0, 0, 10, 0));
         p.add(value, GBC.eol().fill(GBC.HORIZONTAL));
+        value.setToolTipText(getKeyTooltipText());
         return true;
     }
Index: trunk/src/org/openstreetmap/josm/gui/widgets/QuadStateCheckBox.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/widgets/QuadStateCheckBox.java	(revision 9359)
+++ trunk/src/org/openstreetmap/josm/gui/widgets/QuadStateCheckBox.java	(revision 9360)
@@ -95,4 +95,12 @@
 
     /**
+     * Sets a text describing this property in the tooltip text
+     * @param propertyText a description for the modelled property
+     */
+    public final void setPropertyText(final String propertyText) {
+        model.setPropertyText(propertyText);
+    }
+
+    /**
      * Set the new state.
      * @param state The new state
@@ -121,4 +129,5 @@
     private final class QuadStateDecorator implements ButtonModel {
         private final ButtonModel other;
+        private String propertyText = null;
 
         private QuadStateDecorator(ButtonModel other) {
@@ -131,21 +140,33 @@
                 other.setPressed(false);
                 other.setSelected(false);
-                setToolTipText(tr("false: the property is explicitly switched off"));
+                setToolTipText(propertyText == null
+                        ? tr("false: the property is explicitly switched off")
+                        : tr("false: the property ''{0}'' is explicitly switched off", propertyText));
             } else if (state == State.SELECTED) {
                 other.setArmed(false);
                 other.setPressed(false);
                 other.setSelected(true);
-                setToolTipText(tr("true: the property is explicitly switched on"));
+                setToolTipText(propertyText == null
+                        ? tr("true: the property is explicitly switched on")
+                        : tr("true: the property ''{0}'' is explicitly switched on", propertyText));
             } else if (state == State.PARTIAL) {
                 other.setArmed(true);
                 other.setPressed(true);
                 other.setSelected(true);
-                setToolTipText(tr("partial: different selected objects have different values, do not change"));
+                setToolTipText(propertyText == null
+                        ? tr("partial: different selected objects have different values, do not change")
+                        : tr("partial: different selected objects have different values for ''{0}'', do not change", propertyText));
             } else {
                 other.setArmed(true);
                 other.setPressed(true);
                 other.setSelected(false);
-                setToolTipText(tr("unset: do not set this property on the selected objects"));
-            }
+                setToolTipText(propertyText == null
+                        ? tr("unset: do not set this property on the selected objects")
+                        : tr("unset: do not set the property ''{0}'' on the selected objects", propertyText));
+            }
+        }
+
+        protected void setPropertyText(String propertyText) {
+            this.propertyText = propertyText;
         }
 
