Index: applications/editors/josm/plugins/sds/build.xml
===================================================================
--- applications/editors/josm/plugins/sds/build.xml	(revision 34469)
+++ applications/editors/josm/plugins/sds/build.xml	(revision 34470)
@@ -5,5 +5,5 @@
     <property name="commit.message" value=""/>
     <!-- enter the *lowest* JOSM version this plugin is currently compatible with -->
-    <property name="plugin.main.version" value="13914"/>
+    <property name="plugin.main.version" value="14153"/>
 
     <!--
Index: applications/editors/josm/plugins/sds/src/org/openstreetmap/hot/sds/ReadPostprocessor.java
===================================================================
--- applications/editors/josm/plugins/sds/src/org/openstreetmap/hot/sds/ReadPostprocessor.java	(revision 34469)
+++ applications/editors/josm/plugins/sds/src/org/openstreetmap/hot/sds/ReadPostprocessor.java	(revision 34470)
@@ -5,5 +5,4 @@
 import java.io.IOException;
 import java.io.InputStream;
-import java.io.UnsupportedEncodingException;
 import java.util.ArrayList;
 
@@ -19,4 +18,5 @@
 import org.openstreetmap.josm.gui.progress.ProgressMonitor;
 import org.openstreetmap.josm.io.OsmServerReadPostprocessor;
+import org.openstreetmap.josm.tools.Logging;
 import org.xml.sax.InputSource;
 import org.xml.sax.SAXException;
@@ -70,6 +70,5 @@
             rv = api.requestShadowsFromSds(nodeList, wayList, relationList, progress);
         } catch (SdsTransferException e) {
-            // TODO Auto-generated catch block
-            e.printStackTrace();
+            Logging.error(e);
         }
 
@@ -82,16 +81,6 @@
             InputSource inputSource = new InputSource(xmlStream);
             SAXParserFactory.newInstance().newSAXParser().parse(inputSource, new SdsParser(ds, plugin));
-        } catch (UnsupportedEncodingException e1) {
-            // TODO Auto-generated catch block
-            e1.printStackTrace();
-        } catch (SAXException e) {
-            // TODO Auto-generated catch block
-            e.printStackTrace();
-        } catch (IOException e) {
-            // TODO Auto-generated catch block
-            e.printStackTrace();
-        } catch (ParserConfigurationException e) {
-            // TODO Auto-generated catch block
-            e.printStackTrace();
+        } catch (SAXException | IOException | ParserConfigurationException e) {
+            Logging.error(e);
         }
 
Index: applications/editors/josm/plugins/sds/src/org/openstreetmap/hot/sds/SdsApi.java
===================================================================
--- applications/editors/josm/plugins/sds/src/org/openstreetmap/hot/sds/SdsApi.java	(revision 34469)
+++ applications/editors/josm/plugins/sds/src/org/openstreetmap/hot/sds/SdsApi.java	(revision 34470)
@@ -20,6 +20,6 @@
 import java.util.List;
 
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.gui.progress.ProgressMonitor;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.CheckParameterUtil;
 import org.openstreetmap.josm.tools.Logging;
@@ -62,5 +62,5 @@
      */
     public static SdsApi getSdsApi() {
-        String serverUrl = Main.pref.get("sds-server.url", "http://datastore.hotosm.org");
+        String serverUrl = Config.getPref().get("sds-server.url", "http://datastore.hotosm.org");
         if (serverUrl == null)
             throw new IllegalStateException(tr("Preference ''{0}'' missing. Cannot initialize SdsApi.", "sds-server.url"));
@@ -289,5 +289,5 @@
      */
     protected int getMaxRetries() {
-        int ret = Main.pref.getInt("osm-server.max-num-retries", DEFAULT_MAX_NUM_RETRIES);
+        int ret = Config.getPref().getInt("osm-server.max-num-retries", DEFAULT_MAX_NUM_RETRIES);
         return Math.max(ret, 0);
     }
@@ -306,6 +306,5 @@
             sendRequest("POST", "createshadows", message, pm);
         } catch (SdsTransferException e) {
-            // TODO Auto-generated catch block
-            e.printStackTrace();
+            Logging.error(e);
         }
         return true;
@@ -341,5 +340,5 @@
                 System.out.print(requestMethod + " " + url + "... ");
                 activeConnection = (HttpURLConnection) url.openConnection();
