Index: src/org/openstreetmap/josm/gui/preferences/ToolbarPreferences.java
===================================================================
--- src/org/openstreetmap/josm/gui/preferences/ToolbarPreferences.java	(revision 18280)
+++ src/org/openstreetmap/josm/gui/preferences/ToolbarPreferences.java	(working copy)
@@ -76,6 +76,8 @@
 import org.openstreetmap.josm.gui.MapFrame;
 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;
 import org.openstreetmap.josm.spi.preferences.Config;
@@ -90,7 +92,7 @@
  * Toolbar preferences.
  * @since 172
  */
-public class ToolbarPreferences implements PreferenceSettingFactory {
+public class ToolbarPreferences implements PreferenceSettingFactory, TaggingPresetListener {
 
     private static final String EMPTY_TOOLBAR_MARKER = "<!-empty-!>";
 
@@ -1022,6 +1024,7 @@
             control.setComponentPopupMenu(popupMenu);
         });
         MapFrame.TOOLBAR_VISIBLE.addListener(e -> refreshToolbarControl());
+        TaggingPresets.addListener(this);
     }
 
     private void loadAction(DefaultMutableTreeNode node, MenuElement menu) {
@@ -1284,4 +1287,9 @@
     }
 
     private static final DataFlavor ACTION_FLAVOR = new DataFlavor(ActionDefinition.class, "ActionItem");
+
+    @Override
+    public void taggingPresetsModified() {
+        refreshToolbarControl();
+    }
 }
Index: src/org/openstreetmap/josm/gui/tagging/presets/TaggingPreset.java
===================================================================
--- src/org/openstreetmap/josm/gui/tagging/presets/TaggingPreset.java	(revision 18280)
+++ 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 18280)
+++ 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();
