Index: trunk/src/org/openstreetmap/josm/Main.java
===================================================================
--- trunk/src/org/openstreetmap/josm/Main.java	(revision 14148)
+++ trunk/src/org/openstreetmap/josm/Main.java	(revision 14149)
@@ -43,5 +43,7 @@
     /**
      * Global application preferences
-     */
+     * @deprecated Use {@link Config#getPref()} or {@link Preferences#main()}
+     */
+    @Deprecated
     public static final Preferences pref = new Preferences(JosmBaseDirectories.getInstance());
 
Index: trunk/src/org/openstreetmap/josm/actions/PreferenceToggleAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/PreferenceToggleAction.java	(revision 14148)
+++ trunk/src/org/openstreetmap/josm/actions/PreferenceToggleAction.java	(revision 14149)
@@ -6,5 +6,5 @@
 import javax.swing.JCheckBoxMenuItem;
 
-import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.data.Preferences;
 import org.openstreetmap.josm.data.preferences.BooleanProperty;
 import org.openstreetmap.josm.spi.preferences.PreferenceChangeEvent;
@@ -35,5 +35,5 @@
         checkbox = new JCheckBoxMenuItem(this);
         checkbox.setSelected(pref.get());
-        Main.pref.addWeakKeyPreferenceChangeListener(prefKey, this);
+        Preferences.main().addWeakKeyPreferenceChangeListener(prefKey, this);
     }
 
Index: trunk/src/org/openstreetmap/josm/actions/ShowStatusReportAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/ShowStatusReportAction.java	(revision 14148)
+++ trunk/src/org/openstreetmap/josm/actions/ShowStatusReportAction.java	(revision 14149)
@@ -26,4 +26,5 @@
 
 import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.data.Preferences;
 import org.openstreetmap.josm.data.Version;
 import org.openstreetmap.josm.data.osm.DataSet;
@@ -277,5 +278,5 @@
         String reportHeader = getReportHeader();
         text.append(reportHeader);
-        Map<String, Setting<?>> settings = Main.pref.getAllSettings();
+        Map<String, Setting<?>> settings = Preferences.main().getAllSettings();
         Set<String> keys = new HashSet<>(settings.keySet());
         for (String key : keys) {
Index: trunk/src/org/openstreetmap/josm/actions/mapmode/DrawSnapHelper.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/mapmode/DrawSnapHelper.java	(revision 14148)
+++ trunk/src/org/openstreetmap/josm/actions/mapmode/DrawSnapHelper.java	(revision 14149)
@@ -18,5 +18,5 @@
 import javax.swing.JPopupMenu;
 
-import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.data.Preferences;
 import org.openstreetmap.josm.data.coor.EastNorth;
 import org.openstreetmap.josm.data.coor.LatLon;
@@ -234,5 +234,5 @@
 
         computeSnapAngles();
-        Main.pref.addWeakKeyPreferenceChangeListener(DRAW_ANGLESNAP_ANGLES, e -> this.computeSnapAngles());
+        Preferences.main().addWeakKeyPreferenceChangeListener(DRAW_ANGLESNAP_ANGLES, e -> this.computeSnapAngles());
     }
 
Index: trunk/src/org/openstreetmap/josm/data/Preferences.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/Preferences.java	(revision 14148)
+++ trunk/src/org/openstreetmap/josm/data/Preferences.java	(revision 14149)
@@ -36,4 +36,5 @@
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.preferences.ColorInfo;
+import org.openstreetmap.josm.data.preferences.JosmBaseDirectories;
 import org.openstreetmap.josm.data.preferences.NamedColorProperty;
 import org.openstreetmap.josm.data.preferences.PreferencesReader;
@@ -116,4 +117,6 @@
     private final HashMap<String, ListenerList<org.openstreetmap.josm.spi.preferences.PreferenceChangedListener>> keyListeners = new HashMap<>();
 
