Index: /trunk/data/defaultpresets.xml
===================================================================
--- /trunk/data/defaultpresets.xml	(revision 4217)
+++ /trunk/data/defaultpresets.xml	(revision 4218)
@@ -31,5 +31,5 @@
   default: default string to display
   delete_if_empty: true/false
-  use_last_as_default: true/false
+  use_last_as_default: true/false/force
 
 combo: combo box, with multiple choices and possible to enter free form text
@@ -48,5 +48,5 @@
   default: default string to display
   delete_if_empty: true/false
-  use_last_as_default: true/false
+  use_last_as_default: true/false/force
 
 multiselect: list of values from which zero or more can be selected
@@ -68,5 +68,5 @@
   default: default string to display
   delete_if_empty: true/false
-  use_last_as_default: true/false
+  use_last_as_default: true/false/force
 
 check: checkbox
@@ -4068,8 +4068,8 @@
             <optional>
                 <text key="addr:housename" text="House name" default="" delete_if_empty="true" />
-                <text key="addr:street" text="Street name" use_last_as_default="true" delete_if_empty="true" />
-                <text key="addr:city" text="City name" use_last_as_default="true" delete_if_empty="true" />
-                <text key="addr:postcode" text="Post code" use_last_as_default="true" delete_if_empty="true" />
-                <combo key="addr:country" text="Country code" values="AT,CH,DE,FR,GB,IT,US" use_last_as_default="true" delete_if_empty="true" />
+                <text key="addr:street" text="Street name" use_last_as_default="force" delete_if_empty="true" />
+                <text key="addr:city" text="City name" use_last_as_default="force" delete_if_empty="true" />
+                <text key="addr:postcode" text="Post code" use_last_as_default="force" delete_if_empty="true" />
+                <combo key="addr:country" text="Country code" values="AT,CH,DE,FR,GB,IT,US" use_last_as_default="force" delete_if_empty="true" />
             </optional>
         </item>
Index: /trunk/data/tagging-preset.xsd
===================================================================
--- /trunk/data/tagging-preset.xsd	(revision 4217)
+++ /trunk/data/tagging-preset.xsd	(revision 4218)
@@ -114,5 +114,5 @@
 		<attribute name="default" type="string" />
 		<attribute name="delete_if_empty" type="boolean" />
-		<attribute name="use_last_as_default" type="boolean" />
+		<attribute name="use_last_as_default" type="tns:last_default" />
 		<attribute name="required" type="boolean" />
 
@@ -136,4 +136,5 @@
 		<attribute name="display_values" type="string" />
 		<attribute name="default" type="string" />
+		<attribute name="use_last_as_default" type="tns:last_default" />
 		<attribute name="editable" type="boolean" />
 		<attribute name="delete_if_empty" type="boolean" />
@@ -156,4 +157,5 @@
 		<attribute name="display_values" type="string" />
 		<attribute name="default" type="string" />
+		<attribute name="use_last_as_default" type="tns:last_default" />
 		<attribute name="delimiter" type="string" />
 		<attribute name="delete_if_empty" type="boolean" />
@@ -173,5 +175,4 @@
 		<attribute name="text_context" type="string" />
 		<attribute name="default" type="tns:check_default" />
-		<attribute name="use_last_as_default" type="boolean" />
 		<attribute name="required" type="boolean" />
 		<attribute name="value_on" type="string" />
@@ -191,4 +192,12 @@
 	</simpleType>
 
+	<simpleType name="last_default">
+		<restriction base="string">
+			<enumeration value="true" />
+			<enumeration value="false" />
+			<enumeration value="force" />
+		</restriction>
+	</simpleType>
+
 	<complexType name="roles">
 		<sequence>
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);
             }
