Index: trunk/src/org/openstreetmap/josm/gui/MainApplication.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/MainApplication.java	(revision 12844)
+++ trunk/src/org/openstreetmap/josm/gui/MainApplication.java	(revision 12845)
@@ -145,4 +145,5 @@
 import org.openstreetmap.josm.plugins.PluginHandler;
 import org.openstreetmap.josm.plugins.PluginInformation;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.FontsManager;
 import org.openstreetmap.josm.tools.GBC;
@@ -914,9 +915,10 @@
 
         Main.pref.init(args.hasOption(Option.RESET_PREFERENCES));
+        Config.setPreferencesInstance(Main.pref);
 
         args.getPreferencesToSet().forEach(Main.pref::put);
 
         if (!language.isPresent()) {
-            I18n.set(Main.pref.get("language", null));
+            I18n.set(Config.getPref().get("language", null));
         }
         Main.pref.updateSystemProperties();
@@ -938,5 +940,5 @@
         WindowGeometry geometry = WindowGeometry.mainWindow("gui.geometry",
                 args.getSingle(Option.GEOMETRY).orElse(null),
-                !args.hasOption(Option.NO_MAXIMIZE) && Main.pref.getBoolean("gui.maximized", false));
+                !args.hasOption(Option.NO_MAXIMIZE) && Config.getPref().getBoolean("gui.maximized", false));
         final MainFrame mainFrame = new MainFrame(geometry);
         final Container contentPane = mainFrame.getContentPane();
@@ -975,5 +977,5 @@
         final SplashScreen.SplashProgressMonitor monitor = splash.getProgressMonitor();
         monitor.beginTask(tr("Initializing"));
-        GuiHelper.runInEDT(() -> splash.setVisible(Main.pref.getBoolean("draw.splashscreen", true)));
+        GuiHelper.runInEDT(() -> splash.setVisible(Config.getPref().getBoolean("draw.splashscreen", true)));
         Main.setInitStatusListener(new InitStatusListener() {
 
@@ -1022,5 +1024,5 @@
         });
 
-        boolean maximized = Main.pref.getBoolean("gui.maximized", false);
+        boolean maximized = Config.getPref().getBoolean("gui.maximized", false);
         if ((!args.hasOption(Option.NO_MAXIMIZE) && maximized) || args.hasOption(Option.MAXIMIZE)) {
             mainFrame.setMaximized(true);
@@ -1051,5 +1053,5 @@
         }
 
-        if (Main.pref.getBoolean("debug.edt-checker.enable", Version.getInstance().isLocalBuild())) {
+        if (Config.getPref().getBoolean("debug.edt-checker.enable", Version.getInstance().isLocalBuild())) {
             // Repaint manager is registered so late for a reason - there is lots of violation during startup process
             // but they don't seem to break anything and are difficult to fix
@@ -1220,8 +1222,8 @@
      */
     private static void checkIPv6() {
-        if ("auto".equals(Main.pref.get("prefer.ipv6", "auto"))) {
+        if ("auto".equals(Config.getPref().get("prefer.ipv6", "auto"))) {
             new Thread((Runnable) () -> { /* this may take some time (DNS, Connect) */
                 boolean hasv6 = false;
-                boolean wasv6 = Main.pref.getBoolean("validated.ipv6", false);
+                boolean wasv6 = Config.getPref().getBoolean("validated.ipv6", false);
                 try {
                     /* Use the check result from last run of the software, as after the test, value
@@ -1252,5 +1254,5 @@
                 if (wasv6 && !hasv6) {
                     Logging.info(tr("Detected no useable IPv6 network, prefering IPv4 over IPv6 after next restart."));
-                    Main.pref.putBoolean("validated.ipv6", hasv6); // be sure it is stored before the restart!
+                    Config.getPref().putBoolean("validated.ipv6", hasv6); // be sure it is stored before the restart!
                     try {
                         RestartAction.restartJOSM();
@@ -1259,5 +1261,5 @@
                     }
                 }
-                Main.pref.putBoolean("validated.ipv6", hasv6);
+                Config.getPref().putBoolean("validated.ipv6", hasv6);
             }, "IPv6-checker").start();
         }
Index: trunk/src/org/openstreetmap/josm/spi/preferences/Config.java
===================================================================
--- trunk/src/org/openstreetmap/josm/spi/preferences/Config.java	(revision 12845)
+++ trunk/src/org/openstreetmap/josm/spi/preferences/Config.java	(revision 12845)
@@ -0,0 +1,30 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.spi.preferences;
+
+import java.util.Objects;
+
+import org.openstreetmap.josm.data.preferences.IPreferences;
+
+/**
+ * Class to hold the global preferences object.
+ */
+public class Config {
+
+    private static IPreferences preferences;
+
+    /**
+     * Get the preferences.
+     * @return the preferences
+     */
+    public static IPreferences getPref() {
+        return preferences;
+    }
+
+    /**
+     * Install the global preference instance.
+     * @param preferences the global preference instance to set (must not be null)
+     */
+    public static void setPreferencesInstance(IPreferences preferences) {
+        Config.preferences = Objects.requireNonNull(preferences, "preferences");
+    }
+}
