Index: trunk/src/org/openstreetmap/josm/actions/PreferencesAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/PreferencesAction.java	(revision 6425)
+++ trunk/src/org/openstreetmap/josm/actions/PreferencesAction.java	(revision 6426)
@@ -10,5 +10,9 @@
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.gui.preferences.PreferenceDialog;
+import org.openstreetmap.josm.gui.preferences.SubPreferenceSetting;
+import org.openstreetmap.josm.gui.preferences.TabPreferenceSetting;
+import org.openstreetmap.josm.tools.CheckParameterUtil;
 import org.openstreetmap.josm.tools.Shortcut;
+import org.openstreetmap.josm.tools.Utils;
 
 /**
@@ -19,4 +23,24 @@
 public class PreferencesAction extends JosmAction implements Runnable {
 
+    private final Class<? extends TabPreferenceSetting> tab;
+    private final Class<? extends SubPreferenceSetting> subTab;
+
+    private PreferencesAction(String name, String tooltip,
+                              Class<? extends TabPreferenceSetting> tab, Class<? extends SubPreferenceSetting> subTab) {
+        super(name, "preference", tooltip, null, false, "preference_" + Utils.<Class>firstNonNull(tab, subTab).getName(), false);
+        this.tab = tab;
+        this.subTab = subTab;
+    }
+
+    public static PreferencesAction forPreferenceTab(String name, String tooltip, Class<? extends TabPreferenceSetting> tab) {
+        CheckParameterUtil.ensureParameterNotNull(tab);
+        return new PreferencesAction(name, tooltip, tab, null);
+    }
+
+    public static PreferencesAction forPreferenceSubTab(String name, String tooltip, Class<? extends SubPreferenceSetting> subTab) {
+        CheckParameterUtil.ensureParameterNotNull(subTab);
+        return new PreferencesAction(name, tooltip, null, subTab);
+    }
+
     /**
      * Create the preference action with "&Preferences" as label.
@@ -26,4 +50,6 @@
                 Shortcut.registerShortcut("system:preferences", tr("Preferences"), KeyEvent.VK_F12, Shortcut.DIRECT), true);
         putValue("help", ht("/Action/Preferences"));
+        this.tab = null;
+        this.subTab = null;
     }
 
@@ -38,4 +64,11 @@
     @Override
     public void run() {
+        final PreferenceDialog p = new PreferenceDialog(Main.parent);
+        if (tab != null) {
+            p.selectPreferencesTabByClass(tab);
+        } else if( subTab != null) {
+            p.selectSubPreferencesTabByClass(subTab);
+        }
+        p.setVisible(true);
         new PreferenceDialog(Main.parent).setVisible(true);
     }
Index: trunk/src/org/openstreetmap/josm/gui/MainMenu.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/MainMenu.java	(revision 6425)
+++ trunk/src/org/openstreetmap/josm/gui/MainMenu.java	(revision 6426)
@@ -110,4 +110,6 @@
 import org.openstreetmap.josm.gui.layer.Layer;
 import org.openstreetmap.josm.gui.mappaint.MapPaintMenu;
+import org.openstreetmap.josm.gui.preferences.imagery.ImageryPreference;
+import org.openstreetmap.josm.gui.preferences.map.TaggingPresetPreference;
 import org.openstreetmap.josm.gui.tagging.TaggingPresetSearchAction;
 import org.openstreetmap.josm.tools.ImageProvider;
@@ -693,5 +695,10 @@
 
         add(presetsMenu, presetSearchAction);
+        add(presetsMenu, PreferencesAction.forPreferenceSubTab(tr("Preset preferences"),
+                tr("Click to open the tagging presets tab in the preferences"), TaggingPresetPreference.class));
         presetsMenu.addSeparator();
+
+        add(imageryMenu, PreferencesAction.forPreferenceTab(tr("Imagery preferences"),
+                tr("Click to open the imagery tab in the preferences"), ImageryPreference.class));
         
         add(selectionMenu, selectAll);
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/MapPaintDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/MapPaintDialog.java	(revision 6425)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/MapPaintDialog.java	(revision 6426)
@@ -58,4 +58,6 @@
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.actions.ExtensionFileFilter;
+import org.openstreetmap.josm.actions.JosmAction;
+import org.openstreetmap.josm.actions.PreferencesAction;
 import org.openstreetmap.josm.gui.ExtendedDialog;
 import org.openstreetmap.josm.gui.PleaseWaitRunnable;
@@ -66,6 +68,6 @@
 import org.openstreetmap.josm.gui.mappaint.StyleSource;
 import org.openstreetmap.josm.gui.mappaint.mapcss.MapCSSStyleSource;
-import org.openstreetmap.josm.gui.preferences.PreferenceDialog;
 import org.openstreetmap.josm.gui.preferences.SourceEntry;
+import org.openstreetmap.josm.gui.preferences.map.MapPaintPreference;
 import org.openstreetmap.josm.gui.util.FileFilterAllFiles;
 import org.openstreetmap.josm.gui.widgets.HtmlPanel;
@@ -90,4 +92,7 @@
     protected MoveUpDownAction downAction;
     protected JCheckBox cbWireframe;
+
+    public static final JosmAction PREFERENCE_ACTION = PreferencesAction.forPreferenceSubTab(
+            tr("Map paint preferences"), null, MapPaintPreference.class);
 
     /**
@@ -158,10 +163,10 @@
         InputMapUtils.addSpacebarAction(tblStyles, onoffAction);
 
-        createLayout(p, true, Arrays.asList(new SideButton[] {
+        createLayout(p, true, Arrays.asList(
                 new SideButton(onoffAction, false),
                 new SideButton(upAction, false),
                 new SideButton(downAction, false),
-                new SideButton(new LaunchMapPaintPreferencesAction(), false)
-        }));
+                new SideButton(PREFERENCE_ACTION, false)
+        ));
     }
 
@@ -405,24 +410,4 @@
         public void valueChanged(ListSelectionEvent e) {
             updateEnabledState();
-        }
-    }
-
-    /**
-     * Opens preferences window and selects the mappaint tab.
-     */
-    public static class LaunchMapPaintPreferencesAction extends AbstractAction {
-        /**
-         * Constructs a new {@code LaunchMapPaintPreferencesAction}.
-         */
-        public LaunchMapPaintPreferencesAction() {
-            putValue(NAME, tr("Preferences"));
-            putValue(SMALL_ICON, ImageProvider.get("dialogs", "mappaintpreference"));
-        }
-
-        @Override
-        public void actionPerformed(ActionEvent e) {
-            final PreferenceDialog p =new PreferenceDialog(Main.parent);
-            p.selectMapPaintPreferenceTab();
-            p.setVisible(true);
         }
     }
