Index: trunk/src/org/openstreetmap/josm/gui/dialogs/properties/PresetListPanel.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/properties/PresetListPanel.java	(revision 7127)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/properties/PresetListPanel.java	(revision 7128)
@@ -2,25 +2,23 @@
 package org.openstreetmap.josm.gui.dialogs.properties;
 
-import java.awt.Cursor;
-import java.awt.Dimension;
-import java.awt.Font;
-import java.awt.GridBagLayout;
-import java.awt.event.MouseEvent;
-import java.awt.event.MouseListener;
-import java.awt.font.TextAttribute;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
+import org.openstreetmap.josm.data.osm.OsmPrimitive;
+import org.openstreetmap.josm.gui.tagging.PresetHandler;
+import org.openstreetmap.josm.gui.tagging.TaggingPreset;
+import org.openstreetmap.josm.gui.tagging.TaggingPresetType;
+import org.openstreetmap.josm.gui.tagging.PresetLabel;
+import org.openstreetmap.josm.tools.GBC;
 
 import javax.swing.JLabel;
 import javax.swing.JPanel;
+import java.awt.Dimension;
+import java.awt.GridBagLayout;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+import java.util.Collection;
+import java.util.Map;
 
-import org.openstreetmap.josm.data.osm.OsmPrimitive;
-import org.openstreetmap.josm.data.osm.Tag;
-import org.openstreetmap.josm.gui.tagging.TaggingPreset;
-import org.openstreetmap.josm.gui.tagging.TaggingPresetType;
-import org.openstreetmap.josm.tools.GBC;
-
+/**
+ * A list of matching presets for a set of tags.
+ */
 public class PresetListPanel extends JPanel {
 
@@ -32,62 +30,9 @@
     }
 
-    public interface PresetHandler {
-        Collection<OsmPrimitive> getSelection();
-        void updateTags(List<Tag> tags);
-    }
-
     /**
-     * Small helper class that manages the highlighting of the label on hover as well as opening
-     * the corresponding preset when clicked
+     * Updates the preset list based on the {@code tags} and {@code types},
+     * and associates an interaction with (matching) presets via {@code presetHandler}.
      */