-                activeConnection.setConnectTimeout(fastFail ? 1000 : Main.pref.getInt("socket.timeout.connect", 15)*1000);
+                activeConnection.setConnectTimeout(fastFail ? 1000 : Config.getPref().getInt("socket.timeout.connect", 15)*1000);
                 activeConnection.setRequestMethod(requestMethod);
                 if (doAuthenticate) {
Index: applications/editors/josm/plugins/sds/src/org/openstreetmap/hot/sds/SdsConnection.java
===================================================================
--- applications/editors/josm/plugins/sds/src/org/openstreetmap/hot/sds/SdsConnection.java	(revision 34469)
+++ applications/editors/josm/plugins/sds/src/org/openstreetmap/hot/sds/SdsConnection.java	(revision 34470)
@@ -30,5 +30,5 @@
             HttpURLConnection.setFollowRedirects(true);
         } catch (SecurityException e) {
-            e.printStackTrace();
+            Logging.error(e);
         }
     }
Index: applications/editors/josm/plugins/sds/src/org/openstreetmap/hot/sds/SdsCredentialAgent.java
===================================================================
--- applications/editors/josm/plugins/sds/src/org/openstreetmap/hot/sds/SdsCredentialAgent.java	(revision 34469)
+++ applications/editors/josm/plugins/sds/src/org/openstreetmap/hot/sds/SdsCredentialAgent.java	(revision 34470)
@@ -12,5 +12,4 @@
 import javax.swing.text.html.HTMLEditorKit;
 
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.oauth.OAuthToken;
 import org.openstreetmap.josm.gui.io.CredentialDialog;
@@ -21,4 +20,5 @@
 import org.openstreetmap.josm.io.auth.CredentialsAgentException;
 import org.openstreetmap.josm.io.auth.CredentialsAgentResponse;
