Index: trunk/src/org/openstreetmap/josm/gui/io/CredentialDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/io/CredentialDialog.java	(revision 12804)
+++ trunk/src/org/openstreetmap/josm/gui/io/CredentialDialog.java	(revision 12805)
@@ -32,9 +32,9 @@
 import org.openstreetmap.josm.gui.help.ContextSensitiveHelpAction;
 import org.openstreetmap.josm.gui.help.HelpUtil;
-import org.openstreetmap.josm.gui.preferences.server.ProxyPreferencesPanel;
 import org.openstreetmap.josm.gui.util.WindowGeometry;
 import org.openstreetmap.josm.gui.widgets.JMultilineLabel;
 import org.openstreetmap.josm.gui.widgets.JosmPasswordField;
 import org.openstreetmap.josm.gui.widgets.JosmTextField;
+import org.openstreetmap.josm.io.DefaultProxySelector;
 import org.openstreetmap.josm.io.OsmApi;
 import org.openstreetmap.josm.tools.ImageProvider;
@@ -323,6 +323,6 @@
             lblHeading.setText(
                     "<html>" + tr("Authenticating at the HTTP proxy ''{0}'' failed. Please enter a valid username and a valid password.",
-                            Main.pref.get(ProxyPreferencesPanel.PROXY_HTTP_HOST) + ':' +
-                            Main.pref.get(ProxyPreferencesPanel.PROXY_HTTP_PORT)) + "</html>");
+                            Main.pref.get(DefaultProxySelector.PROXY_HTTP_HOST) + ':' +
+                            Main.pref.get(DefaultProxySelector.PROXY_HTTP_PORT)) + "</html>");
             lblWarning.setText("<html>" +
                     tr("Warning: depending on the authentication method the proxy server uses the password may be transferred unencrypted.")
Index: trunk/src/org/openstreetmap/josm/gui/preferences/server/ProxyPreferencesPanel.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/server/ProxyPreferencesPanel.java	(revision 12804)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/server/ProxyPreferencesPanel.java	(revision 12805)
@@ -16,5 +16,4 @@
 import java.net.ProxySelector;
 import java.util.EnumMap;
-import java.util.Locale;
 import java.util.Map;
 import java.util.Optional;
@@ -33,4 +32,5 @@
 import org.openstreetmap.josm.gui.widgets.VerticallyScrollablePanel;
 import org.openstreetmap.josm.io.DefaultProxySelector;
+import org.openstreetmap.josm.io.ProxyPolicy;
 import org.openstreetmap.josm.io.auth.CredentialsAgent;
 import org.openstreetmap.josm.io.auth.CredentialsAgentException;
@@ -54,64 +54,4 @@
         }
     }
-
-    /**
-     * The proxy policy is how JOSM will use proxy information.
-     */
-    public enum ProxyPolicy {
-        /** No proxy: JOSM will access Internet resources directly */
-        NO_PROXY("no-proxy"),
-        /** Use system settings: JOSM will use system proxy settings */
-        USE_SYSTEM_SETTINGS("use-system-settings"),
-        /** Use HTTP proxy: JOSM will use the given HTTP proxy, configured manually */
-        USE_HTTP_PROXY("use-http-proxy"),
-        /** Use HTTP proxy: JOSM will use the given SOCKS proxy */
-        USE_SOCKS_PROXY("use-socks-proxy");
-
-        private final String policyName;
-
-        ProxyPolicy(String policyName) {
-            this.policyName = policyName;
-        }
-
-        /**
-         * Replies the policy name, to be stored in proxy preferences.
-         * @return the policy unique name
-         */
-        public String getName() {
-            return policyName;
-        }
-
-        /**
-         * Retrieves a proxy policy from its name found in preferences.
-         * @param policyName The policy name
-         * @return The proxy policy matching the given name, or {@code null}
-         */
-        public static ProxyPolicy fromName(String policyName) {
-            if (policyName == null) return null;
-            policyName = policyName.trim().toLowerCase(Locale.ENGLISH);
-            for (ProxyPolicy pp: values()) {
-                if (pp.getName().equals(policyName))
-                    return pp;
-            }
-            return null;
-        }
-    }
-
-    /** Property key for proxy policy */
-    public static final String PROXY_POLICY = "proxy.policy";
-    /** Property key for HTTP proxy host */
-    public static final String PROXY_HTTP_HOST = "proxy.http.host";
-    /** Property key for HTTP proxy port */
-    public static final String PROXY_HTTP_PORT = "proxy.http.port";
-    /** Property key for SOCKS proxy host */
-    public static final String PROXY_SOCKS_HOST = "proxy.socks.host";
-    /** Property key for SOCKS proxy port */
-    public static final String PROXY_SOCKS_PORT = "proxy.socks.port";
-    /** Property key for proxy username */
-    public static final String PROXY_USER = "proxy.user";
-    /** Property key for proxy password */
-    public static final String PROXY_PASS = "proxy.pass";
-    /** Property key for proxy exceptions list */
-    public static final String PROXY_EXCEPTIONS = "proxy.exceptions";
 
     private transient Map<ProxyPolicy, JRadioButton> rbProxyPolicy;
