Index: /trunk/data/defaultpresets.xml
===================================================================
--- /trunk/data/defaultpresets.xml	(revision 3480)
+++ /trunk/data/defaultpresets.xml	(revision 3481)
@@ -3501,5 +3501,5 @@
                 <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" />
-                <text key="addr:country" text="Country 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" />
             </optional>
         </item>
Index: /trunk/src/org/openstreetmap/josm/gui/tagging/TaggingPreset.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/tagging/TaggingPreset.java	(revision 3480)
+++ /trunk/src/org/openstreetmap/josm/gui/tagging/TaggingPreset.java	(revision 3481)
@@ -145,5 +145,7 @@
                 returnValue.hadEmpty = true;
             }
-            returnValue.hadKeys = ! returnValue.values.isEmpty() | returnValue.hadEmpty;
+            if(s.hasKeys()) {
+                returnValue.hadKeys = true;
+            }
         }
         return returnValue;
@@ -347,4 +349,5 @@
             // find out if our key is already used in the selection.
             usage = determineTextUsage(sel, key);
+            String def = default_;
 
             String[] value_array = values.split(",");
@@ -359,4 +362,9 @@
             }
 
+            if(use_last_as_default && def == null && lastValue.containsKey(key))
+            {
+                def = lastValue.get(key);
+            }
+
             if (display_array.length != value_array.length) {
                 System.err.println(tr("Broken tagging preset \"{0}-{1}\" - number of items in display_values must be the same as in values", key, text));
@@ -380,6 +388,6 @@
                 }
             }
-            if (default_ != null && !lhm.containsKey(default_)) {
-                lhm.put(default_, default_);
+            if (def != null && !lhm.containsKey(def)) {
+                lhm.put(def, def);
             }
             if(!lhm.containsKey("")) {
@@ -400,6 +408,6 @@
             }
             // use default only in case it is a totally new entry
-            else if(default_ != null && !usage.hadKeys()) {
-                combo.setSelectedItem(default_);
+            else if(def != null && !usage.hadKeys()) {
+                combo.setSelectedItem(def);
                 originalValue=DIFFERENT;
             }
@@ -452,4 +460,7 @@
             if (delete_if_empty && value.length() == 0) {
                 value = null;
+            }
+            if (use_last_as_default) {
+                lastValue.put(key, value);
             }
             cmds.add(new ChangePropertyCommand(sel, key, value));
