Index: src/org/openstreetmap/josm/gui/tagging/presets/TaggingPreset.java
===================================================================
--- src/org/openstreetmap/josm/gui/tagging/presets/TaggingPreset.java	(revision 18275)
+++ src/org/openstreetmap/josm/gui/tagging/presets/TaggingPreset.java	(working copy)
@@ -177,7 +177,6 @@
      * Use this as default item for "do not select anything".
      */
     public TaggingPreset() {
-        MainApplication.getLayerManager().addActiveLayerChangeListener(this);
         updateEnabledState();
     }
 
Index: src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresets.java
===================================================================
--- src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresets.java	(revision 18275)
+++ src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresets.java	(working copy)
@@ -90,6 +90,7 @@
         for (TaggingPreset tp: taggingPresets) {
             if (!(tp instanceof TaggingPresetSeparator)) {
                 MainApplication.getToolbar().register(tp);
+                MainApplication.getLayerManager().addActiveLayerChangeListener(tp);
             }
         }
         if (taggingPresets.isEmpty()) {
@@ -137,7 +138,12 @@
      */
     public static void destroy() {
         ToolbarPreferences toolBar = MainApplication.getToolbar();
-        taggingPresets.forEach(toolBar::unregister);
+        for (TaggingPreset tp: taggingPresets) {
+            toolBar.unregister(tp);
+            if (!(tp instanceof TaggingPresetSeparator)) {
+                MainApplication.getLayerManager().removeActiveLayerChangeListener(tp);
+            }
+        }
         taggingPresets.clear();
         PRESET_TAG_CACHE.clear();
         PRESET_ROLE_CACHE.clear();
