Index: src/org/openstreetmap/josm/gui/dialogs/FilterDialog.java
===================================================================
--- src/org/openstreetmap/josm/gui/dialogs/FilterDialog.java	(revision 14579)
+++ src/org/openstreetmap/josm/gui/dialogs/FilterDialog.java	(working copy)
@@ -17,7 +17,6 @@
 import javax.swing.JCheckBox;
 import javax.swing.JTable;
 import javax.swing.ListSelectionModel;
-import javax.swing.SwingUtilities;
 import javax.swing.table.DefaultTableCellRenderer;
 import javax.swing.table.JTableHeader;
 import javax.swing.table.TableCellRenderer;
@@ -247,6 +246,7 @@
     public void destroy() {
         MultikeyActionsHandler.getInstance().removeAction(enableFilterAction);
         MultikeyActionsHandler.getInstance().removeAction(hidingFilterAction);
+        userTable = null;
         super.destroy();
     }
 
@@ -301,9 +301,8 @@
      * Updates the headline of this dialog to display the number of active filters.
      */
     public void updateDialogHeader() {
-        SwingUtilities.invokeLater(() -> setTitle(
-                tr("Filter Hidden:{0} Disabled:{1}",
-                        filterModel.model.getDisabledAndHiddenCount(), filterModel.model.getDisabledCount())));
+        setTitle(tr("Filter Hidden:{0} Disabled:{1}", filterModel.model.getDisabledAndHiddenCount(),
+                filterModel.model.getDisabledCount()));
     }
 
     /**
Index: src/org/openstreetmap/josm/gui/dialogs/ToggleDialog.java
===================================================================
--- src/org/openstreetmap/josm/gui/dialogs/ToggleDialog.java	(revision 14579)
+++ src/org/openstreetmap/josm/gui/dialogs/ToggleDialog.java	(working copy)
@@ -469,6 +469,9 @@
         }
         Config.getPref().removePreferenceChangeListener(this);
         GuiHelper.destroyComponents(this, false);
+        titleBar.destroy();
+        titleBar = null;
+        this.buttonActions.clear();
     }
 
     /**
@@ -500,7 +503,7 @@
     /**
      * The title bar displayed in docked mode
      */
-    protected class TitleBar extends JPanel {
+    protected class TitleBar extends JPanel implements Destroyable {
         /** the label which shows whether the toggle dialog is expanded or collapsed */
         private final JLabel lblMinimized;
         /** the label which displays the dialog's title **/
@@ -511,6 +514,8 @@
         /** the contextual menu **/
         private DialogPopupMenu popupMenu;
 
+        private MouseEventHandler mouseEventHandler;
+
         @SuppressWarnings("unchecked")
         public TitleBar(String toggleDialogName, String iconName) {
             setLayout(new GridBagLayout());
@@ -632,7 +637,8 @@
          */
         public final void registerMouseListener() {
             popupMenu = new DialogPopupMenu();
-            addMouseListener(new MouseEventHandler());
+            mouseEventHandler = new MouseEventHandler();
+            addMouseListener(mouseEventHandler);
         }
 
         class MouseEventHandler extends PopupMenuLauncher {
@@ -656,6 +662,13 @@
                 }
             }
         }
+
+        @Override
+        public void destroy() {
+            removeMouseListener(mouseEventHandler);
+            this.mouseEventHandler = null;
+            this.popupMenu = null;
+        }
     }
 
     /**
@@ -753,7 +766,9 @@
      * @param title The dialog's title
      */
     public void setTitle(String title) {
-        titleBar.setTitle(title);
+        if (titleBar != null) {
+            titleBar.setTitle(title);
+        }
         if (detachedDialog != null) {
             detachedDialog.setTitle(title);
         }