-    public static class PresetLabelML implements MouseListener {
-        final JLabel label;
-        final Font hover;
-        final Font normal;
-        final TaggingPreset tag;
-        final PresetHandler presetHandler;
-
-        public PresetLabelML(JLabel lbl, TaggingPreset t, PresetHandler presetHandler) {
-            super();
-            label = lbl;
-            lbl.setCursor(new Cursor(Cursor.HAND_CURSOR));
-            normal = label.getFont();
-            hover = normal.deriveFont(Collections.singletonMap(TextAttribute.UNDERLINE, TextAttribute.UNDERLINE_LOW_DOTTED));
-            tag = t;
-            this.presetHandler = presetHandler;
-        }
-        @Override
-        public void mouseClicked(MouseEvent arg0) {
-            Collection<OsmPrimitive> selection = tag.createSelection(presetHandler.getSelection());
-            if (selection == null || selection.isEmpty())
-                return;
-            int answer = tag.showDialog(selection, false);
-
-            if (answer == TaggingPreset.DIALOG_ANSWER_APPLY) {
-                presetHandler.updateTags(tag.getChangedTags());
-            }
-
-        }
-        @Override
-        public void mouseEntered(MouseEvent arg0) {
-            label.setFont(hover);
-        }
-        @Override
-        public void mouseExited(MouseEvent arg0) {
-            label.setFont(normal);
-        }
-        @Override
-        public void mousePressed(MouseEvent arg0) {}
-        @Override
-        public void mouseReleased(MouseEvent arg0) {}
-    }
-
-    public static JLabel createLabelForPreset(TaggingPreset t) {
-        JLabel lbl = new JLabel(t.getName() + " …");
-        lbl.setIcon(t.getIcon());
-        return lbl;
-    }
-
-    public void updatePresets(final Collection<TaggingPresetType> types, final Map<String, String> tags, PresetHandler presetHandler) {
+    public void updatePresets(final Collection<TaggingPresetType> types, final Map<String, String> tags, final PresetHandler presetHandler) {
 
         removeAll();
@@ -97,7 +42,19 @@
         }
 
-        for (TaggingPreset t : TaggingPreset.getMatchingPresets(types, tags, true)) {
-            final JLabel lbl = createLabelForPreset(t);
-            lbl.addMouseListener(new PresetLabelML(lbl, t, presetHandler));
+        for (final TaggingPreset t : TaggingPreset.getMatchingPresets(types, tags, true)) {
+            final JLabel lbl = new PresetLabel(t);
+            lbl.addMouseListener(new MouseAdapter() {
+                @Override
+                public void mouseClicked(MouseEvent e) {
+                    Collection<OsmPrimitive> selection = t.createSelection(presetHandler.getSelection());
+                    if (selection == null || selection.isEmpty())
+                        return;
+                    int answer = t.showDialog(selection, false);
+
+                    if (answer == TaggingPreset.DIALOG_ANSWER_APPLY) {
+                        presetHandler.updateTags(t.getChangedTags());
+                    }
+                }
+            });
             add(lbl, GBC.eol().fill(GBC.HORIZONTAL));
         }
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesDialog.java	(revision 7127)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesDialog.java	(revision 7128)
@@ -84,7 +84,7 @@
 import org.openstreetmap.josm.gui.SideButton;
 import org.openstreetmap.josm.gui.dialogs.ToggleDialog;
-import org.openstreetmap.josm.gui.dialogs.properties.PresetListPanel.PresetHandler;
 import org.openstreetmap.josm.gui.dialogs.relation.RelationEditor;
 import org.openstreetmap.josm.gui.layer.OsmDataLayer;
+import org.openstreetmap.josm.gui.tagging.PresetHandler;
 import org.openstreetmap.josm.gui.tagging.TaggingPreset;
 import org.openstreetmap.josm.gui.tagging.TaggingPresetType;
@@ -267,7 +267,6 @@
         membershipTable.getSelectionModel().addListSelectionListener(deleteAction);
 
-        JScrollPane scrollPane = (JScrollPane) createLayout(bothTables, true, Arrays.asList(new SideButton[] {
-                this.btnAdd, this.btnEdit, this.btnDel
-        }));
+        JScrollPane scrollPane = (JScrollPane) createLayout(bothTables, true,
+                Arrays.asList(this.btnAdd, this.btnEdit, this.btnDel));
 
         MouseClickWatch mouseClickWatch = new MouseClickWatch();
@@ -460,5 +459,5 @@
         // ENTER = editAction, open "edit" dialog
         tagTable.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT)
-                .put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0),"onTableEnter");
+                .put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0), "onTableEnter");
         tagTable.getActionMap().put("onTableEnter",editAction);
         membershipTable.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT)
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/relation/GenericRelationEditor.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/relation/GenericRelationEditor.java	(revision 7127)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/relation/GenericRelationEditor.java	(revision 7128)
@@ -74,8 +74,8 @@
 import org.openstreetmap.josm.gui.MainMenu;
 import org.openstreetmap.josm.gui.SideButton;
-import org.openstreetmap.josm.gui.dialogs.properties.PresetListPanel.PresetHandler;
 import org.openstreetmap.josm.gui.help.ContextSensitiveHelpAction;
 import org.openstreetmap.josm.gui.help.HelpUtil;
 import org.openstreetmap.josm.gui.layer.OsmDataLayer;
+import org.openstreetmap.josm.gui.tagging.PresetHandler;
 import org.openstreetmap.josm.gui.tagging.TagEditorPanel;
 import org.openstreetmap.josm.gui.tagging.TaggingPreset;
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTableModel.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTableModel.java	(revision 7127)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTableModel.java	(revision 7128)
@@ -35,9 +35,9 @@
 import org.openstreetmap.josm.data.osm.event.TagsChangedEvent;
 import org.openstreetmap.josm.data.osm.event.WayNodesChangedEvent;
-import org.openstreetmap.josm.gui.dialogs.properties.PresetListPanel;
 import org.openstreetmap.josm.gui.dialogs.relation.sort.RelationSorter;
 import org.openstreetmap.josm.gui.dialogs.relation.sort.WayConnectionType;
 import org.openstreetmap.josm.gui.dialogs.relation.sort.WayConnectionTypeCalculator;
 import org.openstreetmap.josm.gui.layer.OsmDataLayer;
+import org.openstreetmap.josm.gui.tagging.PresetHandler;
 import org.openstreetmap.josm.gui.tagging.TaggingPreset;
 import org.openstreetmap.josm.gui.tagging.TaggingPresetType;
@@ -55,5 +55,5 @@
     private final CopyOnWriteArrayList<IMemberModelListener> listeners;
     private final OsmDataLayer layer;
