Index: trunk/src/org/openstreetmap/josm/Main.java
===================================================================
--- trunk/src/org/openstreetmap/josm/Main.java	(revision 3814)
+++ trunk/src/org/openstreetmap/josm/Main.java	(revision 3815)
@@ -6,4 +6,6 @@
 import java.awt.Component;
 import java.awt.Dimension;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
 import java.awt.Rectangle;
 import java.awt.Toolkit;
@@ -31,6 +33,8 @@
 import javax.swing.JComponent;
 import javax.swing.JFrame;
+import javax.swing.JLabel;
 import javax.swing.JOptionPane;
 import javax.swing.JPanel;
+import javax.swing.JTextArea;
 import javax.swing.KeyStroke;
 import javax.swing.UIManager;
@@ -717,3 +721,38 @@
         ((JFrame)parent).addWindowStateListener(new WindowPositionSizeListener());
     }
+
+    public static void checkJava6() {
+        String version = System.getProperty("java.version");
+        if (version != null) {
+            if (version.startsWith("1.6") || version.startsWith("6") ||
+                    version.startsWith("1.7") || version.startsWith("7"))
+                return;
+            if (version.startsWith("1.5") || version.startsWith("5")) {
+                JLabel ho = new JLabel("<html>"+
+                        tr("<h2>JOSM requires Java version 6.</h2>"+
+                                "Detected Java version: {0}.<br>"+
+                                "You can <ul><li>update your Java (JRE) or</li>"+
+                                "<li>use an earlier (Java 5 compatible) version of JOSM.</li></ul>"+
+                                "More Info:", version)+"</html>");
+                JTextArea link = new JTextArea("http://josm.openstreetmap.de/wiki/Help/SystemRequirements");
+                link.setEditable(false);
+                link.setBackground(panel.getBackground());
+                JPanel panel = new JPanel(new GridBagLayout());
+                GridBagConstraints gbc = new GridBagConstraints();
+                gbc.gridwidth = GridBagConstraints.REMAINDER;
+                gbc.anchor = GridBagConstraints.WEST;
+                gbc.weightx = 1.0;
+                panel.add(ho, gbc);
+                panel.add(link, gbc);
+                final String EXIT = tr("Exit JOSM");
+                final String CONTINUE = tr("Continue, try anyway");
+                int ret = JOptionPane.showOptionDialog(null, panel, tr("Error"), JOptionPane.YES_NO_OPTION, JOptionPane.ERROR_MESSAGE, null, new String[] {EXIT, CONTINUE}, EXIT);
+                if (ret == 0) {
+                    System.exit(0);
+                }
+                return;
+            }
+        }
+        System.err.println("Error: Could not recognize Java Version: "+version);
+    }
 }
Index: trunk/src/org/openstreetmap/josm/data/Preferences.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/Preferences.java	(revision 3814)
+++ trunk/src/org/openstreetmap/josm/data/Preferences.java	(revision 3815)
@@ -645,4 +645,20 @@
     }
 
