Index: trunk/src/org/openstreetmap/josm/gui/preferences/map/TaggingPresetPreference.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/map/TaggingPresetPreference.java	(revision 15581)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/map/TaggingPresetPreference.java	(revision 15582)
@@ -32,4 +32,5 @@
 import org.openstreetmap.josm.gui.preferences.TabPreferenceSetting;
 import org.openstreetmap.josm.gui.tagging.presets.TaggingPresetReader;
+import org.openstreetmap.josm.gui.tagging.presets.TaggingPresets;
 import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.GBC;
@@ -247,8 +248,11 @@
     @Override
     public boolean ok() {
-        boolean restart = Config.getPref().putBoolean("taggingpreset.sortmenu", sortMenu.getSelectedObjects() != null);
-        restart |= sources.finish();
-
-        return restart;
+        if (sources.finish()
+                || Config.getPref().putBoolean("taggingpreset.sortmenu", sortMenu.getSelectedObjects() != null)) {
+            TaggingPresets.destroy();
+            TaggingPresets.initialize();
+        }
+
+        return false;
     }
 
Index: trunk/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresets.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresets.java	(revision 15581)
+++ trunk/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresets.java	(revision 15582)
@@ -17,4 +17,5 @@
 import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.gui.MenuScroller;
+import org.openstreetmap.josm.gui.preferences.ToolbarPreferences;
 import org.openstreetmap.josm.gui.tagging.presets.items.CheckGroup;
 import org.openstreetmap.josm.gui.tagging.presets.items.KeyedItem;
@@ -99,4 +100,22 @@
             TaggingPresetMenu.sortMenu(MainApplication.getMenu().presetsMenu);
         }
+        listeners.forEach(TaggingPresetListener::taggingPresetsModified);
+    }
+
+    // Cannot implement Destroyable since this is static
+    /**
+     * Call to deconstruct the TaggingPresets menus and other information so that it
+     * can be rebuilt later.
+     *
+     * @since 15582
+     */
+    public static void destroy() {
+        ToolbarPreferences toolBar = MainApplication.getToolbar();
+        taggingPresets.forEach(toolBar::unregister);
+        taggingPresets.clear();
+        PRESET_TAG_CACHE.clear();
+        PRESET_ROLE_CACHE.clear();
+        MainApplication.getMenu().presetsMenu.removeAll();
+        listeners.forEach(TaggingPresetListener::taggingPresetsModified);
     }
 
@@ -202,7 +221,5 @@
     public static void addTaggingPresets(Collection<TaggingPreset> presets) {
         if (presets != null && taggingPresets.addAll(presets)) {
-            for (TaggingPresetListener listener : listeners) {
-                listener.taggingPresetsModified();
-            }
+            listeners.forEach(TaggingPresetListener::taggingPresetsModified);
         }
     }