@@ -324,5 +264,6 @@
      */
     public final void initFromPreferences() {
-        ProxyPolicy pp = Optional.ofNullable(ProxyPolicy.fromName(Main.pref.get(PROXY_POLICY, null))).orElse(ProxyPolicy.NO_PROXY);
+        ProxyPolicy pp = Optional.ofNullable(ProxyPolicy.fromName(Main.pref.get(DefaultProxySelector.PROXY_POLICY, null)))
+                .orElse(ProxyPolicy.NO_PROXY);
         rbProxyPolicy.get(pp).setSelected(true);
         String value = Main.pref.get("proxy.host", null);
@@ -332,5 +273,5 @@
             Main.pref.put("proxy.host", null);
         } else {
-            tfProxyHttpHost.setText(Main.pref.get(PROXY_HTTP_HOST, ""));
+            tfProxyHttpHost.setText(Main.pref.get(DefaultProxySelector.PROXY_HTTP_HOST, ""));
         }
         value = Main.pref.get("proxy.port", null);
@@ -340,8 +281,8 @@
             Main.pref.put("proxy.port", null);
         } else {
-            tfProxyHttpPort.setText(Main.pref.get(PROXY_HTTP_PORT, ""));
-        }
-        tfProxySocksHost.setText(Main.pref.get(PROXY_SOCKS_HOST, ""));
-        tfProxySocksPort.setText(Main.pref.get(PROXY_SOCKS_PORT, ""));
+            tfProxyHttpPort.setText(Main.pref.get(DefaultProxySelector.PROXY_HTTP_PORT, ""));
+        }
+        tfProxySocksHost.setText(Main.pref.get(DefaultProxySelector.PROXY_SOCKS_HOST, ""));
+        tfProxySocksPort.setText(Main.pref.get(DefaultProxySelector.PROXY_SOCKS_PORT, ""));
 
         if (pp.equals(ProxyPolicy.USE_SYSTEM_SETTINGS) && !DefaultProxySelector.willJvmRetrieveSystemProxies()) {
@@ -417,9 +358,9 @@
             }
         }
-        Main.pref.put(PROXY_POLICY, Optional.ofNullable(policy).orElse(ProxyPolicy.NO_PROXY).getName());
-        Main.pref.put(PROXY_HTTP_HOST, tfProxyHttpHost.getText());
-        Main.pref.put(PROXY_HTTP_PORT, tfProxyHttpPort.getText());
-        Main.pref.put(PROXY_SOCKS_HOST, tfProxySocksHost.getText());
-        Main.pref.put(PROXY_SOCKS_PORT, tfProxySocksPort.getText());
+        Main.pref.put(DefaultProxySelector.PROXY_POLICY, Optional.ofNullable(policy).orElse(ProxyPolicy.NO_PROXY).getName());
+        Main.pref.put(DefaultProxySelector.PROXY_HTTP_HOST, tfProxyHttpHost.getText());
+        Main.pref.put(DefaultProxySelector.PROXY_HTTP_PORT, tfProxyHttpPort.getText());
+        Main.pref.put(DefaultProxySelector.PROXY_SOCKS_HOST, tfProxySocksHost.getText());
+        Main.pref.put(DefaultProxySelector.PROXY_SOCKS_PORT, tfProxySocksPort.getText());
 
         // update the proxy selector
Index: trunk/src/org/openstreetmap/josm/io/DefaultProxySelector.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/DefaultProxySelector.java	(revision 12804)
+++ trunk/src/org/openstreetmap/josm/io/DefaultProxySelector.java	(revision 12805)
@@ -19,13 +19,28 @@
 
 import org.openstreetmap.josm.Main;
