Index: src/org/openstreetmap/josm/gui/tagging/TaggingPreset.java
===================================================================
--- src/org/openstreetmap/josm/gui/tagging/TaggingPreset.java	(revision 3622)
+++ src/org/openstreetmap/josm/gui/tagging/TaggingPreset.java	(working copy)
@@ -51,6 +51,7 @@
 import org.openstreetmap.josm.data.osm.RelationMember;
 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;
 import org.openstreetmap.josm.gui.QuadStateCheckBox;
@@ -104,6 +105,8 @@
     public String locale_name;
     public final static String OPTIONAL_TOOLTIP_TEXT = "Optional tooltip text";
     private static File zipIcons = null;
+    // filling default values for tagged osm primitives feature - see http://josm.openstreetmap.de/ticket/5564
+    private static final BooleanProperty PROP_FILL_DEFAULT = new BooleanProperty("taggingpreset.fill-default-for-tagged-primitives", false);
 
     public static abstract class Item {
         protected void initAutoCompletionField(AutoCompletingTextField field, String key) {
@@ -192,10 +195,16 @@
             AutoCompletingTextField textField = new AutoCompletingTextField();
             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;
                 originalValue = null;
@@ -282,8 +291,8 @@
                 oneValue = s;
             }
             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()) {
                             def = false;
@@ -412,22 +421,30 @@
             tf.getAutoCompletionList().add(Arrays.asList(display_array), AutoCompletionItemPritority.IS_IN_STANDARD);
             combo.setEditor(tf);
 
-            if (usage.hasUniqueValue() && !usage.unused()){
-                originalValue=usage.getFirst();
+            if (usage.hasUniqueValue()) {
+                // all items have the same value (and there were no unset items)
+                originalValue = usage.getFirst();
                 combo.setSelectedItem(lhm.get(originalValue));
             }
-            // use default only in case it is a totally new entry
-            else if(def != null && !usage.hadKeys()) {
-                combo.setSelectedItem(def);
-                originalValue=DIFFERENT;
+            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 = DIFFERENT;
             }
-            else if(usage.unused()){
+            else if (usage.unused()) {
+                // all items were unset (and so is default)
                 combo.setSelectedItem("");
-                originalValue="";
+                originalValue = "";
             }
-            else{
+            else {
                 combo.setSelectedItem(DIFFERENT);
-                originalValue=DIFFERENT;
+                originalValue = DIFFERENT;
             }
 
             if(locale_text == null) {
