Index: src/org/openstreetmap/josm/gui/preferences/map/TaggingPresetPreference.java
===================================================================
--- src/org/openstreetmap/josm/gui/preferences/map/TaggingPresetPreference.java	(revision 15553)
+++ src/org/openstreetmap/josm/gui/preferences/map/TaggingPresetPreference.java	(working copy)
@@ -31,6 +31,7 @@
 import org.openstreetmap.josm.gui.preferences.SubPreferenceSetting;
 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;
 import org.openstreetmap.josm.tools.Logging;
@@ -246,10 +247,13 @@
 
     @Override
     public boolean ok() {
-        boolean restart = Config.getPref().putBoolean("taggingpreset.sortmenu", sortMenu.getSelectedObjects() != null);
-        restart |= sources.finish();
+        if (sources.finish()
+                || Config.getPref().putBoolean("taggingpreset.sortmenu", sortMenu.getSelectedObjects() != null)) {
+            TaggingPresets.destroy();
+            TaggingPresets.initialize();
+        }
 
-        return restart;
+        return false;
     }
 
     @Override
Index: src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresets.java
===================================================================
--- src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresets.java	(revision 15553)
+++ src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresets.java	(working copy)
@@ -16,6 +16,7 @@
 import org.openstreetmap.josm.data.osm.IPrimitive;
 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;
 import org.openstreetmap.josm.gui.tagging.presets.items.Roles;
@@ -98,9 +99,27 @@
         if (Config.getPref().getBoolean("taggingpreset.sortmenu")) {
             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 xxx
+     */
+    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);
+    }
+
+    /**
      * Initialize the cache for presets. This is done only once.
      * @param presets Tagging presets to cache
      */
@@ -201,9 +220,7 @@
      */
     public static void addTaggingPresets(Collection<TaggingPreset> presets) {
         if (presets != null && taggingPresets.addAll(presets)) {
-            for (TaggingPresetListener listener : listeners) {
-                listener.taggingPresetsModified();
-            }
+            listeners.forEach(TaggingPresetListener::taggingPresetsModified);
         }
     }
 