-import org.openstreetmap.josm.gui.preferences.server.ProxyPreferencesPanel;
-import org.openstreetmap.josm.gui.preferences.server.ProxyPreferencesPanel.ProxyPolicy;
 import org.openstreetmap.josm.tools.Logging;
 
 /**
  * This is the default proxy selector used in JOSM.
- *
+ * @since 2641
  */
 public class DefaultProxySelector extends ProxySelector {
+
+    /** Property key for proxy policy */
+    public static final String PROXY_POLICY = "proxy.policy";
+    /** Property key for HTTP proxy host */
+    public static final String PROXY_HTTP_HOST = "proxy.http.host";
+    /** Property key for HTTP proxy port */
+    public static final String PROXY_HTTP_PORT = "proxy.http.port";
+    /** Property key for SOCKS proxy host */
+    public static final String PROXY_SOCKS_HOST = "proxy.socks.host";
+    /** Property key for SOCKS proxy port */
+    public static final String PROXY_SOCKS_PORT = "proxy.socks.port";
+    /** Property key for proxy username */
+    public static final String PROXY_USER = "proxy.user";
+    /** Property key for proxy password */
+    public static final String PROXY_PASS = "proxy.pass";
+    /** Property key for proxy exceptions list */
+    public static final String PROXY_EXCEPTIONS = "proxy.exceptions";
 
     private static final List<Proxy> NO_PROXY_LIST = Collections.singletonList(Proxy.NO_PROXY);
@@ -111,5 +126,5 @@
      */
     public final void initFromPreferences() {
-        String value = Main.pref.get(ProxyPreferencesPanel.PROXY_POLICY);
+        String value = Main.pref.get(PROXY_POLICY);
         if (value.isEmpty()) {
             proxyPolicy = ProxyPolicy.NO_PROXY;
@@ -118,10 +133,10 @@
             if (proxyPolicy == null) {
                 Logging.warn(tr("Unexpected value for preference ''{0}'' found. Got ''{1}''. Will use no proxy.",
-                        ProxyPreferencesPanel.PROXY_POLICY, value));
+                        PROXY_POLICY, value));
                 proxyPolicy = ProxyPolicy.NO_PROXY;
             }
         }
-        String host = Main.pref.get(ProxyPreferencesPanel.PROXY_HTTP_HOST, null);
-        int port = parseProxyPortValue(ProxyPreferencesPanel.PROXY_HTTP_PORT, Main.pref.get(ProxyPreferencesPanel.PROXY_HTTP_PORT, null));
+        String host = Main.pref.get(PROXY_HTTP_HOST, null);
+        int port = parseProxyPortValue(PROXY_HTTP_PORT, Main.pref.get(PROXY_HTTP_PORT, null));
         httpProxySocketAddress = null;
         if (proxyPolicy.equals(ProxyPolicy.USE_HTTP_PROXY)) {
@@ -134,6 +149,6 @@
         }
 