-    private final PresetListPanel.PresetHandler presetHandler;
+    private final PresetHandler presetHandler;
 
     private final WayConnectionTypeCalculator wayConnectionTypeCalculator = new WayConnectionTypeCalculator();
@@ -63,5 +63,5 @@
      * constructor
      */
-    public MemberTableModel(OsmDataLayer layer, PresetListPanel.PresetHandler presetHandler) {
+    public MemberTableModel(OsmDataLayer layer, PresetHandler presetHandler) {
         members = new ArrayList<>();
         listeners = new CopyOnWriteArrayList<>();
Index: trunk/src/org/openstreetmap/josm/gui/tagging/PresetHandler.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/tagging/PresetHandler.java	(revision 7128)
+++ trunk/src/org/openstreetmap/josm/gui/tagging/PresetHandler.java	(revision 7128)
@@ -0,0 +1,13 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.gui.tagging;
+
+import org.openstreetmap.josm.data.osm.OsmPrimitive;
+import org.openstreetmap.josm.data.osm.Tag;
+
+import java.util.Collection;
+import java.util.List;
+
+public interface PresetHandler {
+    Collection<OsmPrimitive> getSelection();
+    void updateTags(List<Tag> tags);
+}
Index: trunk/src/org/openstreetmap/josm/gui/tagging/PresetLabel.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/tagging/PresetLabel.java	(revision 7128)
+++ trunk/src/org/openstreetmap/josm/gui/tagging/PresetLabel.java	(revision 7128)
@@ -0,0 +1,55 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.gui.tagging;
+
+import javax.swing.JLabel;
+import java.awt.Cursor;
+import java.awt.Font;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseListener;
+import java.awt.font.TextAttribute;
+import java.util.Collections;
+
+public class PresetLabel extends JLabel {
+
+    protected final TaggingPreset t;
+
+    public PresetLabel(TaggingPreset t) {
+        super(t.getName() + " …");
+        setIcon(t.getIcon());
+        addMouseListener(new PresetLabelMouseListener(this));
+        this.t = t;
+    }
+
+    /**
+     * Small helper class that manages the highlighting of the label on hover as well as opening
+     * the corresponding preset when clicked
+     */
+    public static class PresetLabelMouseListener implements MouseListener {
+        final protected JLabel label;
+        final protected Font hover;
+        final protected Font normal;
+
+        public PresetLabelMouseListener(JLabel lbl) {
+            label = lbl;
+            lbl.setCursor(new Cursor(Cursor.HAND_CURSOR));
+            normal = label.getFont();
+            hover = normal.deriveFont(Collections.singletonMap(TextAttribute.UNDERLINE, TextAttribute.UNDERLINE_LOW_DOTTED));
+        }
+        @Override
+        public void mouseClicked(MouseEvent arg0) {
+        }
+
+        @Override
+        public void mouseEntered(MouseEvent arg0) {
+            label.setFont(hover);
+        }
+        @Override
+        public void mouseExited(MouseEvent arg0) {
+            label.setFont(normal);
+        }
+        @Override
+        public void mousePressed(MouseEvent arg0) {}
+        @Override
+        public void mouseReleased(MouseEvent arg0) {}
+    }
+}
Index: trunk/src/org/openstreetmap/josm/gui/tagging/TagEditorPanel.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/tagging/TagEditorPanel.java	(revision 7127)
+++ trunk/src/org/openstreetmap/josm/gui/tagging/TagEditorPanel.java	(revision 7128)
@@ -20,5 +20,4 @@
 
 import org.openstreetmap.josm.gui.dialogs.properties.PresetListPanel;
-import org.openstreetmap.josm.gui.dialogs.properties.PresetListPanel.PresetHandler;
 import org.openstreetmap.josm.gui.layer.OsmDataLayer;
 import org.openstreetmap.josm.gui.tagging.ac.AutoCompletionList;
Index: trunk/src/org/openstreetmap/josm/gui/tagging/TaggingPresetItems.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/tagging/TaggingPresetItems.java	(revision 7127)
+++ trunk/src/org/openstreetmap/josm/gui/tagging/TaggingPresetItems.java	(revision 7128)
@@ -12,4 +12,5 @@
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
+import java.awt.event.MouseAdapter;
 import java.awt.event.MouseEvent;
 import java.io.File;
@@ -49,5 +50,4 @@
 import org.openstreetmap.josm.data.osm.Tag;
 import org.openstreetmap.josm.data.preferences.BooleanProperty;
-import org.openstreetmap.josm.gui.dialogs.properties.PresetListPanel;
 import org.openstreetmap.josm.gui.tagging.ac.AutoCompletingTextField;
 import org.openstreetmap.josm.gui.tagging.ac.AutoCompletionItemPriority;
@@ -68,5 +68,6 @@
  */
 public final class TaggingPresetItems {
-    private TaggingPresetItems() {    }
+    private TaggingPresetItems() {
+    }
 
     private static int auto_increment_selected = 0;
@@ -76,10 +77,10 @@
 
     // cache the parsing of types using a LRU cache (http://java-planet.blogspot.com/2005/08/how-to-set-up-simple-lru-cache-using.html)
-    private static final Map<String,EnumSet<TaggingPresetType>> typeCache = new LinkedHashMap<>(16, 1.1f, true);
+    private static final Map<String,EnumSet<TaggingPresetType>> TYPE_CACHE = new LinkedHashMap<>(16, 1.1f, true);
 
     /**
      * Last value of each key used in presets, used for prefilling corresponding fields
      */
-    private static final Map<String,String> lastValue = new HashMap<>();
+    private static final Map<String,String> LAST_VALUES = new HashMap<>();
 
     public static class PresetListEntry {
@@ -408,6 +409,6 @@
             }).iterator().next();
             if (t == null) return false;
-            JLabel lbl = PresetListPanel.createLabelForPreset(t);
-            lbl.addMouseListener(new PresetListPanel.PresetLabelML(lbl, t, null) {
+            JLabel lbl = new PresetLabel(t);
+            lbl.addMouseListener(new MouseAdapter() {
                 @Override
                 public void mouseClicked(MouseEvent arg0) {
@@ -597,5 +598,5 @@
                 if (auto_increment_selected != 0  && auto_increment != null) {
                     try {
-                        textField.setText(Integer.toString(Integer.parseInt(lastValue.get(key)) + auto_increment_selected));
+                        textField.setText(Integer.toString(Integer.parseInt(LAST_VALUES.get(key)) + auto_increment_selected));
                     } catch (NumberFormatException ex) {
                         // Ignore - cannot auto-increment if last was non-numeric
@@ -604,6 +605,6 @@
                 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) && !presetInitiallyMatches) {
-                        textField.setText(lastValue.get(key));
+                    if (!"false".equals(use_last_as_default) && LAST_VALUES.containsKey(key) && !presetInitiallyMatches) {
+                        textField.setText(LAST_VALUES.get(key));
                     } else {
                         textField.setText(default_);
@@ -724,5 +725,5 @@
 
             if (!"false".equals(use_last_as_default) || auto_increment != null) {
-                lastValue.put(key, v);
+                LAST_VALUES.put(key, v);
             }
             if (v.equals(originalValue) || (originalValue == null && v.length() == 0))
@@ -1093,5 +1094,5 @@
 
             if (!"false".equals(use_last_as_default)) {
-                lastValue.put(key, value);
+                LAST_VALUES.put(key, value);
             }
             changedTags.add(new Tag(key, value));
@@ -1235,6 +1236,6 @@
                 // all items were unset (and so is default)
                 originalValue = lhm.get("");
-                if ("force".equals(use_last_as_default) && lastValue.containsKey(key) && !presetInitiallyMatches) {
-                    combo.setSelectedItem(lhm.get(lastValue.get(key)));
+                if ("force".equals(use_last_as_default) && LAST_VALUES.containsKey(key) && !presetInitiallyMatches) {
+                    combo.setSelectedItem(lhm.get(LAST_VALUES.get(key)));
                 } else {
                     combo.setSelectedItem(originalValue);
@@ -1363,6 +1364,6 @@
 
     public static EnumSet<TaggingPresetType> getType(String types) throws SAXException {
-        if (typeCache.containsKey(types))
-            return typeCache.get(types);
+        if (TYPE_CACHE.containsKey(types))
+            return TYPE_CACHE.get(types);
         EnumSet<TaggingPresetType> result = EnumSet.noneOf(TaggingPresetType.class);
         for (String type : Arrays.asList(types.split(","))) {
@@ -1374,5 +1375,5 @@
             }
         }
-        typeCache.put(types, result);
+        TYPE_CACHE.put(types, result);
         return result;
     }