+import org.openstreetmap.josm.spi.preferences.Config;
 
 /**
@@ -40,12 +40,12 @@
         switch(requestorType) {
         case SERVER:
-            user = Main.pref.get("sds-server.username", null);
-            password = Main.pref.get("sds-server.password", null);
+            user = Config.getPref().get("sds-server.username", null);
+            password = Config.getPref().get("sds-server.password", null);
             if (user == null)
                 return null;
             return new PasswordAuthentication(user, password == null ? new char[0] : password.toCharArray());
         case PROXY:
-            user = Main.pref.get(DefaultProxySelector.PROXY_USER, null);
-            password = Main.pref.get(DefaultProxySelector.PROXY_PASS, null);
+            user = Config.getPref().get(DefaultProxySelector.PROXY_USER, null);
+            password = Config.getPref().get(DefaultProxySelector.PROXY_PASS, null);
             if (user == null)
                 return null;
@@ -64,17 +64,17 @@
         switch(requestorType) {
         case SERVER:
-            Main.pref.put("sds-server.username", credentials.getUserName());
+            Config.getPref().put("sds-server.username", credentials.getUserName());
             if (credentials.getPassword() == null) {
-                Main.pref.put("sds-server.password", null);
+                Config.getPref().put("sds-server.password", null);
             } else {
-                Main.pref.put("sds-server.password", String.valueOf(credentials.getPassword()));
+                Config.getPref().put("sds-server.password", String.valueOf(credentials.getPassword()));
             }
             break;
         case PROXY:
-            Main.pref.put(DefaultProxySelector.PROXY_USER, credentials.getUserName());
+            Config.getPref().put(DefaultProxySelector.PROXY_USER, credentials.getUserName());
             if (credentials.getPassword() == null) {
-                Main.pref.put(DefaultProxySelector.PROXY_PASS, null);
+                Config.getPref().put(DefaultProxySelector.PROXY_PASS, null);
             } else {
-                Main.pref.put(DefaultProxySelector.PROXY_PASS, String.valueOf(credentials.getPassword()));
+                Config.getPref().put(DefaultProxySelector.PROXY_PASS, String.valueOf(credentials.getPassword()));
             }
             break;
@@ -91,6 +91,6 @@
     @Override
     public OAuthToken lookupOAuthAccessToken() throws CredentialsAgentException {
-        String accessTokenKey = Main.pref.get("oauth.access-token.key", null);
-        String accessTokenSecret = Main.pref.get("oauth.access-token.secret", null);
+        String accessTokenKey = Config.getPref().get("oauth.access-token.key", null);
+        String accessTokenSecret = Config.getPref().get("oauth.access-token.secret", null);
         if (accessTokenKey == null && accessTokenSecret == null)
             return null;
Index: applications/editors/josm/plugins/sds/src/org/openstreetmap/hot/sds/SdsDiskAccessAction.java
===================================================================
--- applications/editors/josm/plugins/sds/src/org/openstreetmap/hot/sds/SdsDiskAccessAction.java	(revision 34469)
+++ applications/editors/josm/plugins/sds/src/org/openstreetmap/hot/sds/SdsDiskAccessAction.java	(revision 34470)
@@ -9,8 +9,9 @@
 import javax.swing.filechooser.FileFilter;
 
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.actions.DiskAccessAction;
 import org.openstreetmap.josm.gui.ExtendedDialog;
+import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.gui.widgets.SwingFileChooser;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.Shortcut;
 
@@ -24,5 +25,5 @@
 
     public static SwingFileChooser createAndOpenFileChooser(boolean open, boolean multiple, String title) {
-        String curDir = Main.pref.get("lastDirectory");
+        String curDir = Config.getPref().get("lastDirectory");
         if (curDir.equals("")) {
             curDir = ".";
@@ -49,10 +50,10 @@
         });
 
-        int answer = open ? fc.showOpenDialog(Main.parent) : fc.showSaveDialog(Main.parent);
+        int answer = open ? fc.showOpenDialog(MainApplication.getMainFrame()) : fc.showSaveDialog(MainApplication.getMainFrame());
         if (answer != JFileChooser.APPROVE_OPTION)
             return null;
 
         if (!fc.getCurrentDirectory().getAbsolutePath().equals(curDir)) {
-            Main.pref.put("lastDirectory", fc.getCurrentDirectory().getAbsolutePath());
+            Config.getPref().put("lastDirectory", fc.getCurrentDirectory().getAbsolutePath());
         }
 
@@ -61,5 +62,5 @@
             if (file != null && file.exists()) {
                 ExtendedDialog dialog = new ExtendedDialog(
-                        Main.parent,
+                        MainApplication.getMainFrame(),
                         tr("Overwrite"),
                         new String[] {tr("Overwrite"), tr("Cancel")}
@@ -77,5 +78,5 @@
 
     public static File createAndOpenSaveFileChooser(String title) {
-        String curDir = Main.pref.get("lastDirectory");
+        String curDir = Config.getPref().get("lastDirectory");
         if (curDir.equals("")) {
             curDir = ".";
@@ -102,10 +103,10 @@
         });
 
-        int answer = fc.showSaveDialog(Main.parent);
+        int answer = fc.showSaveDialog(MainApplication.getMainFrame());
         if (answer != JFileChooser.APPROVE_OPTION)
             return null;
 
         if (!fc.getCurrentDirectory().getAbsolutePath().equals(curDir)) {
-            Main.pref.put("lastDirectory", fc.getCurrentDirectory().getAbsolutePath());
+            Config.getPref().put("lastDirectory", fc.getCurrentDirectory().getAbsolutePath());
         }
 
@@ -120,5 +121,5 @@
         if (file == null || (file.exists())) {
             ExtendedDialog dialog = new ExtendedDialog(
-                    Main.parent,
+                    MainApplication.getMainFrame(),
                     tr("Overwrite"),
                     new String[] {tr("Overwrite"), tr("Cancel")}
Index: applications/editors/josm/plugins/sds/src/org/openstreetmap/hot/sds/SdsLoadAction.java
===================================================================
--- applications/editors/josm/plugins/sds/src/org/openstreetmap/hot/sds/SdsLoadAction.java	(revision 34469)
+++ applications/editors/josm/plugins/sds/src/org/openstreetmap/hot/sds/SdsLoadAction.java	(revision 34470)
@@ -9,5 +9,4 @@
 import java.io.IOException;
 import java.io.InputStream;
-import java.io.UnsupportedEncodingException;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -21,4 +20,5 @@
 import org.openstreetmap.josm.gui.widgets.SwingFileChooser;
 import org.openstreetmap.josm.io.OsmTransferException;
+import org.openstreetmap.josm.tools.Logging;
 import org.xml.sax.InputSource;
 import org.xml.sax.SAXException;
@@ -85,18 +85,7 @@
                     InputSource inputSource = new InputSource(fileStream);
                     SAXParserFactory.newInstance().newSAXParser().parse(inputSource, p);
-                } catch (UnsupportedEncodingException e1) {
-                    // TODO Auto-generated catch block
-                    e1.printStackTrace();
-                } catch (SAXException e) {
-                    // TODO Auto-generated catch block
-                    e.printStackTrace();
-                } catch (IOException e) {
-                    // TODO Auto-generated catch block
-                    e.printStackTrace();
-                } catch (ParserConfigurationException e) {
-                    // TODO Auto-generated catch block
-                    e.printStackTrace();
+                } catch (SAXException | IOException | ParserConfigurationException e) {
+                    Logging.error(e);
                 }
-
             }
         }
Index: applications/editors/josm/plugins/sds/src/org/openstreetmap/hot/sds/SdsMenu.java
===================================================================
--- applications/editors/josm/plugins/sds/src/org/openstreetmap/hot/sds/SdsMenu.java	(revision 34469)
+++ applications/editors/josm/plugins/sds/src/org/openstreetmap/hot/sds/SdsMenu.java	(revision 34470)
@@ -18,5 +18,4 @@
 import javax.swing.JTextArea;
 
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.actions.JosmAction;
 import org.openstreetmap.josm.gui.MainApplication;
@@ -120,5 +119,5 @@
             about.setPreferredSize(new Dimension(500, 300));
 
-            JOptionPane.showMessageDialog(Main.parent, about, tr("About SDS..."),
+            JOptionPane.showMessageDialog(MainApplication.getMainFrame(), about, tr("About SDS..."),
                     JOptionPane.INFORMATION_MESSAGE, null);
         }
@@ -143,5 +142,5 @@
         @Override
         public void run() {
-            PreferenceDialog pd = new PreferenceDialog(Main.parent);
+            PreferenceDialog pd = new PreferenceDialog(MainApplication.getMainFrame());
             // unusual reflection mechanism to cater for older JOSM versions where
             // the selectPreferencesTabByName method was not public
Index: applications/editors/josm/plugins/sds/src/org/openstreetmap/hot/sds/SdsPluginPreferences.java
===================================================================
--- applications/editors/josm/plugins/sds/src/org/openstreetmap/hot/sds/SdsPluginPreferences.java	(revision 34469)
+++ applications/editors/josm/plugins/sds/src/org/openstreetmap/hot/sds/SdsPluginPreferences.java	(revision 34470)
@@ -18,7 +18,8 @@
 import javax.swing.JTextField;
 
-import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.gui.preferences.DefaultTabPreferenceSetting;
 import org.openstreetmap.josm.gui.preferences.PreferenceTabbedPane;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.GBC;
 
@@ -46,8 +47,8 @@
         access.setBorder(BorderFactory.createTitledBorder(tr("Server")));
 
-        server.setText(Main.pref.get(SDS_SERVER, "http://datastore.hotosm.org"));
-        username.setText(Main.pref.get(SDS_USERNAME, ""));
-        password.setText(Main.pref.get(SDS_PASSWORD, ""));
-        prefix.setText(Main.pref.get(SDS_PREFIX, "hot:"));
+        server.setText(Config.getPref().get(SDS_SERVER, "http://datastore.hotosm.org"));
+        username.setText(Config.getPref().get(SDS_USERNAME, ""));
+        password.setText(Config.getPref().get(SDS_PASSWORD, ""));
+        prefix.setText(Config.getPref().get(SDS_PREFIX, "hot:"));
         server.setToolTipText(tr("The URL under which the SDS server can be contacted."));
         username.setToolTipText(tr("The user name at the SDS server. You need to create an account with the SDS admin first."));
@@ -78,12 +79,12 @@
             public void actionPerformed(ActionEvent ev) {
                 SdsApi api = new SdsApi(server.getText());
-                String olduser = Main.pref.get(SDS_USERNAME);
-                String oldpass = Main.pref.get(SDS_PASSWORD);
-                Main.pref.put(SDS_USERNAME, username.getText());
-                Main.pref.put(SDS_PASSWORD, new String(password.getPassword()));
+                String olduser = Config.getPref().get(SDS_USERNAME);
+                String oldpass = Config.getPref().get(SDS_PASSWORD);
+                Config.getPref().put(SDS_USERNAME, username.getText());
+                Config.getPref().put(SDS_PASSWORD, new String(password.getPassword()));
                 try {
                     api.requestShadowsFromSds(Collections.singletonList(Long.valueOf(1L)), null, null, null);
                     JOptionPane.showMessageDialog(
-                            Main.parent,
+                            MainApplication.getMainFrame(),
                             tr("Connection successful."),
                             tr("Success"),
@@ -92,5 +93,5 @@
                 } catch (Exception ex) {
                     JOptionPane.showMessageDialog(
-                            Main.parent,
+                            MainApplication.getMainFrame(),
                             tr("Cannot connect to SDS server: ") + ex.getMessage(),
                             tr("Error"),
@@ -100,6 +101,6 @@
                 // restore old credentials even if successful; user might still
                 // choose to press cancel!
-                Main.pref.put(SDS_USERNAME, olduser);
-                Main.pref.put(SDS_PASSWORD, oldpass);
+                Config.getPref().put(SDS_USERNAME, olduser);
+                Config.getPref().put(SDS_PASSWORD, oldpass);
             }
         });
@@ -108,8 +109,8 @@
     @Override
     public boolean ok() {
-        Main.pref.put(SDS_SERVER, server.getText());
-        Main.pref.put(SDS_USERNAME, username.getText());
-        Main.pref.put(SDS_PASSWORD, new String(password.getPassword()));
-        Main.pref.put(SDS_PREFIX, prefix.getText());
+        Config.getPref().put(SDS_SERVER, server.getText());
+        Config.getPref().put(SDS_USERNAME, username.getText());
+        Config.getPref().put(SDS_PASSWORD, new String(password.getPassword()));
+        Config.getPref().put(SDS_PREFIX, prefix.getText());
         return false;
     }
Index: applications/editors/josm/plugins/sds/src/org/openstreetmap/hot/sds/SdsSaveAction.java
===================================================================
--- applications/editors/josm/plugins/sds/src/org/openstreetmap/hot/sds/SdsSaveAction.java	(revision 34469)
+++ applications/editors/josm/plugins/sds/src/org/openstreetmap/hot/sds/SdsSaveAction.java	(revision 34470)
@@ -15,8 +15,9 @@
 import javax.swing.JOptionPane;
 
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.osm.IPrimitive;
+import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.gui.layer.Layer;
 import org.openstreetmap.josm.gui.layer.OsmDataLayer;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.Logging;
 import org.openstreetmap.josm.tools.Utils;
@@ -81,5 +82,5 @@
             }
             // FIXME - how to close?
-            if (!Main.pref.getBoolean("save.keepbackup", false) && (tmpFile != null)) {
+            if (!Config.getPref().getBoolean("save.keepbackup", false) && (tmpFile != null)) {
                 tmpFile.delete();
             }
@@ -87,5 +88,5 @@
             Logging.error(e);
             JOptionPane.showMessageDialog(
-                    Main.parent,
+                    MainApplication.getMainFrame(),
                     tr("<html>An error occurred while saving.<br>Error is:<br>{0}</html>", e.getMessage()),
                     tr("Error"),
@@ -102,5 +103,5 @@
                 Logging.error(e2);
                 JOptionPane.showMessageDialog(
-                        Main.parent,
+                        MainApplication.getMainFrame(),
                         tr("<html>An error occurred while restoring backup file.<br>Error is:<br>{0}</html>", e2.getMessage()),
                         tr("Error"),
Index: applications/editors/josm/plugins/sds/src/org/openstreetmap/hot/sds/SeparateDataStorePlugin.java
===================================================================
--- applications/editors/josm/plugins/sds/src/org/openstreetmap/hot/sds/SeparateDataStorePlugin.java	(revision 34469)
+++ applications/editors/josm/plugins/sds/src/org/openstreetmap/hot/sds/SeparateDataStorePlugin.java	(revision 34470)
@@ -7,5 +7,4 @@
 import java.util.Map;
 
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.actions.UploadAction;
 import org.openstreetmap.josm.data.osm.INode;
@@ -21,4 +20,5 @@
 import org.openstreetmap.josm.plugins.Plugin;
 import org.openstreetmap.josm.plugins.PluginInformation;
+import org.openstreetmap.josm.spi.preferences.Config;
 
 /**
@@ -89,5 +89,5 @@
 
     public String getIgnorePrefix() {
-        return Main.pref.get("sds-server.tag-prefix", "hot:");
+        return Config.getPref().get("sds-server.tag-prefix", "hot:");
     }
 
