Index: /trunk/src/org/openstreetmap/josm/gui/tagging/TaggingPreset.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/tagging/TaggingPreset.java	(revision 6794)
+++ /trunk/src/org/openstreetmap/josm/gui/tagging/TaggingPreset.java	(revision 6795)
@@ -11,5 +11,4 @@
 import java.awt.Insets;
 import java.awt.event.ActionEvent;
-import java.awt.event.MouseEvent;
 import java.util.ArrayList;
 import java.util.Collection;
@@ -41,5 +40,4 @@
 import org.openstreetmap.josm.gui.ExtendedDialog;
 import org.openstreetmap.josm.gui.MapView;
-import org.openstreetmap.josm.gui.dialogs.properties.PresetListPanel;
 import org.openstreetmap.josm.gui.dialogs.relation.RelationEditor;
 import org.openstreetmap.josm.gui.layer.Layer;
@@ -220,4 +218,5 @@
         }
 
+        boolean presetInitiallyMatches = !selected.isEmpty() && Utils.forAll(selected, this);
         JPanel items = new JPanel(new GridBagLayout());
         for (TaggingPresetItem i : data){
@@ -227,5 +226,5 @@
                 presetLink.add(i);
             } else {
-                if(i.addToPanel(items, selected)) {
+                if(i.addToPanel(items, selected, presetInitiallyMatches)) {
                     p.hasElements = true;
                 }
@@ -240,12 +239,12 @@
         if (!presetLink.isEmpty()) {
             p.add(new JLabel(tr("Edit also …")), GBC.eol().insets(0, 8, 0, 0));
-        }
-        for(TaggingPresetItem link : presetLink) {
-            link.addToPanel(p, selected);
+            for(TaggingPresetItem link : presetLink) {
+                link.addToPanel(p, selected, presetInitiallyMatches);
+            }
         }
 
         // add Link
         for(TaggingPresetItem link : l) {
-            link.addToPanel(p, selected);
+            link.addToPanel(p, selected, presetInitiallyMatches);
         }
 
@@ -275,6 +274,4 @@
     }
 
-    static boolean presetInitiallyMatches = false;
-
     @Override
     public void actionPerformed(ActionEvent e) {
@@ -283,5 +280,4 @@
 
         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/TaggingPresetItem.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/tagging/TaggingPresetItem.java	(revision 6794)
+++ /trunk/src/org/openstreetmap/josm/gui/tagging/TaggingPresetItem.java	(revision 6795)
@@ -35,9 +35,12 @@
      * Called by {@link TaggingPreset#createPanel} during tagging preset panel creation.
      * All components defining this tagging preset item must be added to given panel.
+     *
      * @param p The panel where components must be added
      * @param sel The related selected OSM primitives
+     * @param presetInitiallyMatches Whether this {@link TaggingPreset} already matched before applying,
+     *                               i.e. whether the map feature already existed on the primitive.
      * @return {@code true} if this item adds semantic tagging elements, {@code false} otherwise.
      */
-    abstract boolean addToPanel(JPanel p, Collection<OsmPrimitive> sel);
+    abstract boolean addToPanel(JPanel p, Collection<OsmPrimitive> sel, boolean presetInitiallyMatches);
 
     /**
Index: /trunk/src/org/openstreetmap/josm/gui/tagging/TaggingPresetItems.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/tagging/TaggingPresetItems.java	(revision 6794)
+++ /trunk/src/org/openstreetmap/josm/gui/tagging/TaggingPresetItems.java	(revision 6795)
@@ -352,5 +352,5 @@
 
         @Override
-        public boolean addToPanel(JPanel p, Collection<OsmPrimitive> sel) {
+        public boolean addToPanel(JPanel p, Collection<OsmPrimitive> sel, boolean presetInitiallyMatches) {
             initializeLocaleText(null);
             p.add(new JLabel(locale_text), GBC.eol());
@@ -372,5 +372,5 @@
 
         @Override
-        public boolean addToPanel(JPanel p, Collection<OsmPrimitive> sel) {
+        public boolean addToPanel(JPanel p, Collection<OsmPrimitive> sel, boolean presetInitiallyMatches) {
             initializeLocaleText(tr("More information about this feature"));
             String url = locale_href;
@@ -397,5 +397,5 @@
 
         @Override
-        boolean addToPanel(JPanel p, Collection<OsmPrimitive> sel) {
+        boolean addToPanel(JPanel p, Collection<OsmPrimitive> sel, boolean presetInitiallyMatches) {
             final String presetName = preset_name;
             final TaggingPreset t = Utils.filter(TaggingPresetPreference.taggingPresets, new Predicate<TaggingPreset>() {
@@ -427,5 +427,5 @@
 
         @Override
-        public boolean addToPanel(JPanel p, Collection<OsmPrimitive> sel) {
+        public boolean addToPanel(JPanel p, Collection<OsmPrimitive> sel, boolean presetInitiallyMatches) {
             p.add(new JLabel(" "), GBC.eol()); // space
             if (!roles.isEmpty()) {
@@ -452,5 +452,5 @@
         // TODO: Draw a box around optional stuff
         @Override
-        public boolean addToPanel(JPanel p, Collection<OsmPrimitive> sel) {
+        public boolean addToPanel(JPanel p, Collection<OsmPrimitive> sel, boolean presetInitiallyMatches) {
             initializeLocaleText(tr("Optional Attributes:"));
             p.add(new JLabel(" "), GBC.eol()); // space
@@ -464,5 +464,5 @@
 
         @Override
-        public boolean addToPanel(JPanel p, Collection<OsmPrimitive> sel) {
+        public boolean addToPanel(JPanel p, Collection<OsmPrimitive> sel, boolean presetInitiallyMatches) {
             p.add(new JLabel(" "), GBC.eol()); // space
             return false;
@@ -486,5 +486,5 @@
 
         @Override
-        public boolean addToPanel(JPanel p, Collection<OsmPrimitive> sel) {
+        public boolean addToPanel(JPanel p, Collection<OsmPrimitive> sel, boolean presetInitiallyMatches) {
             p.add(new JSeparator(), GBC.eol().fill(GBC.HORIZONTAL).insets(0, 5, 0, 5));
             return false;
@@ -540,5 +540,5 @@
 
         @Override
-        public boolean addToPanel(JPanel p, Collection<OsmPrimitive> sel) {
+        public boolean addToPanel(JPanel p, Collection<OsmPrimitive> sel, boolean presetInitiallyMatches) {
             return false;
         }
@@ -578,5 +578,5 @@
         private JComponent value;
 
-        @Override public boolean addToPanel(JPanel p, Collection<OsmPrimitive> sel) {
+        @Override public boolean addToPanel(JPanel p, Collection<OsmPrimitive> sel, boolean presetInitiallyMatches) {
 
             // find out if our key is already used in the selection.
@@ -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) && !TaggingPreset.presetInitiallyMatches) {
+                    if (!"false".equals(use_last_as_default) && lastValue.containsKey(key) && !presetInitiallyMatches) {
                         textField.setText(lastValue.get(key));
                     } else {
@@ -760,5 +760,5 @@
 
         @Override
-        boolean addToPanel(JPanel p, Collection<OsmPrimitive> sel) {
+        boolean addToPanel(JPanel p, Collection<OsmPrimitive> sel, boolean presetInitiallyMatches) {
             Integer cols = Integer.valueOf(columns);
             int rows = (int) Math.ceil(checks.size()/cols.doubleValue());
@@ -766,5 +766,5 @@
 
             for (Check check : checks) {
-                check.addToPanel(panel, sel);
+                check.addToPanel(panel, sel, presetInitiallyMatches);
             }
 
@@ -797,5 +797,5 @@
         private boolean def;
 
-        @Override public boolean addToPanel(JPanel p, Collection<OsmPrimitive> sel) {
+        @Override public boolean addToPanel(JPanel p, Collection<OsmPrimitive> sel, boolean presetInitiallyMatches) {
 
             // find out if our key is already used in the selection.
@@ -912,5 +912,5 @@
 
         protected abstract Object getSelectedItem();
-        protected abstract void addToPanelAnchor(JPanel p, String def);
+        protected abstract void addToPanelAnchor(JPanel p, String def, boolean presetInitiallyMatches);
 
         protected char getDelChar() {
@@ -935,5 +935,5 @@
 
         @Override
-        public boolean addToPanel(JPanel p, Collection<OsmPrimitive> sel) {
+        public boolean addToPanel(JPanel p, Collection<OsmPrimitive> sel, boolean presetInitiallyMatches) {
 
             initListEntries();
@@ -946,5 +946,5 @@
 
             p.add(new JLabel(tr("{0}:", locale_text)), GBC.std().insets(0, 0, 10, 0));
-            addToPanelAnchor(p, default_);
+            addToPanelAnchor(p, default_, presetInitiallyMatches);
 
             return true;
@@ -1181,5 +1181,5 @@
 
         @Override
-        protected void addToPanelAnchor(JPanel p, String def) {
+        protected void addToPanelAnchor(JPanel p, String def, boolean presetInitiallyMatches) {
             if (!usage.unused()) {
                 for (String s : usage.values) {
@@ -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) && !TaggingPreset.presetInitiallyMatches) {
+                if ("force".equals(use_last_as_default) && lastValue.containsKey(key) && !presetInitiallyMatches) {
                     combo.setSelectedItem(lhm.get(lastValue.get(key)));
                 } else {
@@ -1260,5 +1260,5 @@
 
         @Override
-        protected void addToPanelAnchor(JPanel p, String def) {
+        protected void addToPanelAnchor(JPanel p, String def, boolean presetInitiallyMatches) {
             list = new ConcatenatingJList(delimiter, lhm.values().toArray());
             component = list;