+    /* old style conversion, replace by above call after some transition time */
+    /* remove this function, when no more old-style preference collections in the code */
+    @Deprecated
+    synchronized public Collection<String> getCollectionOld(String key, String sep) {
+        putCollectionDefault(key, null);
+        String s = get(key);
+        if (s != null && s.length() != 0) {
+            if(!s.contains("\u001e") && s.contains(sep)) {
+                s = s.replace(sep, "\u001e");
+                put(key, s);
+            }
+            return Arrays.asList(s.split("\u001e"));
+        }
+        return Collections.emptyList();
+    }
+
     synchronized public void removeFromCollection(String key, String value) {
         List<String> a = new ArrayList<String>(getCollection(key, Collections.<String>emptyList()));
Index: trunk/src/org/openstreetmap/josm/data/ServerSidePreferences.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/ServerSidePreferences.java	(revision 3814)
+++ trunk/src/org/openstreetmap/josm/data/ServerSidePreferences.java	(revision 3815)
@@ -20,5 +20,5 @@
 import java.util.StringTokenizer;
 import java.util.Map.Entry;
-import java.util.logging.Logger;
+//import java.util.logging.Logger;
 
 import javax.swing.JOptionPane;
@@ -38,5 +38,12 @@
  */
 public class ServerSidePreferences extends Preferences {
-    static private final Logger logger = Logger.getLogger(ServerSidePreferences.class.getName());
+    //static private final Logger logger = Logger.getLogger(ServerSidePreferences.class.getName());
+
+    public class MissingPassword extends Exception{
+        public String realm;
+        public MissingPassword(String r) {
+            realm = r;
+        }
+    }
 
     private final Connection connection;
@@ -47,12 +54,20 @@
             this.serverUrl = serverUrl;
         }
-        public String download() {
+        public String download() throws MissingPassword {
             try {
                 System.out.println("reading preferences from "+serverUrl);
                 URLConnection con = serverUrl.openConnection();
-                if (con instanceof HttpURLConnection) {
-                    addAuth((HttpURLConnection) con);
+                String username = get("applet.username");
+                String password = get("applet.password");
+                if(password.isEmpty() && username.isEmpty())
+                    con.addRequestProperty("Authorization", "Basic "+Base64.encode(username+":"+password));
+                con.connect();
+                if(username.isEmpty() && con instanceof HttpURLConnection
+                    && ((HttpURLConnection) con).getResponseCode()
+                    == HttpURLConnection.HTTP_UNAUTHORIZED) {
+                    String t = ((HttpURLConnection) con).getHeaderField("WWW-Authenticate");
+                    t = t.replace("Basic realm=\"","").replace("\"","");
+                    throw new MissingPassword(t);
                 }
-                con.connect();
                 BufferedReader reader = new BufferedReader(new InputStreamReader(con.getInputStream()));
                 StringBuilder b = new StringBuilder();
@@ -67,6 +82,4 @@
             } catch (IOException e) {
                 e.printStackTrace();
-            } catch(OsmTransferException e) {
-                e.printStackTrace();
             }
             return null;
@@ -77,9 +90,8 @@
                 System.out.println("uploading preferences to "+u);
                 HttpURLConnection con = (HttpURLConnection)u.openConnection();
-                // FIXME:
-                // - doesn't work if CredentialManager isn't JosmPreferencesCredentialManager
-                // - doesn't work for OAuth
-
-                con.addRequestProperty("Authorization", "Basic "+Base64.encode(get("osm-server.username")+":"+get("osm-server.password")));
+                String username = get("applet.username");
+                String password = get("applet.password");
+                if(password.isEmpty() && username.isEmpty())
+                    con.addRequestProperty("Authorization", "Basic "+Base64.encode(username+":"+password));
                 con.setRequestMethod("POST");
                 con.setDoOutput(true);
@@ -146,14 +158,17 @@
 
     public void download(String userName, String password) {
-        if (!properties.containsKey("osm-server.username") && userName != null) {
-            properties.put("osm-server.username", userName);
-        }
-        if (!properties.containsKey("osm-server.password") && password != null) {
-            properties.put("osm-server.password", password);
-        }
-        download();
-    }
-
-    public boolean download() {
+        if (!properties.containsKey("applet.username") && userName != null) {
+            properties.put("applet.username", userName);
+        }
+        if (!properties.containsKey("applet.password") && password != null) {
+            properties.put("applet.password", password);
+        }
+        try {
+            download();
+        } catch (MissingPassword e) {
+        }
+    }
+
+    public boolean download() throws MissingPassword {
         resetToDefault();
         String cont = connection.download();
Index: trunk/src/org/openstreetmap/josm/gui/MainApplet.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/MainApplet.java	(revision 3814)
+++ trunk/src/org/openstreetmap/josm/gui/MainApplet.java	(revision 3815)
@@ -29,4 +29,5 @@
 import org.openstreetmap.josm.data.ServerSidePreferences;
 import org.openstreetmap.josm.tools.GBC;
+import org.openstreetmap.josm.tools.I18n;
 import org.openstreetmap.josm.tools.Shortcut;
 
@@ -82,5 +83,8 @@
 
     @Override public void start() {
-        // initialize the plaform hook, and
+        I18n.init();
+        Main.checkJava6();
+
+        // initialize the platform hook, and
         Main.determinePlatformHook();
         // call the really early hook before we do anything else
@@ -88,9 +92,13 @@
 
         Main.pref = new ServerSidePreferences(getCodeBase());
-        if(!((ServerSidePreferences)Main.pref).download()) {
+        try
+        {
+            ((ServerSidePreferences)Main.pref).download();
+        } catch (ServerSidePreferences.MissingPassword e) {
             String username = args.containsKey("username") ? args.get("username").iterator().next() : null;
             String password = args.containsKey("password") ? args.get("password").iterator().next() : null;
             if (username == null || password == null) {
                 JPanel p = new JPanel(new GridBagLayout());
+                p.add(new JLabel(tr(e.realm)), GBC.eol().fill(GBC.HORIZONTAL));
                 p.add(new JLabel(tr("Username")), GBC.std().insets(0,0,20,0));
                 JTextField user = new JTextField(username == null ? "" : username);
@@ -101,8 +109,13 @@
                 JOptionPane.showMessageDialog(null, p);
                 username = user.getText();
+                if("".equals(username))
+                    username = null;
                 password = new String(pass.getPassword());
-                args.put("password", Arrays.asList(new String[]{password}));
+                if("".equals(password))
+                    password = null;
             }
-            ((ServerSidePreferences)Main.pref).download(username, password);
+            if (username != null && password != null) {
+                ((ServerSidePreferences)Main.pref).download(username, password);
+            }
         }
 
Index: trunk/src/org/openstreetmap/josm/gui/MainApplication.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/MainApplication.java	(revision 3814)
+++ trunk/src/org/openstreetmap/josm/gui/MainApplication.java	(revision 3815)
@@ -5,6 +5,4 @@
 import static org.openstreetmap.josm.tools.I18n.trn;
 
-import java.awt.GridBagConstraints;
-import java.awt.GridBagLayout;
 import java.awt.Toolkit;
 import java.awt.event.WindowAdapter;
@@ -25,8 +23,4 @@
 
 import javax.swing.JFrame;
-import javax.swing.JLabel;
-import javax.swing.JOptionPane;
-import javax.swing.JPanel;
-import javax.swing.JTextArea;
 import javax.swing.SwingUtilities;
 
@@ -141,5 +135,5 @@
     public static void main(final String[] argArray) {
         I18n.init();
-        checkJava6();
+        Main.checkJava6();
         Main.pref = new Preferences();
 
@@ -166,5 +160,5 @@
         System.setProperty("sun.awt.exception.handler", BugReportExceptionHandler.class.getName());
 
-        // initialize the plaform hook, and
+        // initialize the platform hook, and
         Main.determinePlatformHook();
         // call the really early hook before we anything else
@@ -302,38 +296,3 @@
         }
     }
-
-    private static void checkJava6() {
-        String version = System.getProperty("java.version");
-        if (version != null) {
-            if (version.startsWith("1.6") || version.startsWith("6") ||
-                    version.startsWith("1.7") || version.startsWith("7"))
-                return;
-            if (version.startsWith("1.5") || version.startsWith("5")) {
-                JLabel ho = new JLabel("<html>"+
-                        tr("<h2>JOSM requires Java version 6.</h2>"+
-                                "Detected Java version: {0}.<br>"+
-                                "You can <ul><li>update your Java (JRE) or</li>"+
-                                "<li>use an earlier (Java 5 compatible) version of JOSM.</li></ul>"+
-                                "More Info:", version)+"</html>");
-                JTextArea link = new JTextArea("http://josm.openstreetmap.de/wiki/Help/SystemRequirements");
-                link.setEditable(false);
-                link.setBackground(panel.getBackground());
-                JPanel panel = new JPanel(new GridBagLayout());
-                GridBagConstraints gbc = new GridBagConstraints();
-                gbc.gridwidth = GridBagConstraints.REMAINDER;
-                gbc.anchor = GridBagConstraints.WEST;
-                gbc.weightx = 1.0;
-                panel.add(ho, gbc);
-                panel.add(link, gbc);
-                final String EXIT = tr("Exit JOSM");
-                final String CONTINUE = tr("Continue, try anyway");
-                int ret = JOptionPane.showOptionDialog(null, panel, tr("Error"), JOptionPane.YES_NO_OPTION, JOptionPane.ERROR_MESSAGE, null, new String[] {EXIT, CONTINUE}, EXIT);
-                if (ret == 0) {
-                    System.exit(0);
-                }
-                return;
-            }
-        }
-        System.err.println("Error: Could not recognize Java Version: "+version);
-    }
 }
Index: trunk/src/org/openstreetmap/josm/io/OsmConnection.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/OsmConnection.java	(revision 3814)
+++ trunk/src/org/openstreetmap/josm/io/OsmConnection.java	(revision 3815)
@@ -11,5 +11,5 @@
 import java.nio.charset.Charset;
 import java.nio.charset.CharsetEncoder;
-import java.util.logging.Logger;
+//import java.util.logging.Logger;
 
 import oauth.signpost.OAuthConsumer;
@@ -32,5 +32,5 @@
 public class OsmConnection {
     @SuppressWarnings("unused")
-    private static final Logger logger = Logger.getLogger(OsmConnection.class.getName());
+    //private static final Logger logger = Logger.getLogger(OsmConnection.class.getName());
 
     protected boolean cancel = false;