-        host = Main.pref.get(ProxyPreferencesPanel.PROXY_SOCKS_HOST, null);
-        port = parseProxyPortValue(ProxyPreferencesPanel.PROXY_SOCKS_PORT, Main.pref.get(ProxyPreferencesPanel.PROXY_SOCKS_PORT, null));
+        host = Main.pref.get(PROXY_SOCKS_HOST, null);
+        port = parseProxyPortValue(PROXY_SOCKS_PORT, Main.pref.get(PROXY_SOCKS_PORT, null));
         socksProxySocketAddress = null;
         if (proxyPolicy.equals(ProxyPolicy.USE_SOCKS_PROXY)) {
@@ -146,5 +161,5 @@
         }
         proxyExceptions = new HashSet<>(
-            Main.pref.getCollection(ProxyPreferencesPanel.PROXY_EXCEPTIONS,
+            Main.pref.getCollection(PROXY_EXCEPTIONS,
                     Arrays.asList("localhost", IPV4_LOOPBACK, IPV6_LOOPBACK))
         );
Index: trunk/src/org/openstreetmap/josm/io/OsmApi.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/OsmApi.java	(revision 12804)
+++ trunk/src/org/openstreetmap/josm/io/OsmApi.java	(revision 12805)
@@ -50,5 +50,5 @@
  * It is conceivable to extract this into an interface later and create various
  * classes implementing the interface, to be able to talk to various kinds of servers.
- * @ince 1523
+ * @since 1523
  */
 public class OsmApi extends OsmConnection {
Index: trunk/src/org/openstreetmap/josm/io/ProxyPolicy.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/ProxyPolicy.java	(revision 12805)
+++ trunk/src/org/openstreetmap/josm/io/ProxyPolicy.java	(revision 12805)
@@ -0,0 +1,48 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.io;
+
+import java.util.Locale;
+
+/**
+ * The proxy policy is how JOSM will use proxy information.
+ * @since 12805 (extracted from {@code ProxyPreferencesPanel})
+ */
+public enum ProxyPolicy {
+    /** No proxy: JOSM will access Internet resources directly */
+    NO_PROXY("no-proxy"),
+    /** Use system settings: JOSM will use system proxy settings */
+    USE_SYSTEM_SETTINGS("use-system-settings"),
+    /** Use HTTP proxy: JOSM will use the given HTTP proxy, configured manually */
+    USE_HTTP_PROXY("use-http-proxy"),
+    /** Use HTTP proxy: JOSM will use the given SOCKS proxy */
+    USE_SOCKS_PROXY("use-socks-proxy");
+
+    private final String policyName;
+
+    ProxyPolicy(String policyName) {
+        this.policyName = policyName;
+    }
+
+    /**
+     * Replies the policy name, to be stored in proxy preferences.
+     * @return the policy unique name
+     */
+    public String getName() {
+        return policyName;
+    }
+
+    /**
+     * Retrieves a proxy policy from its name found in preferences.
+     * @param policyName The policy name
+     * @return The proxy policy matching the given name, or {@code null}
+     */
+    public static ProxyPolicy fromName(String policyName) {
+        if (policyName == null) return null;
+        policyName = policyName.trim().toLowerCase(Locale.ENGLISH);
+        for (ProxyPolicy pp: values()) {
+            if (pp.getName().equals(policyName))
+                return pp;
+        }
+        return null;
+    }
+}
Index: trunk/src/org/openstreetmap/josm/io/auth/JosmPreferencesCredentialAgent.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/auth/JosmPreferencesCredentialAgent.java	(revision 12804)
+++ trunk/src/org/openstreetmap/josm/io/auth/JosmPreferencesCredentialAgent.java	(revision 12805)
@@ -13,6 +13,6 @@
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.oauth.OAuthToken;
-import org.openstreetmap.josm.gui.preferences.server.ProxyPreferencesPanel;
 import org.openstreetmap.josm.gui.widgets.HtmlPanel;
+import org.openstreetmap.josm.io.DefaultProxySelector;
 import org.openstreetmap.josm.io.OsmApi;
 
@@ -20,5 +20,5 @@
  * This is the default credentials agent in JOSM. It keeps username and password for both
  * the OSM API and an optional HTTP proxy in the JOSM preferences file.
- *
+ * @since 2641
  */
 public class JosmPreferencesCredentialAgent extends AbstractCredentialsAgent {
@@ -49,6 +49,6 @@
             return new PasswordAuthentication(user, password == null ? new char[0] : password.toCharArray());
         case PROXY:
-            user = Main.pref.get(ProxyPreferencesPanel.PROXY_USER, null);
-            password = Main.pref.get(ProxyPreferencesPanel.PROXY_PASS, null);
+            user = Main.pref.get(DefaultProxySelector.PROXY_USER, null);
+            password = Main.pref.get(DefaultProxySelector.PROXY_PASS, null);
             if (user == null)
                 return null;
@@ -84,9 +84,9 @@
             break;
         case PROXY:
-            Main.pref.put(ProxyPreferencesPanel.PROXY_USER, credentials.getUserName());
+            Main.pref.put(DefaultProxySelector.PROXY_USER, credentials.getUserName());
             if (credentials.getPassword() == null) {
-                Main.pref.put(ProxyPreferencesPanel.PROXY_PASS, null);
+                Main.pref.put(DefaultProxySelector.PROXY_PASS, null);
             } else {
-                Main.pref.put(ProxyPreferencesPanel.PROXY_PASS, String.valueOf(credentials.getPassword()));
+                Main.pref.put(DefaultProxySelector.PROXY_PASS, String.valueOf(credentials.getPassword()));
             }
             break;
