Index: src/org/openstreetmap/josm/io/OsmConnection.java
===================================================================
--- src/org/openstreetmap/josm/io/OsmConnection.java	(revision 2640)
+++ src/org/openstreetmap/josm/io/OsmConnection.java	(working copy)
@@ -70,11 +70,16 @@
          * Set to true, when the autenticator tried the password once.
          */
         public boolean passwordtried = false;
+	/**
+	 * Set to requestor type
+	 */
+	public String requestorType;
         /**
          * Whether the user cancelled the password dialog
          */
         public boolean authCancelled = false;
         @Override protected PasswordAuthentication getPasswordAuthentication() {
+	    requestorType=getRequestorType().name();
             return credentialsManager.getPasswordAuthentication(this);
         }
     }
@@ -153,57 +158,111 @@
         }
         public PasswordAuthentication getPasswordAuthentication(OsmAuth caller) {
             String username, password;
-            try {
-                username = lookup(Key.USERNAME);
-            } catch (CMException e) {
-                username = "";
-            }
-            try {
-                password = lookup(Key.PASSWORD);
-            } catch (CMException e) {
-                password = "";
-            }
-            if (caller.passwordtried || username.equals("") || password.equals("")) {
-                JPanel p = new JPanel(new GridBagLayout());
-                if (!username.equals("") && !password.equals("")) {
-                    p.add(new JLabel(tr("Incorrect password or username.")), GBC.eop());
-                }
-                p.add(new JLabel(tr("Username")), GBC.std().insets(0,0,10,0));
-                JTextField usernameField = new JTextField(username, 20);
-                p.add(usernameField, GBC.eol());
-                p.add(new JLabel(tr("Password")), GBC.std().insets(0,0,10,0));
-                JPasswordField passwordField = new JPasswordField(password, 20);
-                p.add(passwordField, GBC.eol());
-                JLabel warning = new JLabel(tr("Warning: The password is transferred unencrypted."));
-                warning.setFont(warning.getFont().deriveFont(Font.ITALIC));
-                p.add(warning, GBC.eop());
-
-                JCheckBox savePassword = new JCheckBox(tr("Save user and password (unencrypted)"),
-                        !username.equals("") && !password.equals(""));
-                p.add(savePassword, GBC.eop());
-
-                ExtendedDialog dialog = new ExtendedDialog(
-                        Main.parent,
-                        tr("Enter Password"),
-                        new String[] {tr("Login"), tr("Cancel")}
-                );
-                dialog.setContent(p);
-                dialog.setButtonIcons( new String[] {"ok.png", "cancel.png"});
-                dialog.showDialog();
-
-                if (dialog.getValue() != 1) {
-                    caller.authCancelled = true;
-                    return null;
-                }
-                username = usernameField.getText();
-                password = String.valueOf(passwordField.getPassword());
-                if (savePassword.isSelected()) {
-                    store(Key.USERNAME, username);
-                    store(Key.PASSWORD, password);
-                }
-                if (username.equals(""))
-                    return null;
-            }
+	    if (caller.requestorType.equals("PROXY")) {
+		try {
+		    username = System.getProperties().getProperty("http.proxyUser");
+		} catch (Exception e) {
+		    username = "";
+		}
+		try {
+		    password = System.getProperties().getProperty("http.proxyPassword");
+		} catch (Exception e) {
+		    password = "";
+		}
+		if (caller.passwordtried || username.equals("") || password.equals("")) { 		    
+		    JPanel p = new JPanel(new GridBagLayout());
+		    if (!username.equals("") && !password.equals("")) {
+			p.add(new JLabel(tr("Incorrect password or username for proxy.")), GBC.eop());
+		    }
+		    p.add(new JLabel(tr("Username")), GBC.std().insets(0,0,10,0));
+		    JTextField usernameField = new JTextField(username, 20);
+		    p.add(usernameField, GBC.eol());
+		    p.add(new JLabel(tr("Password")), GBC.std().insets(0,0,10,0));
+		    JPasswordField passwordField = new JPasswordField(password, 20);
+		    p.add(passwordField, GBC.eol());
+		    JLabel warning = new JLabel(tr("Warning: The password is transferred unencrypted."));
+		    warning.setFont(warning.getFont().deriveFont(Font.ITALIC));
+		    p.add(warning, GBC.eop());
+		    
+		    JCheckBox savePassword = new JCheckBox(tr("Save user and password (unencrypted)"),
+							   !username.equals("") && !password.equals(""));
+		    p.add(savePassword, GBC.eop());
+		    
+		    ExtendedDialog dialog = new ExtendedDialog(
+							       Main.parent,
+							       tr("Enter Password"),
+							       new String[] {tr("Login"), tr("Cancel")}
+							       );
+		    dialog.setContent(p);
+		    dialog.setButtonIcons( new String[] {"ok.png", "cancel.png"});
+		    dialog.showDialog();
+		    
+		    if (dialog.getValue() != 1) {
+			caller.authCancelled = true;
+			return null;
+		    }
+		    username = usernameField.getText();
+		    password = String.valueOf(passwordField.getPassword());
+		    if (savePassword.isSelected()) {
+			System.getProperties().setProperty("http.proxyUser", username);
+			System.getProperties().setProperty("http.proxyPassword", password);
+		    }
+		    if (username.equals(""))
+			return null;
+		}
+	    } else {
+		try {
+		    username = lookup(Key.USERNAME);
+		} catch (CMException e) {
+		    username = "";
+		}
+		try {
+		    password = lookup(Key.PASSWORD);
+		} catch (CMException e) {
+		    password = "";
+		}
+		if (caller.passwordtried || username.equals("") || password.equals("")) { 		    
+		    JPanel p = new JPanel(new GridBagLayout());
+		    if (!username.equals("") && !password.equals("")) {
+			p.add(new JLabel(tr("Incorrect password or username for OSM server.")), GBC.eop());
+		    }
+		    p.add(new JLabel(tr("Username")), GBC.std().insets(0,0,10,0));
+		    JTextField usernameField = new JTextField(username, 20);
+		    p.add(usernameField, GBC.eol());
+		    p.add(new JLabel(tr("Password")), GBC.std().insets(0,0,10,0));
+		    JPasswordField passwordField = new JPasswordField(password, 20);
+		    p.add(passwordField, GBC.eol());
+		    JLabel warning = new JLabel(tr("Warning: The password is transferred unencrypted."));
+		    warning.setFont(warning.getFont().deriveFont(Font.ITALIC));
+		    p.add(warning, GBC.eop());
+		    
+		    JCheckBox savePassword = new JCheckBox(tr("Save user and password (unencrypted)"),
+							   !username.equals("") && !password.equals(""));
+		    p.add(savePassword, GBC.eop());
+		    
+		    ExtendedDialog dialog = new ExtendedDialog(
+							       Main.parent,
+							       tr("Enter Password"),
+							       new String[] {tr("Login"), tr("Cancel")}
+							       );
+		    dialog.setContent(p);
+		    dialog.setButtonIcons( new String[] {"ok.png", "cancel.png"});
+		    dialog.showDialog();
+		    
+		    if (dialog.getValue() != 1) {
+			caller.authCancelled = true;
+			return null;
+		    }
+		    username = usernameField.getText();
+		    password = String.valueOf(passwordField.getPassword());
+		    if (savePassword.isSelected()) {
+			store(Key.USERNAME, username);
+			store(Key.PASSWORD, password);
+		    }
+		    if (username.equals(""))
+			return null;
+		}
+	    }
             caller.passwordtried = true;
             return new PasswordAuthentication(username, password.toCharArray());
         }
Index: src/org/openstreetmap/josm/data/Preferences.java
===================================================================
--- src/org/openstreetmap/josm/data/Preferences.java	(revision 2640)
+++ src/org/openstreetmap/josm/data/Preferences.java	(working copy)
@@ -733,10 +733,10 @@
         if (getBoolean(ProxyPreferences.PROXY_ENABLE)) {
             sysProp.put("proxySet", "true");
             sysProp.put("http.proxyHost", get(ProxyPreferences.PROXY_HOST));
-            sysProp.put("proxyPort", get(ProxyPreferences.PROXY_PORT));
+            sysProp.put("http.proxyPort", get(ProxyPreferences.PROXY_PORT));
             if (!getBoolean(ProxyPreferences.PROXY_ANONYMOUS)) {
-                sysProp.put("proxyUser", get(ProxyPreferences.PROXY_USER));
-                sysProp.put("proxyPassword", get(ProxyPreferences.PROXY_PASS));
+                sysProp.put("http.proxyUser", get(ProxyPreferences.PROXY_USER));
+                sysProp.put("http.proxyPassword", get(ProxyPreferences.PROXY_PASS));
             }
 
         }
