Index: trunk/src/org/openstreetmap/josm/gui/preferences/ToolbarPreferences.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/ToolbarPreferences.java	(revision 18320)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/ToolbarPreferences.java	(revision 18321)
@@ -77,4 +77,6 @@
 import org.openstreetmap.josm.gui.help.HelpUtil;
 import org.openstreetmap.josm.gui.tagging.presets.TaggingPreset;
+import org.openstreetmap.josm.gui.tagging.presets.TaggingPresetListener;
+import org.openstreetmap.josm.gui.tagging.presets.TaggingPresets;
 import org.openstreetmap.josm.gui.util.GuiHelper;
 import org.openstreetmap.josm.gui.util.ReorderableTableModel;
@@ -91,5 +93,5 @@
  * @since 172
  */
-public class ToolbarPreferences implements PreferenceSettingFactory {
+public class ToolbarPreferences implements PreferenceSettingFactory, TaggingPresetListener {
 
     private static final String EMPTY_TOOLBAR_MARKER = "<!-empty-!>";
@@ -1023,4 +1025,5 @@
         });
         MapFrame.TOOLBAR_VISIBLE.addListener(e -> refreshToolbarControl());
+        TaggingPresets.addListener(this);
     }
 
@@ -1139,4 +1142,5 @@
         }
         if (toolbar != null) {
+            actions.put(toolbar, action);
             regactions.put(toolbar, action);
         }
@@ -1153,4 +1157,5 @@
         Object toolbar = action.getValue("toolbar");
         if (toolbar instanceof String) {
+            actions.remove(toolbar);
             return regactions.remove(toolbar);
         }
@@ -1285,3 +1290,8 @@
 
     private static final DataFlavor ACTION_FLAVOR = new DataFlavor(ActionDefinition.class, "ActionItem");
+
+    @Override
+    public void taggingPresetsModified() {
+        refreshToolbarControl();
+    }
 }
Index: trunk/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPreset.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPreset.java	(revision 18320)
+++ trunk/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPreset.java	(revision 18321)
@@ -178,5 +178,4 @@
      */
     public TaggingPreset() {
-        MainApplication.getLayerManager().addActiveLayerChangeListener(this);
         updateEnabledState();
     }
Index: trunk/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresets.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresets.java	(revision 18320)
+++ trunk/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresets.java	(revision 18321)
@@ -91,4 +91,5 @@
             if (!(tp instanceof TaggingPresetSeparator)) {
                 MainApplication.getToolbar().register(tp);
+                MainApplication.getLayerManager().addActiveLayerChangeListener(tp);
             }
         }
@@ -138,10 +139,14 @@
     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();
         MainApplication.getMenu().presetsMenu.removeAll();
-        listeners.forEach(TaggingPresetListener::taggingPresetsModified);
     }
 
