Index: trunk/src/org/openstreetmap/josm/gui/tagging/TaggingPreset.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/tagging/TaggingPreset.java	(revision 4048)
+++ trunk/src/org/openstreetmap/josm/gui/tagging/TaggingPreset.java	(revision 4050)
@@ -57,4 +57,5 @@
 import org.openstreetmap.josm.data.osm.Tag;
 import org.openstreetmap.josm.data.osm.Way;
+import org.openstreetmap.josm.data.preferences.BooleanProperty;
 import org.openstreetmap.josm.gui.ExtendedDialog;
 import org.openstreetmap.josm.gui.MapView;
@@ -114,4 +115,5 @@
     public final static String OPTIONAL_TOOLTIP_TEXT = "Optional tooltip text";
     private static File zipIcons = null;
+    private static final BooleanProperty PROP_FILL_DEFAULT = new BooleanProperty("taggingpreset.fill-default-for-tagged-primitives", false);
 
     public static abstract class Item {
@@ -247,8 +249,14 @@
             initAutoCompletionField(textField, key);
             if (usage.unused()){
-                if (use_last_as_default && lastValue.containsKey(key)) {
-                    textField.setText(lastValue.get(key));
+                if (!usage.hadKeys() || PROP_FILL_DEFAULT.get()) {
+                    // selected osm primitives are untagged or filling default values feature is enabled
+                    if (use_last_as_default && lastValue.containsKey(key)) {
+                        textField.setText(lastValue.get(key));
+                    } else {
+                        textField.setText(default_);
+                    }
                 } else {
-                    textField.setText(default_);
+                    // selected osm primitives are tagged and filling default values feature is disabled
+                    textField.setText("");
                 }
                 value = textField;
@@ -337,6 +345,6 @@
             }
             if (usage.values.size() < 2 && (oneValue == null || value_on.equals(oneValue) || value_off.equals(oneValue))) {
-                if(def)
-                {
+                if (def && !PROP_FILL_DEFAULT.get()) {
+                    // default is set and filling default values feature is disabled - check if all primitives are untagged
                     for (OsmPrimitive s : sel)
                         if(s.hasKeys()) {
@@ -488,18 +496,29 @@
             combo.setEditor(tf);
 
-            if (usage.hasUniqueValue() && !usage.unused()){
+            if (usage.hasUniqueValue()) {
+                // all items have the same value (and there were no unset items)
                 originalValue=lhm.get(usage.getFirst());
-            }
-            // use default only in case it is a totally new entry
-            else if(def != null && !usage.hadKeys()) {
+                combo.setSelectedItem(originalValue);
+            }
+            else if (def != null && usage.unused()) {
+                // default is set and all items were unset
+                if (!usage.hadKeys() || PROP_FILL_DEFAULT.get()) {
+                    // selected osm primitives are untagged or filling default feature is enabled
+                    combo.setSelectedItem(def);
+                } else {
+                    // selected osm primitives are tagged and filling default feature is disabled
+                    combo.setSelectedItem("");
+                }
                 originalValue=lhm.get(DIFFERENT);
             }
-            else if(usage.unused()){
+            else if (usage.unused()) {
+                // all items were unset (and so is default)
                 originalValue=lhm.get("");
-            }
-            else{
+                combo.setSelectedItem(originalValue);
+            }
+            else {
                 originalValue=lhm.get(DIFFERENT);
-            }
-            combo.setSelectedItem(originalValue);
+                combo.setSelectedItem(originalValue);
+            }
 
             if(locale_text == null) {
