Index: trunk/src/org/openstreetmap/josm/gui/tagging/TaggingPreset.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/tagging/TaggingPreset.java	(revision 6771)
+++ trunk/src/org/openstreetmap/josm/gui/tagging/TaggingPreset.java	(revision 6772)
@@ -275,4 +275,6 @@
     }
 
+    static boolean presetInitiallyMatches = false;
+
     @Override
     public void actionPerformed(ActionEvent e) {
@@ -281,4 +283,5 @@
 
         Collection<OsmPrimitive> sel = createSelection(Main.main.getCurrentDataSet().getSelected());
+        presetInitiallyMatches = !sel.isEmpty() && Utils.forAll(sel, this);
         int answer = showDialog(sel, supportsRelation());
 
Index: trunk/src/org/openstreetmap/josm/gui/tagging/TaggingPresetItems.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/tagging/TaggingPresetItems.java	(revision 6771)
+++ trunk/src/org/openstreetmap/josm/gui/tagging/TaggingPresetItems.java	(revision 6772)
@@ -597,5 +597,5 @@
                 else 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 (!"false".equals(use_last_as_default) && lastValue.containsKey(key)) {
+                    if (!"false".equals(use_last_as_default) && lastValue.containsKey(key) && !TaggingPreset.presetInitiallyMatches) {
                         textField.setText(lastValue.get(key));
                     } else {
@@ -1227,5 +1227,5 @@
                 // all items were unset (and so is default)
                 originalValue = lhm.get("");
-                if ("force".equals(use_last_as_default) && lastValue.containsKey(key)) {
+                if ("force".equals(use_last_as_default) && lastValue.containsKey(key) && !TaggingPreset.presetInitiallyMatches) {
                     combo.setSelectedItem(lhm.get(lastValue.get(key)));
                 } else {
Index: trunk/src/org/openstreetmap/josm/tools/Utils.java
===================================================================
--- trunk/src/org/openstreetmap/josm/tools/Utils.java	(revision 6771)
+++ trunk/src/org/openstreetmap/josm/tools/Utils.java	(revision 6772)
@@ -65,4 +65,7 @@
     public static final Charset UTF_8 = Charset.forName("UTF-8");
 
+    /**
+     * Tests whether {@code predicate} applies to at least one elements from {@code collection}.
+     */
     public static <T> boolean exists(Iterable<? extends T> collection, Predicate<? super T> predicate) {
         for (T item : collection) {
@@ -71,4 +74,11 @@
         }
         return false;
+    }
+
+    /**
+     * Tests whether {@code predicate} applies to all elements from {@code collection}.
+     */
+    public static <T> boolean forAll(Iterable<? extends T> collection, Predicate<? super T> predicate) {
+        return !exists(collection, Predicates.not(predicate));
     }
 
