Index: trunk/src/org/openstreetmap/josm/gui/tagging/TaggingPreset.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/tagging/TaggingPreset.java	(revision 4217)
+++ trunk/src/org/openstreetmap/josm/gui/tagging/TaggingPreset.java	(revision 4218)
@@ -236,5 +236,5 @@
         public String default_;
         public String originalValue;
-        public boolean use_last_as_default = false;
+        public String use_last_as_default = "false";
         public boolean delete_if_empty = false;
         public boolean required = false;
@@ -249,7 +249,7 @@
             initAutoCompletionField(textField, key);
             if (usage.unused()){
-                if (!usage.hadKeys() || PROP_FILL_DEFAULT.get()) {
+                if (!usage.hadKeys() || PROP_FILL_DEFAULT.get() || "force".equals(use_last_as_default)) {
                     // selected osm primitives are untagged or filling default values feature is enabled
-                    if (use_last_as_default && lastValue.containsKey(key)) {
+                    if (!"false".equals(use_last_as_default) && lastValue.containsKey(key)) {
                         textField.setText(lastValue.get(key));
                     } else {
@@ -297,5 +297,5 @@
                         ((JTextField)value).getText();
 
-                    if (use_last_as_default) {
+                    if (!"false".equals(use_last_as_default)) {
                         lastValue.put(key, v);
                     }
@@ -319,5 +319,4 @@
         public String value_off = OsmUtils.falseval;
         public boolean default_ = false; // only used for tagless objects
-        public boolean use_last_as_default = false;
         public boolean required = false;
 
@@ -411,5 +410,5 @@
         public boolean delete_if_empty = false;
         public boolean editable = true;
-        public boolean use_last_as_default = false;
+        public String use_last_as_default = "false";
         public boolean required = false;
 
@@ -446,5 +445,5 @@
             }
 
-            if (use_last_as_default && def == null && lastValue.containsKey(key)) {
+            if (!"false".equals(use_last_as_default) && def == null && lastValue.containsKey(key)) {
                 def = lastValue.get(key);
             }
@@ -503,5 +502,5 @@
             else if (def != null && usage.unused()) {
                 // default is set and all items were unset
-                if (!usage.hadKeys() || PROP_FILL_DEFAULT.get()) {
+                if (!usage.hadKeys() || PROP_FILL_DEFAULT.get() || "force".equals(use_last_as_default)) {
                     // selected osm primitives are untagged or filling default feature is enabled
                     combo.setSelectedItem(def);
@@ -605,5 +604,5 @@
                 value = null;
             }
-            if (use_last_as_default) {
+            if (!"false".equals(use_last_as_default)) {
                 lastValue.put(key, value);
             }
@@ -681,5 +680,5 @@
         public String delimiter = ";";
         public boolean delete_if_empty = false;
-        public boolean use_last_as_default = false;
+        public String use_last_as_default = "false";
         public boolean required = false;
         public long rows = -1;
@@ -722,5 +721,5 @@
             }
 
-            if (use_last_as_default && def == null && lastValue.containsKey(key)) {
+            if (!"false".equals(use_last_as_default) && def == null && lastValue.containsKey(key)) {
                 def = lastValue.get(key);
             }
@@ -758,15 +757,18 @@
             if (usage.hasUniqueValue() && !usage.unused()) {
                 originalValue=usage.getFirst();
-            }
-            else if (def != null && !usage.hadKeys()) {
-                originalValue=def;
+                list.setSelectedItem(originalValue);
+            }
+            else if (def != null && !usage.hadKeys() || PROP_FILL_DEFAULT.get() || "force".equals(use_last_as_default)) {
+                originalValue=DIFFERENT;
+                list.setSelectedItem(def);
             }
             else if (usage.unused()) {
                 originalValue=null;
+                list.setSelectedItem(originalValue);
             }
             else {
                 originalValue=DIFFERENT;
-            }
-            list.setSelectedItem(originalValue);
+                list.setSelectedItem(originalValue);
+            }
 
             if (locale_text == null) {
@@ -859,5 +861,5 @@
                 value = null;
             }
-            if (use_last_as_default) {
+            if (!"false".equals(use_last_as_default)) {
                 lastValue.put(key, value);
             }