+    private static final Preferences defaultInstance = new Preferences(JosmBaseDirectories.getInstance());
+
     /**
      * Constructs a new {@code Preferences}.
@@ -141,4 +144,13 @@
         settingsMap.putAll(pref.settingsMap);
         defaultsMap.putAll(pref.defaultsMap);
+    }
+
+    /**
+     * Returns the main (default) preferences instance.
+     * @return the main (default) preferences instance
+     * @since 14149
+     */
+    public static Preferences main() {
+        return defaultInstance;
     }
 
@@ -274,6 +286,6 @@
     public static Collection<String> getAllPossiblePreferenceDirs() {
         Set<String> locations = new HashSet<>();
-        addPossibleResourceDir(locations, Config.getDirs().getPreferencesDirectory(false).getPath());
-        addPossibleResourceDir(locations, Config.getDirs().getUserDataDirectory(false).getPath());
+        addPossibleResourceDir(locations, defaultInstance.dirs.getPreferencesDirectory(false).getPath());
+        addPossibleResourceDir(locations, defaultInstance.dirs.getUserDataDirectory(false).getPath());
         addPossibleResourceDir(locations, getSystemEnv("JOSM_RESOURCES"));
         addPossibleResourceDir(locations, getSystemProperty("josm.resources"));
Index: trunk/src/org/openstreetmap/josm/gui/MainApplication.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/MainApplication.java	(revision 14148)
+++ trunk/src/org/openstreetmap/josm/gui/MainApplication.java	(revision 14149)
@@ -83,4 +83,5 @@
 import org.openstreetmap.josm.command.SplitWayCommand;
 import org.openstreetmap.josm.data.Bounds;
+import org.openstreetmap.josm.data.Preferences;
 import org.openstreetmap.josm.data.UndoRedoHandler;
 import org.openstreetmap.josm.data.UndoRedoHandler.CommandQueueListener;
@@ -819,5 +820,6 @@
         PlatformManager.getPlatform().preStartupHook();
 
-        Config.setPreferencesInstance(Main.pref);
+        Preferences prefs = Preferences.main();
+        Config.setPreferencesInstance(prefs);
         Config.setBaseDirectoriesProvider(JosmBaseDirectories.getInstance());
         Config.setUrlsProvider(JosmUrls.getInstance());
@@ -843,10 +845,10 @@
 
         try {
-            Main.pref.init(args.hasOption(Option.RESET_PREFERENCES));
+            Preferences.main().init(args.hasOption(Option.RESET_PREFERENCES));
         } catch (SecurityException e) {
             Logging.log(Logging.LEVEL_ERROR, "Unable to initialize preferences", e);
         }
 
-        args.getPreferencesToSet().forEach(Main.pref::put);
+        args.getPreferencesToSet().forEach(prefs::put);
 
         if (!language.isPresent()) {
@@ -854,5 +856,5 @@
         }
         updateSystemProperties();
-        Main.pref.addPreferenceChangeListener(new PreferenceChangedListener() {
+        Preferences.main().addPreferenceChangeListener(new PreferenceChangedListener() {
             @Override
             public void preferenceChanged(PreferenceChangeEvent e) {
@@ -887,5 +889,5 @@
 
         if (args.hasOption(Option.LOAD_PREFERENCES)) {
-            XMLCommandProcessor config = new XMLCommandProcessor(Main.pref);
+            XMLCommandProcessor config = new XMLCommandProcessor(prefs);
             for (String i : args.get(Option.LOAD_PREFERENCES)) {
                 try {
Index: trunk/src/org/openstreetmap/josm/gui/MainTermination.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/MainTermination.java	(revision 14148)
+++ trunk/src/org/openstreetmap/josm/gui/MainTermination.java	(revision 14149)
@@ -8,5 +8,5 @@
 import java.util.Objects;
 
-import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.data.Preferences;
 import org.openstreetmap.josm.data.cache.JCSCacheManager;
 import org.openstreetmap.josm.tools.ImageProvider;
@@ -48,5 +48,5 @@
         ImageProvider.shutdown(false);
         try {
-            Main.pref.saveDefaults();
+            Preferences.main().saveDefaults();
         } catch (IOException | InvalidPathException ex) {
             Logging.log(Logging.LEVEL_WARN, tr("Failed to save default preferences."), ex);
Index: trunk/src/org/openstreetmap/josm/gui/io/CustomConfigurator.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/io/CustomConfigurator.java	(revision 14148)
+++ trunk/src/org/openstreetmap/josm/gui/io/CustomConfigurator.java	(revision 14149)
@@ -100,5 +100,5 @@
      */
     public static void readXML(File file) {
-        readXML(file, Main.pref);
+        readXML(file, Preferences.main());
     }
 
@@ -206,5 +206,5 @@
     public static void exportPreferencesKeysByPatternToFile(String fileName, boolean append, String pattern) {
         List<String> keySet = new ArrayList<>();
-        Map<String, Setting<?>> allSettings = Main.pref.getAllSettings();
+        Map<String, Setting<?>> allSettings = Preferences.main().getAllSettings();
         for (String key: allSettings.keySet()) {
             if (key.matches(pattern))
@@ -227,5 +227,5 @@
 
         try {
-            String toXML = Main.pref.toXML(true);
+            String toXML = Preferences.main().toXML(true);
             DocumentBuilder builder = XmlUtils.newSafeDOMBuilder();
             document = builder.parse(new ByteArrayInputStream(toXML.getBytes(StandardCharsets.UTF_8)));
@@ -358,5 +358,5 @@
                     for (PluginInformation pi4: toDeletePlugins) {
                         pls.remove(pi4.name);
-                        new File(Main.pref.getPluginsDirectory(), pi4.name+".jar").deleteOnExit();
+                        new File(Preferences.main().getPluginsDirectory(), pi4.name+".jar").deleteOnExit();
                     }
                     Config.getPref().putList("plugins", pls);
@@ -375,5 +375,5 @@
             dir = Config.getDirs().getCacheDirectory(false).getAbsolutePath();
         } else if ("plugins".equals(base)) {
-            dir = Main.pref.getPluginsDirectory().getAbsolutePath();
+            dir = Preferences.main().getPluginsDirectory().getAbsolutePath();
         } else {
             dir = null;
Index: trunk/src/org/openstreetmap/josm/gui/preferences/advanced/AdvancedPreference.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/advanced/AdvancedPreference.java	(revision 14148)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/advanced/AdvancedPreference.java	(revision 14149)
@@ -130,5 +130,5 @@
             }
         });
-        readPreferences(Main.pref);
+        readPreferences(Preferences.main());
 
         applyFilter();
@@ -181,9 +181,9 @@
     private void readPreferences(Preferences tmpPrefs) {
         Map<String, Setting<?>> loaded;
-        Map<String, Setting<?>> orig = Main.pref.getAllSettings();
+        Map<String, Setting<?>> orig = Preferences.main().getAllSettings();
         Map<String, Setting<?>> defaults = tmpPrefs.getAllDefaults();
         orig.remove("osm-server.password");
         defaults.remove("osm-server.password");
-        if (tmpPrefs != Main.pref) {
+        if (tmpPrefs != Preferences.main()) {
             loaded = tmpPrefs.getAllSettings();
             // plugins preference keys may be changed directly later, after plugins are downloaded
@@ -262,5 +262,5 @@
             return;
 
-        Preferences tmpPrefs = new Preferences(Main.pref);
+        Preferences tmpPrefs = new Preferences(Preferences.main());
 
         StringBuilder log = new StringBuilder();
@@ -324,5 +324,5 @@
 
         for (Entry<String, String> e: profileTypes.entrySet()) {
-            menu.add(new ExportProfileAction(Main.pref, e.getKey(), e.getValue()));
+            menu.add(new ExportProfileAction(Preferences.main(), e.getKey(), e.getValue()));
         }
 
@@ -339,11 +339,11 @@
                         "Are you sure you want to continue?")
                         +"</html>", null, "")) {
-                    Main.pref.resetToDefault();
+                    Preferences.main().resetToDefault();
                     try {
-                        Main.pref.save();
+                        Preferences.main().save();
                     } catch (IOException | InvalidPathException e) {
                         Logging.log(Logging.LEVEL_WARN, "Exception while saving preferences:", e);
                     }
-                    readPreferences(Main.pref);
+                    readPreferences(Preferences.main());
                     applyFilter();
                 }
@@ -412,5 +412,5 @@
         @Override
         public void actionPerformed(ActionEvent ae) {
-            Preferences tmpPrefs = new Preferences(Main.pref);
+            Preferences tmpPrefs = new Preferences(Preferences.main());
             CustomConfigurator.readXML(file, tmpPrefs);
             readPreferences(tmpPrefs);
@@ -460,5 +460,5 @@
         for (PrefEntry e : allData) {
             if (e.isChanged()) {
-                Main.pref.putSetting(e.getKey(), e.getValue().getValue() == null ? null : e.getValue());
+                Preferences.main().putSetting(e.getKey(), e.getValue().getValue() == null ? null : e.getValue());
             }
         }
Index: trunk/src/org/openstreetmap/josm/gui/preferences/display/ColorPreference.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/display/ColorPreference.java	(revision 14148)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/display/ColorPreference.java	(revision 14149)
@@ -36,5 +36,5 @@
 import javax.swing.table.DefaultTableCellRenderer;
 
-import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.data.Preferences;
 import org.openstreetmap.josm.data.osm.visitor.paint.PaintColors;
 import org.openstreetmap.josm.data.preferences.ColorInfo;
@@ -269,5 +269,5 @@
     public void addGui(final PreferenceTabbedPane gui) {
         fixColorPrefixes();
-        setColors(Main.pref.getAllNamedColors());
+        setColors(Preferences.main().getAllNamedColors());
 
         colorEdit = new JButton(tr("Choose"));
Index: trunk/src/org/openstreetmap/josm/gui/preferences/plugin/PluginPreference.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/plugin/PluginPreference.java	(revision 14148)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/plugin/PluginPreference.java	(revision 14149)
@@ -45,4 +45,5 @@
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.actions.ExpertToggleAction;
+import org.openstreetmap.josm.data.Preferences;
 import org.openstreetmap.josm.data.Version;
 import org.openstreetmap.josm.gui.HelpAwareOptionPane;
@@ -300,5 +301,5 @@
         if (answer != 0 /* OK */)
             return;
-        Main.pref.setPluginSites(pnl.getUpdateSites());
+        Preferences.main().setPluginSites(pnl.getUpdateSites());
     }
 
@@ -376,5 +377,5 @@
         @Override
         public void actionPerformed(ActionEvent e) {
-            Collection<String> pluginSites = Main.pref.getOnlinePluginSites();
+            Collection<String> pluginSites = Preferences.main().getOnlinePluginSites();
             if (pluginSites.isEmpty()) {
                 return;
@@ -430,5 +431,5 @@
             // the async task for downloading plugin information
             final ReadRemotePluginInformationTask pluginInfoDownloadTask = new ReadRemotePluginInformationTask(
-                    Main.pref.getOnlinePluginSites());
+                    Preferences.main().getOnlinePluginSites());
 
             // to be run asynchronously after the plugin download
@@ -601,5 +602,5 @@
             super(new GridBagLayout());
             add(new JLabel(tr("Add JOSM Plugin description URL.")), GBC.eol());
-            for (String s : Main.pref.getPluginSites()) {
+            for (String s : Preferences.main().getPluginSites()) {
                 model.addElement(s);
             }
Index: trunk/src/org/openstreetmap/josm/io/CachedFile.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/CachedFile.java	(revision 14148)
+++ trunk/src/org/openstreetmap/josm/io/CachedFile.java	(revision 14149)
@@ -29,5 +29,5 @@
 import java.util.zip.ZipFile;
 
-import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.data.Preferences;
 import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.HttpClient;
@@ -298,5 +298,5 @@
                 cacheFile = new File(Config.getDirs().getUserDataDirectory(false), name.substring("josmdir://".length()));
             } else if (name.startsWith("josmplugindir://")) {
-                cacheFile = new File(Main.pref.getPluginsDirectory(), name.substring("josmplugindir://".length()));
+                cacheFile = new File(Preferences.main().getPluginsDirectory(), name.substring("josmplugindir://".length()));
             } else {
                 cacheFile = new File(name);
Index: trunk/src/org/openstreetmap/josm/plugins/Plugin.java
===================================================================
--- trunk/src/org/openstreetmap/josm/plugins/Plugin.java	(revision 14148)
+++ trunk/src/org/openstreetmap/josm/plugins/Plugin.java	(revision 14149)
@@ -11,5 +11,5 @@
 import java.util.List;
 
-import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.data.Preferences;
 import org.openstreetmap.josm.gui.MapFrame;
 import org.openstreetmap.josm.gui.MapFrameListener;
@@ -167,5 +167,5 @@
      */
     public ClassLoader getPluginResourceClassLoader() {
-        File pluginDir = Main.pref.getPluginsDirectory();
+        File pluginDir = Preferences.main().getPluginsDirectory();
         File pluginJar = new File(pluginDir, info.name + ".jar");
         final URL pluginJarUrl = Utils.fileToURL(pluginJar);
Index: trunk/src/org/openstreetmap/josm/plugins/PluginDownloadTask.java
===================================================================
--- trunk/src/org/openstreetmap/josm/plugins/PluginDownloadTask.java	(revision 14148)
+++ trunk/src/org/openstreetmap/josm/plugins/PluginDownloadTask.java	(revision 14149)
@@ -15,5 +15,5 @@
 import java.util.LinkedList;
 
-import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.data.Preferences;
 import org.openstreetmap.josm.data.Version;
 import org.openstreetmap.josm.gui.ExtendedDialog;
@@ -155,5 +155,5 @@
     @Override
     protected void realRun() throws SAXException, IOException {
-        File pluginDir = Main.pref.getPluginsDirectory();
+        File pluginDir = Preferences.main().getPluginsDirectory();
         if (!pluginDir.exists() && !pluginDir.mkdirs()) {
             String message = tr("Failed to create plugin directory ''{0}''", pluginDir.toString());
Index: trunk/src/org/openstreetmap/josm/plugins/PluginHandler.java
===================================================================
--- trunk/src/org/openstreetmap/josm/plugins/PluginHandler.java	(revision 14148)
+++ trunk/src/org/openstreetmap/josm/plugins/PluginHandler.java	(revision 14149)
@@ -55,4 +55,5 @@
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.actions.RestartAction;
+import org.openstreetmap.josm.data.Preferences;
 import org.openstreetmap.josm.data.PreferencesUtils;
 import org.openstreetmap.josm.data.Version;
@@ -535,5 +536,5 @@
         }
         if (NetworkManager.isOffline(OnlineResource.JOSM_WEBSITE)) {
-            for (String updateSite : Main.pref.getPluginSites()) {
+            for (String updateSite : Preferences.main().getPluginSites()) {
                 try {
                     OnlineResource.JOSM_WEBSITE.checkOfflineAccess(updateSite, Config.getUrls().getJOSMWebsite());
@@ -598,5 +599,5 @@
         // Update plugin list
         final ReadRemotePluginInformationTask pluginInfoDownloadTask = new ReadRemotePluginInformationTask(
-                Main.pref.getOnlinePluginSites());
+                Preferences.main().getOnlinePluginSites());
         MainApplication.worker.submit(pluginInfoDownloadTask);
 
@@ -743,5 +744,5 @@
     private static void extendJoinedPluginResourceCL(Collection<PluginInformation> plugins) {
         // iterate all plugins and collect all libraries of all plugins:
-        File pluginDir = Main.pref.getPluginsDirectory();
+        File pluginDir = Preferences.main().getPluginsDirectory();
         DynamicURLClassLoader cl = getJoinedPluginResourceCL();
 
@@ -1076,5 +1077,5 @@
             ReadRemotePluginInformationTask task1 = new ReadRemotePluginInformationTask(
                     monitor.createSubTaskMonitor(1, false),
-                    Main.pref.getOnlinePluginSites(), displayErrMsg
+                    Preferences.main().getOnlinePluginSites(), displayErrMsg
             );
             task1.run();
@@ -1248,5 +1249,5 @@
      */
     public static void installDownloadedPlugins(Collection<PluginInformation> pluginsToLoad, boolean dowarn) {
-        File pluginDir = Main.pref.getPluginsDirectory();
+        File pluginDir = Preferences.main().getPluginsDirectory();
         if (!pluginDir.exists() || !pluginDir.isDirectory() || !pluginDir.canWrite())
             return;
@@ -1326,5 +1327,5 @@
      */
     public static File findUpdatedJar(String name) {
-        File pluginDir = Main.pref.getPluginsDirectory();
+        File pluginDir = Preferences.main().getPluginsDirectory();
         // Find the downloaded file. We have tried to install the downloaded plugins
         // (PluginHandler.installDownloadedPlugins). This succeeds depending on the platform.
Index: trunk/src/org/openstreetmap/josm/plugins/ReadRemotePluginInformationTask.java
===================================================================
--- trunk/src/org/openstreetmap/josm/plugins/ReadRemotePluginInformationTask.java	(revision 14148)
+++ trunk/src/org/openstreetmap/josm/plugins/ReadRemotePluginInformationTask.java	(revision 14149)
@@ -31,5 +31,5 @@
 import javax.swing.JScrollPane;
 
-import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.data.Preferences;
 import org.openstreetmap.josm.gui.PleaseWaitRunnable;
 import org.openstreetmap.josm.gui.progress.NullProgressMonitor;
@@ -245,5 +245,5 @@
      */
     protected void cachePluginList(String site, String list) {
-        File pluginDir = Main.pref.getPluginsDirectory();
+        File pluginDir = Preferences.main().getPluginsDirectory();
         if (!pluginDir.exists() && !pluginDir.mkdirs()) {
             Logging.warn(tr("Failed to create plugin directory ''{0}''. Cannot cache plugin list from plugin site ''{1}''.",
@@ -318,5 +318,5 @@
         }
 
-        File pluginDir = Main.pref.getPluginsDirectory();
+        File pluginDir = Preferences.main().getPluginsDirectory();
         for (String site: sites) {
             String printsite = site.replaceAll("%<(.*)>", "");
Index: trunk/src/org/openstreetmap/josm/tools/Shortcut.java
===================================================================
--- trunk/src/org/openstreetmap/josm/tools/Shortcut.java	(revision 14148)
+++ trunk/src/org/openstreetmap/josm/tools/Shortcut.java	(revision 14149)
@@ -22,5 +22,5 @@
 import javax.swing.text.JTextComponent;
 
-import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.data.Preferences;
 import org.openstreetmap.josm.spi.preferences.Config;
 
@@ -386,5 +386,5 @@
         PlatformManager.getPlatform().initSystemShortcuts();
         // (2) User defined shortcuts
-        Main.pref.getAllPrefixCollectionKeys("shortcut.entry.").stream()
+        Preferences.main().getAllPrefixCollectionKeys("shortcut.entry.").stream()
                 .map(Shortcut::new)
                 .filter(sc -> !findShortcut(sc.getAssignedKey(), sc.getAssignedModifier()).isPresent())