Index: trunk/src/org/openstreetmap/josm/gui/mappaint/MapPaintMenu.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/mappaint/MapPaintMenu.java	(revision 6425)
+++ trunk/src/org/openstreetmap/josm/gui/mappaint/MapPaintMenu.java	(revision 6426)
@@ -14,5 +14,4 @@
 import org.openstreetmap.josm.actions.JosmAction;
 import org.openstreetmap.josm.gui.dialogs.MapPaintDialog;
-import org.openstreetmap.josm.gui.dialogs.MapPaintDialog.LaunchMapPaintPreferencesAction;
 import org.openstreetmap.josm.gui.layer.GpxLayer;
 import org.openstreetmap.josm.gui.layer.Layer;
@@ -78,10 +77,4 @@
     }
     private final Map<String, MapPaintAction> actions = new HashMap<String, MapPaintAction>();
-    private final LaunchMapPaintPreferencesAction mapPaintPreferencesAction = new MapPaintDialog.LaunchMapPaintPreferencesAction() {
-
-        {
-            putValue("toolbar", "mappaintpreference");
-        }
-    };
 
     /**
@@ -110,5 +103,5 @@
         }
         addSeparator();
-        add(mapPaintPreferencesAction);
+        add(MapPaintDialog.PREFERENCE_ACTION);
     }
 
Index: trunk/src/org/openstreetmap/josm/gui/preferences/PreferenceDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/PreferenceDialog.java	(revision 6425)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/PreferenceDialog.java	(revision 6426)
@@ -32,5 +32,4 @@
 import org.openstreetmap.josm.gui.help.HelpUtil;
 import org.openstreetmap.josm.gui.preferences.PreferenceTabbedPane.ValidationListener;
-import org.openstreetmap.josm.gui.preferences.map.MapPaintPreference;
 import org.openstreetmap.josm.tools.GBC;
 import org.openstreetmap.josm.tools.ImageProvider;
@@ -186,7 +185,3 @@
         }
     }
-
-    public void selectMapPaintPreferenceTab() {
-        tpPreferences.selectSubTabByPref(MapPaintPreference.class);
-    }
 }
