Index: /trunk/src/org/openstreetmap/josm/actions/PreferencesAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/PreferencesAction.java	(revision 16965)
+++ /trunk/src/org/openstreetmap/josm/actions/PreferencesAction.java	(revision 16966)
@@ -109,4 +109,6 @@
         } else if (subTab != null) {
             p.selectSubPreferencesTabByClass(subTab);
+        } else {
+            p.selectPreviouslySelectedPreferences();
         }
         p.setVisible(true);
Index: /trunk/src/org/openstreetmap/josm/gui/preferences/DefaultTabPreferenceSetting.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/preferences/DefaultTabPreferenceSetting.java	(revision 16965)
+++ /trunk/src/org/openstreetmap/josm/gui/preferences/DefaultTabPreferenceSetting.java	(revision 16966)
@@ -142,4 +142,16 @@
 
     @Override
+    public Class<? extends SubPreferenceSetting> getSelectedSubTab() {
+        if (tabpane == null || subSettingMap == null) {
+            return null;
+        }
+        final Component selected = tabpane.getSelectedComponent();
+        return subSettingMap.entrySet().stream()
+                .filter(e -> e.getValue() == selected)
+                .map(e -> e.getKey().getClass())
+                .findFirst().orElse(null);
+    }
+
+    @Override
     public String getHelpContext() {
         return HelpUtil.ht("/Action/Preferences");
Index: /trunk/src/org/openstreetmap/josm/gui/preferences/PreferenceDialog.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/preferences/PreferenceDialog.java	(revision 16965)
+++ /trunk/src/org/openstreetmap/josm/gui/preferences/PreferenceDialog.java	(revision 16966)
@@ -31,4 +31,5 @@
 import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.tools.InputMapUtils;
+import org.openstreetmap.josm.tools.Pair;
 
 /**
@@ -45,4 +46,5 @@
     private final WindowEventHandler windowEventHandler = new WindowEventHandler();
     private boolean canceled;
+    private static Pair<Class<? extends TabPreferenceSetting>, Class<? extends SubPreferenceSetting>> previouslySelected;
 
     /**
@@ -145,4 +147,15 @@
 
     /**
+     * Select preferences tab that was selected previously.
+     */
+    public void selectPreviouslySelectedPreferences() {
+        if (previouslySelected != null && previouslySelected.b != null) {
+            tpPreferences.selectSubTabByPref(previouslySelected.b);
+        } else if (previouslySelected != null && previouslySelected.a != null) {
+            tpPreferences.selectTabByPref(previouslySelected.a);
+        }
+    }
+
+    /**
      * Select preferences tab by name.
      * @param name preferences tab name (icon)
@@ -215,4 +228,5 @@
     @Override
     public void dispose() {
+        previouslySelected = tpPreferences.getSelectedTab();
         removeWindowListener(windowEventHandler);
         super.dispose();
Index: /trunk/src/org/openstreetmap/josm/gui/preferences/PreferenceTabbedPane.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/preferences/PreferenceTabbedPane.java	(revision 16965)
+++ /trunk/src/org/openstreetmap/josm/gui/preferences/PreferenceTabbedPane.java	(revision 16966)
@@ -71,4 +71,5 @@
 import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.tools.Logging;
+import org.openstreetmap.josm.tools.Pair;
 import org.openstreetmap.josm.tools.Utils;
 import org.openstreetmap.josm.tools.bugreport.BugReportExceptionHandler;
@@ -354,4 +355,18 @@
             Logging.trace(ignore);
             return false;
+        }
+    }
+
+    /**
+     * Returns the currently selected preference and sub preference setting
+     * @return the currently selected preference and sub preference setting
+     */
+    public Pair<Class<? extends TabPreferenceSetting>, Class<? extends SubPreferenceSetting>> getSelectedTab() {
+        final Component selected = getSelectedComponent();
+        if (selected instanceof PreferenceTab) {
+            final TabPreferenceSetting setting = ((PreferenceTab) selected).getTabPreferenceSetting();
+            return Pair.create(setting.getClass(), setting.getSelectedSubTab());
+        } else {
+            return null;
         }
     }
Index: /trunk/src/org/openstreetmap/josm/gui/preferences/TabPreferenceSetting.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/preferences/TabPreferenceSetting.java	(revision 16965)
+++ /trunk/src/org/openstreetmap/josm/gui/preferences/TabPreferenceSetting.java	(revision 16966)
@@ -72,4 +72,10 @@
 
     /**
+     * Returns the currently selected sub preference setting
+     * @return the currently selected sub preference setting
+     */
+    Class<? extends SubPreferenceSetting> getSelectedSubTab();
+
+    /**
      * Selects the specified sub preference settings, if applicable. Not all Tab preference settings need to implement this.
      * @param subPref The sub preference settings to be selected.
