Index: /trunk/src/org/openstreetmap/josm/gui/dialogs/ToggleDialog.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/dialogs/ToggleDialog.java	(revision 4354)
+++ /trunk/src/org/openstreetmap/josm/gui/dialogs/ToggleDialog.java	(revision 4355)
@@ -4,4 +4,5 @@
 import static org.openstreetmap.josm.tools.I18n.tr;
 
+import java.awt.AWTEvent;
 import java.awt.BorderLayout;
 import java.awt.Component;
@@ -12,5 +13,8 @@
 import java.awt.GridLayout;
 import java.awt.Image;
+import java.awt.Point;
 import java.awt.Rectangle;
+import java.awt.Toolkit;
+import java.awt.event.AWTEventListener;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
@@ -51,5 +55,5 @@
  *
  */
-public class ToggleDialog extends JPanel implements Helpful {
+public class ToggleDialog extends JPanel implements Helpful, AWTEventListener {
 
     /** The action to toggle this dialog */
@@ -89,4 +93,5 @@
     protected JToggleButton button;
     protected boolean buttonHidden;
+    private JPanel buttonsPanel;
 
     /**
@@ -671,9 +676,28 @@
             add(data, BorderLayout.CENTER);
         if(buttons != null && buttons.size() != 0) {
-            JPanel buttonsPanel = new JPanel(Main.pref.getBoolean("dialog.align.left", false)
+            buttonsPanel = new JPanel(Main.pref.getBoolean("dialog.align.left", false)
                 ? new FlowLayout(FlowLayout.LEFT) : new GridLayout(1,buttons.size()));
             for(SideButton button : buttons)
                 buttonsPanel.add(button);
             add(buttonsPanel, BorderLayout.SOUTH);
+            if(Main.pref.getBoolean("dialog.dynamic.buttons", false)) {
+                Toolkit.getDefaultToolkit().addAWTEventListener(this, AWTEvent.MOUSE_MOTION_EVENT_MASK);
+                buttonsPanel.setVisible(false);
+            }
+        }
+    }
+
+    @Override
+    public void eventDispatched(AWTEvent event) {
+        if(isShowing()) {
+            Rectangle b = this.getBounds();
+            b.setLocation(getLocationOnScreen());
+            if (b.contains(((MouseEvent)event).getLocationOnScreen())) {
+                if(!buttonsPanel.isVisible()) {
+                    buttonsPanel.setVisible(true);
+                }
+            } else if (buttonsPanel.isVisible()) {
+                buttonsPanel.setVisible(false);
+            }
         }
     }
