Index: trunk/src/org/openstreetmap/josm/gui/layer/MainLayerManager.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/layer/MainLayerManager.java	(revision 18688)
+++ trunk/src/org/openstreetmap/josm/gui/layer/MainLayerManager.java	(revision 18691)
@@ -169,11 +169,11 @@
 
     /**
-     * Adds a active/edit layer change listener
+     * Adds an active/edit layer change listener
      *
      * @param listener the listener.
      */
     public synchronized void addActiveLayerChangeListener(ActiveLayerChangeListener listener) {
-        for (int i = 0; i < activeLayerChangeListeners.size(); i++) {
-            if (activeLayerChangeListeners.get(i) == listener) {
+        for (ActiveLayerChangeListener activeLayerChangeListener : activeLayerChangeListeners) {
+            if (activeLayerChangeListener == listener) {
                 Logging.error("");
                 Logging.error("Attempted to add listener that was already in list: " + listener);
@@ -183,4 +183,23 @@
         }
         activeLayerChangeListeners.add(listener);
+    }
+
+    /**
+     * Adds multiple active/edit layer change listeners. Either all listeners are added or none are added.
+     *
+     * @param listeners the listeners.
+     * @return {@code false} if the listener list did not change
+     * @since 18691
+     */
+    public synchronized boolean addActiveLayerChangeListeners(Collection<? extends ActiveLayerChangeListener> listeners) {
+        for (ActiveLayerChangeListener activeLayerChangeListener : activeLayerChangeListeners) {
+            if (listeners.contains(activeLayerChangeListener)) {
+                Logging.error("");
+                Logging.error("Attempted to add listener that was already in list: " + listeners);
+                showStackTrace(Thread.currentThread().getStackTrace());
+                return false;
+            }
+        }
+        return activeLayerChangeListeners.addAll(listeners);
     }
 
Index: trunk/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresetSelector.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresetSelector.java	(revision 18688)
+++ trunk/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresetSelector.java	(revision 18691)
@@ -18,4 +18,5 @@
 import java.util.Objects;
 import java.util.Set;
+import java.util.regex.Pattern;
 import java.util.stream.Collectors;
 
@@ -62,4 +63,6 @@
     private static final int CLASSIFICATION_TAGS_MATCH = 100;
 
+    private static final Pattern PATTERN_PUNCTUATION = Pattern.compile("\\p{Punct}", Pattern.UNICODE_CHARACTER_CLASS);
+
     private static final BooleanProperty SEARCH_IN_TAGS = new BooleanProperty("taggingpreset.dialog.search-in-tags", true);
     private static final BooleanProperty ONLY_APPLICABLE = new BooleanProperty("taggingpreset.dialog.only-applicable-to-selection", true);
@@ -136,5 +139,5 @@
 
         private static String simplifyString(String s) {
-            return Utils.deAccent(s).toLowerCase(Locale.ENGLISH).replaceAll("\\p{Punct}", "");
+            return PATTERN_PUNCTUATION.matcher(Utils.deAccent(s).toLowerCase(Locale.ENGLISH)).replaceAll("");
         }
 
Index: trunk/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresets.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresets.java	(revision 18688)
+++ trunk/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresets.java	(revision 18691)
@@ -9,4 +9,5 @@
 import java.util.HashMap;
 import java.util.HashSet;
+import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -88,10 +89,12 @@
 
         readFromPreferences();
+        final List<TaggingPreset> activeLayerChangeListeners = new ArrayList<>(taggingPresets.size());
         for (TaggingPreset tp: taggingPresets) {
             if (!(tp instanceof TaggingPresetSeparator)) {
                 MainApplication.getToolbar().register(tp);
-                MainApplication.getLayerManager().addActiveLayerChangeListener(tp);
-            }
-        }
+                activeLayerChangeListeners.add(tp);
+            }
+        }
+        MainApplication.getLayerManager().addActiveLayerChangeListeners(activeLayerChangeListeners);
         if (taggingPresets.isEmpty()) {
             presetsMenu.setVisible(false);
