Index: /trunk/src/org/openstreetmap/josm/gui/dialogs/ToggleDialog.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/dialogs/ToggleDialog.java	(revision 1287)
+++ /trunk/src/org/openstreetmap/josm/gui/dialogs/ToggleDialog.java	(revision 1288)
@@ -55,6 +55,9 @@
             if (e != null && !(e.getSource() instanceof AbstractButton))
                 button.setSelected(!button.isSelected());
-            setVisible(button.isSelected());
-            Main.pref.put(prefname+".visible", button.isSelected());
+            Boolean selected = button.isSelected();
+            setVisible(selected);
+            Main.pref.put(prefname+".visible", selected);
+            if(!selected && winadapter != null)
+                winadapter.windowClosing(null);
         }
     }
@@ -67,4 +70,5 @@
 
     public JPanel parent;
+    WindowAdapter winadapter;
     private final JPanel titleBar = new JPanel(new GridBagLayout());
     public JLabel label = new JLabel();
@@ -120,7 +124,10 @@
                     minimize.setIcon(ImageProvider.get("misc", "minimized"));
                 }
-                // doLayout() - workaround
-                parent.setVisible(false);
-                parent.setVisible(true);
+                if(parent != null)
+                {
+                    // doLayout() - workaround
+                    parent.setVisible(false);
+                    parent.setVisible(true);
+                }
             }
         };
@@ -134,5 +141,5 @@
             public void mouseExited(MouseEvent e) {}
             public void mousePressed(MouseEvent e) {}
-        public void mouseReleased(MouseEvent e) {}
+            public void mouseReleased(MouseEvent e) {}
         };
         titleBar.addMouseListener(titleMouseListener);
@@ -157,18 +164,19 @@
                 parent.remove(ToggleDialog.this);
                 f.getContentPane().add(ToggleDialog.this);
-                f.addWindowListener(new WindowAdapter(){
+                f.addWindowListener((winadapter = new WindowAdapter(){
                     @Override public void windowClosing(WindowEvent e) {
-                        titleBar.setVisible(true);
                         f.getContentPane().removeAll();
-                        parent.add(ToggleDialog.this);
                         f.dispose();
+                        winadapter = null;
 
                         // doLayout() - workaround
                         setVisible(false);
-                        setVisible(true);
-
+                        parent.add(ToggleDialog.this);
+                        if(Main.pref.getBoolean(action.prefname+".visible"))
+                            setVisible(true);
+                        titleBar.setVisible(true);
                         Main.pref.put(action.prefname+".docked", true);
                     }
-                });
+                }));
                 f.addComponentListener(new ComponentAdapter(){
                     @Override public void componentMoved(ComponentEvent e) {
