Index: /trunk/src/org/openstreetmap/josm/gui/dialogs/ToggleDialog.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/dialogs/ToggleDialog.java	(revision 6751)
+++ /trunk/src/org/openstreetmap/josm/gui/dialogs/ToggleDialog.java	(revision 6752)
@@ -32,4 +32,5 @@
 import javax.swing.AbstractAction;
 import javax.swing.BorderFactory;
+import javax.swing.ButtonGroup;
 import javax.swing.JButton;
 import javax.swing.JCheckBoxMenuItem;
@@ -48,4 +49,7 @@
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.actions.JosmAction;
+import org.openstreetmap.josm.data.Preferences.PreferenceChangeEvent;
+import org.openstreetmap.josm.data.Preferences.PreferenceChangedListener;
+import org.openstreetmap.josm.data.preferences.BooleanProperty;
 import org.openstreetmap.josm.data.preferences.ParametrizedEnumProperty;
 import org.openstreetmap.josm.gui.MainMenu;
@@ -71,5 +75,5 @@
  *
  */
-public class ToggleDialog extends JPanel implements ShowHideButtonListener, Helpful, AWTEventListener, Destroyable {
+public class ToggleDialog extends JPanel implements ShowHideButtonListener, Helpful, AWTEventListener, Destroyable, PreferenceChangedListener {
 
     /**
@@ -84,7 +88,13 @@
         DYNAMIC
     }
+    
+    /**
+     * Property to enable dyanmic buttons globally.
+     * @since 6752
+     */
+    public static final BooleanProperty PROP_DYNAMIC_BUTTONS = new BooleanProperty("dialog.dynamic.buttons", false);
 
     private final ParametrizedEnumProperty<ButtonHidingType> PROP_BUTTON_HIDING = new ParametrizedEnumProperty<ToggleDialog.ButtonHidingType>(
-            ButtonHidingType.class, ButtonHidingType.ALWAYS_SHOWN) {
+            ButtonHidingType.class, ButtonHidingType.DYNAMIC) {
         @Override
         protected String getKey(String... params) {
@@ -137,10 +147,4 @@
     private int preferredHeight;
 
-    /** the label in the title bar which shows whether the toggle dialog is expanded or collapsed */
-    private JLabel lblMinimized;
-
-    /** the label in the title bar which shows whether buttons are dynamic or not */
-    private JButton buttonsHide = null;
-
     /** the JDialog displaying the toggle dialog as undocked dialog */
     protected JDialog detachedDialog;
@@ -172,4 +176,5 @@
         this(name, iconName, tooltip, shortcut, preferredHeight, false);
     }
+
     /**
      * Constructor
@@ -185,4 +190,5 @@
         this(name, iconName, tooltip, shortcut, preferredHeight, defShow, null);
     }
+
     /**
      * Constructor
@@ -223,4 +229,5 @@
 
         Main.redirectToMainContentPane(this);
+        Main.pref.addPreferenceChangeListener(this);
 
         windowMenuItem = MainMenu.addWithCheckbox(Main.main.menu.windowMenu,
@@ -370,5 +377,5 @@
             setMaximumSize(new Dimension(Integer.MAX_VALUE,20));
             setMinimumSize(new Dimension(Integer.MAX_VALUE,20));
-            lblMinimized.setIcon(ImageProvider.get("misc", "minimized"));
+            titleBar.lblMinimized.setIcon(ImageProvider.get("misc", "minimized"));
         }
         else throw new IllegalStateException();
@@ -384,5 +391,5 @@
             setPreferredSize(new Dimension(0,preferredHeight));
             setMaximumSize(new Dimension(Integer.MAX_VALUE, Integer.MAX_VALUE));
-            lblMinimized.setIcon(ImageProvider.get("misc", "normal"));
+            titleBar.lblMinimized.setIcon(ImageProvider.get("misc", "normal"));
         }
         else throw new IllegalStateException();
@@ -409,4 +416,5 @@
         Main.main.menu.windowMenu.remove(windowMenuItem);
         Toolkit.getDefaultToolkit().removeAWTEventListener(this);
+        Main.pref.removePreferenceChangeListener(this);
         destroyComponents(this, false);
     }
@@ -457,6 +465,12 @@
      */
     protected class TitleBar extends JPanel {
-        final private JLabel lblTitle;
-        final private JComponent lblTitle_weak;
+        /** the label which shows whether the toggle dialog is expanded or collapsed */
+        private final JLabel lblMinimized;
+        /** the label which displays the dialog's title **/
+        private final JLabel lblTitle;
+        private final JComponent lblTitle_weak;
+        private final DialogPopupMenu popupMenu = new DialogPopupMenu();
+        /** the button which shows whether buttons are dynamic or not */
+        private final JButton buttonsHide;
 
         public TitleBar(String toggleDialogName, String iconName) {
@@ -486,18 +500,18 @@
             add(lblTitle_weak, GBC.std().fill(GBC.HORIZONTAL));
 
-            if(Main.pref.getBoolean("dialog.dynamic.buttons", true)) {
-                buttonsHide = new JButton(ImageProvider.get("misc", buttonHiding != ButtonHidingType.ALWAYS_SHOWN ? "buttonhide" : "buttonshow"));
-                buttonsHide.setToolTipText(tr("Toggle dynamic buttons"));
-                buttonsHide.setBorder(BorderFactory.createEmptyBorder());
-                buttonsHide.addActionListener(
-                        new ActionListener(){
-                            @Override
-                            public void actionPerformed(ActionEvent e) {
-                                setIsButtonHiding(buttonHiding == ButtonHidingType.ALWAYS_SHOWN?ButtonHidingType.DYNAMIC:ButtonHidingType.ALWAYS_SHOWN);
-                            }
+            buttonsHide = new JButton(ImageProvider.get("misc", buttonHiding != ButtonHidingType.ALWAYS_SHOWN ? "buttonhide" : "buttonshow"));
+            buttonsHide.setToolTipText(tr("Toggle dynamic buttons"));
+            buttonsHide.setBorder(BorderFactory.createEmptyBorder());
+            buttonsHide.addActionListener(
+                    new ActionListener() {
+                        @Override
+                        public void actionPerformed(ActionEvent e) {
+                            JRadioButtonMenuItem item = (buttonHiding == ButtonHidingType.DYNAMIC) ? popupMenu.alwaysShown : popupMenu.dynamic;
+                            item.setSelected(true);
+                            item.getAction().actionPerformed(null);
                         }
-                        );
-                add(buttonsHide);
-            }
+                    }
+                    );
+            add(buttonsHide);
 
             // show the pref button if applicable
@@ -568,15 +582,19 @@
 
         public class DialogPopupMenu extends JPopupMenu {
-            public final JMenu buttonHidingMenu = new JMenu(tr("Side buttons"));
-            public final JRadioButtonMenuItem alwaysShown = new JRadioButtonMenuItem(new AbstractAction(tr("Always shown")) {
+            private final ButtonGroup buttonHidingGroup = new ButtonGroup();
+            private final JMenu buttonHidingMenu = new JMenu(tr("Side buttons"));
+
+            public final JRadioButtonMenuItem alwaysShown  = new JRadioButtonMenuItem(new AbstractAction(tr("Always shown")) {
                 @Override public void actionPerformed(ActionEvent e) {
                     setIsButtonHiding(ButtonHidingType.ALWAYS_SHOWN);
                 }
             });
-            public final JRadioButtonMenuItem dynamic = new JRadioButtonMenuItem(new AbstractAction(tr("Dynamic")) {
+
+            public final JRadioButtonMenuItem dynamic      = new JRadioButtonMenuItem(new AbstractAction(tr("Dynamic")) {
                 @Override public void actionPerformed(ActionEvent e) {
                     setIsButtonHiding(ButtonHidingType.DYNAMIC);
                 }
             });
+
             public final JRadioButtonMenuItem alwaysHidden = new JRadioButtonMenuItem(new AbstractAction(tr("Always hidden")) {
                 @Override public void actionPerformed(ActionEvent e) {
@@ -584,11 +602,13 @@
                 }
             });
+
             public DialogPopupMenu() {
                 alwaysShown.setSelected(buttonHiding == ButtonHidingType.ALWAYS_SHOWN);
                 dynamic.setSelected(buttonHiding == ButtonHidingType.DYNAMIC);
                 alwaysHidden.setSelected(buttonHiding == ButtonHidingType.ALWAYS_HIDDEN);
-                buttonHidingMenu.add(alwaysShown);
-                buttonHidingMenu.add(dynamic);
-                buttonHidingMenu.add(alwaysHidden);
+                for (JRadioButtonMenuItem rb : new JRadioButtonMenuItem[]{alwaysShown, dynamic, alwaysHidden}) {
+                    buttonHidingGroup.add(rb);
+                    buttonHidingMenu.add(rb);
+                }
                 add(buttonHidingMenu);
                 for (javax.swing.Action action: buttonActions) {
@@ -598,5 +618,5 @@
         }
 
-        public void registerMouseListener() {
+        public final void registerMouseListener() {
             addMouseListener(new MouseEventHandler());
         }
@@ -604,5 +624,5 @@
         class MouseEventHandler extends PopupMenuLauncher {
             public MouseEventHandler() {
-                super(new DialogPopupMenu());
+                super(popupMenu);
             }
             @Override public void mouseClicked(MouseEvent e) {
@@ -624,5 +644,5 @@
      *
      */
-    private class DetachedDialog extends JDialog{
+    private class DetachedDialog extends JDialog {
         public DetachedDialog() {
             super(JOptionPane.getFrameForComponent(Main.parent));
@@ -706,5 +726,6 @@
 
     /**
-     * Sets the title
+     * Sets the title.
+     * @param title The dialog's title
      */
     public void setTitle(String title) {
@@ -722,6 +743,6 @@
 
     protected void setIsDocked(boolean val) {
-        if(buttonsPanel != null && buttonsHide != null) {
-            buttonsPanel.setVisible(val ? buttonHiding == ButtonHidingType.ALWAYS_SHOWN : true);
+        if (buttonsPanel != null) {
+            buttonsPanel.setVisible(val ? buttonHiding != ButtonHidingType.ALWAYS_HIDDEN : true);
         }
         isDocked = val;
@@ -739,13 +760,7 @@
         buttonHiding = val;
         PROP_BUTTON_HIDING.put(val);
-        if (buttonsHide != null) {
-            buttonsHide.setIcon(ImageProvider.get("misc", val != ButtonHidingType.ALWAYS_SHOWN ? "buttonhide" : "buttonshow"));
-        }
-        if (buttonsPanel != null) {
-            buttonsPanel.setVisible(val != ButtonHidingType.ALWAYS_HIDDEN);
-        }
-        stateChanged();
-    }
-
+        refreshHidingButtons();
+    }
+    
     public int getPreferredHeight() {
         return preferredHeight;
@@ -864,12 +879,7 @@
             }
             add(buttonsPanel, BorderLayout.SOUTH);
-            if (Main.pref.getBoolean("dialog.dynamic.buttons", true)) {
-                Toolkit.getDefaultToolkit().addAWTEventListener(this, AWTEvent.MOUSE_MOTION_EVENT_MASK);
-                buttonsPanel.setVisible(buttonHiding == ButtonHidingType.ALWAYS_SHOWN || !isDocked);
-            } else if (buttonHiding == ButtonHidingType.ALWAYS_HIDDEN) {
-                buttonsPanel.setVisible(false);
-            }
-        } else if (buttonsHide != null) {
-            buttonsHide.setVisible(false);
+            dynamicButtonsPropertyChanged();
+        } else {
+            titleBar.buttonsHide.setVisible(false);
         }
 
@@ -894,3 +904,30 @@
         }
     }
+    
+    @Override
+    public void preferenceChanged(PreferenceChangeEvent e) {
+        if (e.getKey().equals(PROP_DYNAMIC_BUTTONS.getKey())) {
+            dynamicButtonsPropertyChanged();
+        }
+    }
+    
+    private void dynamicButtonsPropertyChanged() {
+        boolean propEnabled = PROP_DYNAMIC_BUTTONS.get();
+        if (propEnabled) {
+            Toolkit.getDefaultToolkit().addAWTEventListener(this, AWTEvent.MOUSE_MOTION_EVENT_MASK);
+        } else {
+            Toolkit.getDefaultToolkit().removeAWTEventListener(this);
+        }
+        titleBar.buttonsHide.setVisible(propEnabled);
+        refreshHidingButtons();
+    }
+
+    private void refreshHidingButtons() {
+        titleBar.buttonsHide.setIcon(ImageProvider.get("misc", buttonHiding != ButtonHidingType.ALWAYS_SHOWN ? "buttonhide" : "buttonshow"));
+        titleBar.buttonsHide.setEnabled(buttonHiding != ButtonHidingType.ALWAYS_HIDDEN);
+        if (buttonsPanel != null) {
+            buttonsPanel.setVisible(buttonHiding != ButtonHidingType.ALWAYS_HIDDEN || !isDocked);
+        }
+        stateChanged();
+    }
 }
Index: /trunk/src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesDialog.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesDialog.java	(revision 6751)
+++ /trunk/src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesDialog.java	(revision 6752)
@@ -53,5 +53,4 @@
 import org.openstreetmap.josm.actions.relation.DownloadMembersAction;
 import org.openstreetmap.josm.actions.relation.DownloadSelectedIncompleteMembersAction;
-import org.openstreetmap.josm.actions.relation.EditRelationAction;
 import org.openstreetmap.josm.actions.relation.SelectInRelationListAction;
 import org.openstreetmap.josm.actions.relation.SelectMembersAction;
@@ -63,5 +62,4 @@
 import org.openstreetmap.josm.command.Command;
 import org.openstreetmap.josm.data.Preferences.PreferenceChangeEvent;
-import org.openstreetmap.josm.data.Preferences.PreferenceChangedListener;
 import org.openstreetmap.josm.data.SelectionChangedListener;
 import org.openstreetmap.josm.data.osm.IRelation;
@@ -118,5 +116,5 @@
  * @author imi
  */
-public class PropertiesDialog extends ToggleDialog implements SelectionChangedListener, MapView.EditLayerChangeListener, DataSetListenerAdapter.Listener, PreferenceChangedListener {
+public class PropertiesDialog extends ToggleDialog implements SelectionChangedListener, MapView.EditLayerChangeListener, DataSetListenerAdapter.Listener {
 
     /**
@@ -1253,4 +1251,5 @@
     @Override
     public void preferenceChanged(PreferenceChangeEvent e) {
+        super.preferenceChanged(e);
         if ("display.discardable-keys".equals(e.getKey()) && Main.main.getCurrentDataSet() != null) {
             // Re-load data when display preference change
Index: /trunk/src/org/openstreetmap/josm/gui/preferences/display/LafPreference.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/preferences/display/LafPreference.java	(revision 6751)
+++ /trunk/src/org/openstreetmap/josm/gui/preferences/display/LafPreference.java	(revision 6752)
@@ -21,4 +21,5 @@
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.actions.ExpertToggleAction;
+import org.openstreetmap.josm.gui.dialogs.ToggleDialog;
 import org.openstreetmap.josm.gui.preferences.PreferenceSetting;
 import org.openstreetmap.josm.gui.preferences.PreferenceSettingFactory;
@@ -110,5 +111,5 @@
 
         dynamicButtons.setToolTipText(tr("Display buttons in right side menus only when mouse is inside the element"));
-        dynamicButtons.setSelected(Main.pref.getBoolean("dialog.dynamic.buttons", true));
+        dynamicButtons.setSelected(ToggleDialog.PROP_DYNAMIC_BUTTONS.get());
         panel.add(dynamicButtons, GBC.eop().insets(20, 0, 0, 0));
 
@@ -131,5 +132,5 @@
         Main.pref.put("osm-primitives.localize-name", showLocalizedName.isSelected());
         Main.pref.put("modeless", modeless.isSelected());
-        Main.pref.put("dialog.dynamic.buttons", dynamicButtons.isSelected());
+        Main.pref.put(ToggleDialog.PROP_DYNAMIC_BUTTONS.getKey(), dynamicButtons.isSelected());
         mod |= Main.pref.put("laf", ((LookAndFeelInfo)lafCombo.getSelectedItem()).getClassName());
         return mod;
