Index: trunk/src/org/openstreetmap/josm/gui/preferences/PreferenceDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/PreferenceDialog.java	(revision 14600)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/PreferenceDialog.java	(revision 14601)
@@ -43,4 +43,5 @@
     private final PreferenceTabbedPane tpPreferences = new PreferenceTabbedPane();
     private final ContextSensitiveHelpAction helpAction = new ContextSensitiveHelpAction();
+    private final WindowEventHandler windowEventHandler = new WindowEventHandler();
     private boolean canceled;
 
@@ -84,6 +85,5 @@
         tpPreferences.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
         c.add(buildActionPanel(), BorderLayout.SOUTH);
-
-        addWindowListener(new WindowEventHandler());
+        addWindowListener(windowEventHandler);
 
         InputMapUtils.addEscapeAction(getRootPane(), new CancelAction());
@@ -177,6 +177,5 @@
         public void cancel() {
             setCanceled(true);
-            setVisible(false);
-            tpPreferences.validationListeners.clear();
+            dispose();
         }
 
@@ -202,7 +201,6 @@
 
             tpPreferences.savePreferences();
-            tpPreferences.validationListeners.clear();
             setCanceled(false);
-            setVisible(false);
+            dispose();
         }
     }
@@ -214,3 +212,9 @@
         }
     }
+
+    @Override
+    public void dispose() {
+        removeWindowListener(windowEventHandler);
+        super.dispose();
+    }
 }
