Index: trunk/src/org/openstreetmap/josm/actions/PreferencesAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/PreferencesAction.java	(revision 17306)
+++ trunk/src/org/openstreetmap/josm/actions/PreferencesAction.java	(revision 17307)
@@ -7,4 +7,6 @@
 import java.awt.event.ActionEvent;
 import java.awt.event.KeyEvent;
+
+import javax.swing.SwingUtilities;
 
 import org.openstreetmap.josm.gui.MainApplication;
@@ -106,11 +108,13 @@
     public void run() {
         final PreferenceDialog p = new PreferenceDialog(MainApplication.getMainFrame());
-        if (tab != null) {
-            p.selectPreferencesTabByClass(tab);
-        } else if (subTab != null) {
-            p.selectSubPreferencesTabByClass(subTab);
-        } else {
-            p.selectPreviouslySelectedPreferences();
-        }
+        SwingUtilities.invokeLater(() -> {
+            if (tab != null) {
+                p.selectPreferencesTabByClass(tab);
+            } else if (subTab != null) {
+                p.selectSubPreferencesTabByClass(subTab);
+            } else {
+                p.selectPreviouslySelectedPreferences();
+            }
+        });
         p.setVisible(true);
     }
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/ToggleDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/ToggleDialog.java	(revision 17306)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/ToggleDialog.java	(revision 17307)
@@ -582,9 +582,11 @@
                 pref.addActionListener(e -> {
                     final PreferenceDialog p = new PreferenceDialog(MainApplication.getMainFrame());
-                    if (TabPreferenceSetting.class.isAssignableFrom(preferenceClass)) {
-                        p.selectPreferencesTabByClass((Class<? extends TabPreferenceSetting>) preferenceClass);
-                    } else if (SubPreferenceSetting.class.isAssignableFrom(preferenceClass)) {
-                        p.selectSubPreferencesTabByClass((Class<? extends SubPreferenceSetting>) preferenceClass);
-                    }
+                    SwingUtilities.invokeLater(() -> {
+                        if (TabPreferenceSetting.class.isAssignableFrom(preferenceClass)) {
+                            p.selectPreferencesTabByClass((Class<? extends TabPreferenceSetting>) preferenceClass);
+                        } else if (SubPreferenceSetting.class.isAssignableFrom(preferenceClass)) {
+                            p.selectSubPreferencesTabByClass((Class<? extends SubPreferenceSetting>) preferenceClass);
+                        }
+                    });
                     p.setVisible(true);
                 });
Index: trunk/src/org/openstreetmap/josm/gui/preferences/PreferenceTabbedPane.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/PreferenceTabbedPane.java	(revision 17306)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/PreferenceTabbedPane.java	(revision 17307)
@@ -528,5 +528,4 @@
     private void addGUITabs(boolean clear) {
         boolean expert = ExpertToggleAction.isExpert();
-        Component sel = getSelectedComponent();
         if (clear) {
             removeAll();
@@ -561,14 +560,16 @@
             });
         }
+        setSelectedIndex(-1);
+    }
+
+    @Override
+    public void expertChanged(boolean isExpert) {
+        Component sel = getSelectedComponent();
+        addGUITabs(true);
         int index = -1;
         if (sel != null) {
             index = indexOfComponent(sel);
         }
-        setSelectedIndex(index);
-    }
-
-    @Override
-    public void expertChanged(boolean isExpert) {
-        addGUITabs(true);
+        setSelectedIndex(Math.max(index, 0));
     }
 
Index: trunk/src/org/openstreetmap/josm/gui/preferences/ToolbarPreferences.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/ToolbarPreferences.java	(revision 17306)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/ToolbarPreferences.java	(revision 17307)
@@ -52,4 +52,5 @@
 import javax.swing.ListSelectionModel;
 import javax.swing.MenuElement;
+import javax.swing.SwingUtilities;
 import javax.swing.TransferHandler;
 import javax.swing.event.PopupMenuEvent;
@@ -513,5 +514,5 @@
             public void actionPerformed(ActionEvent e) {
                 final PreferenceDialog p = new PreferenceDialog(MainApplication.getMainFrame());
-                p.selectPreferencesTabByName("toolbar");
+                SwingUtilities.invokeLater(() -> p.selectPreferencesTabByName("toolbar"));
                 p.setVisible(true);
             }
@@ -523,5 +524,5 @@
                 final PreferenceDialog p = new PreferenceDialog(MainApplication.getMainFrame());
                 p.getTabbedPane().getShortcutPreference().setDefaultFilter(act.getDisplayName());
-                p.selectPreferencesTabByName("shortcuts");
+                SwingUtilities.invokeLater(() -> p.selectPreferencesTabByName("shortcuts"));
                 p.setVisible(true);
                 // refresh toolbar to try using changed shortcuts without restart
