Index: /trunk/src/org/openstreetmap/josm/io/OsmApi.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/io/OsmApi.java	(revision 1558)
+++ /trunk/src/org/openstreetmap/josm/io/OsmApi.java	(revision 1559)
@@ -6,4 +6,6 @@
 import java.io.BufferedReader;
 import java.io.BufferedWriter;
+import java.io.IOException;
+import java.io.InputStream;
 import java.io.InputStreamReader;
 import java.io.OutputStream;
@@ -19,5 +21,4 @@
 import java.util.ArrayList;
 import java.util.Collection;
-import java.util.HashMap;
 import java.util.Properties;
 import java.util.StringTokenizer;
@@ -78,20 +79,4 @@
      */
     private boolean initialized = false;
-
-    /**
-     * list of server error messages (as transported in the Error: header) and their translations.
-     */
-    public static final HashMap<String,String> serverErrorTranslations;
-
-    static {
-        serverErrorTranslations = new HashMap<String,String>();
-        serverErrorTranslations.put("Database offline for maintenance", 
-            tr("Database offline for maintenance"));
-        serverErrorTranslations.put("You must make your edits public to upload new data",
-            tr("You must make your edits public to upload new data"));
-        // FIXME there is one additional server error message that goes
-        // "You requested too many nodes (limit is #{APP_CONFIG['max_number_of_nodes']}). Either request a smaller area, or use planet.osm"
-        // but we would have to switch this mechanism to using regular expressions if we wanted to translate that...
-    }
     
     private StringWriter swriter = new StringWriter();
@@ -400,7 +385,7 @@
                     out.close();
                 }
+                
                 activeConnection.connect();
                 System.out.println(activeConnection.getResponseMessage());
-
                 int retCode = activeConnection.getResponseCode();
                 
@@ -414,5 +399,15 @@
                 // populate return fields.
                 responseBody.setLength(0);
-                BufferedReader in = new BufferedReader(new InputStreamReader(activeConnection.getInputStream()));
+                
+                // If the API returned an error code like 403 forbidden, getInputStream
+                // will fail with an IOException.
+                InputStream i = null;
+                try {
+                    i = activeConnection.getInputStream();
+                } catch (IOException ioe) {
+                    i = activeConnection.getErrorStream();
+                }
+                BufferedReader in = new BufferedReader(new InputStreamReader(i));
+                
                 String s;
                 while((s = in.readLine()) != null) {
@@ -422,11 +417,14 @@
 
                 statusMessage.setLength(0);
-                statusMessage.append (activeConnection.getResponseMessage());
                 // Look for a detailed error message from the server
                 if (activeConnection.getHeaderField("Error") != null) {
-                    statusMessage.append(": ");
                     String er = activeConnection.getHeaderField("Error");
-                    if (serverErrorTranslations.containsKey(er)) er = serverErrorTranslations.get(er);
-                    statusMessage.append(er);
+                    System.err.println("Error header: " + er);
+                    statusMessage.append(tr(er));
+                } else if (retCode != 200 && responseBody.length()>0) {
+                    System.err.println("Error body: " + responseBody);
+                    statusMessage.append(tr(responseBody.toString()));
+                } else {
+                    statusMessage.append(activeConnection.getResponseMessage());
                 }
                 activeConnection.disconnect();
Index: /trunk/src/org/openstreetmap/josm/io/OsmServerWriter.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/io/OsmServerWriter.java	(revision 1558)
+++ /trunk/src/org/openstreetmap/josm/io/OsmServerWriter.java	(revision 1559)
@@ -6,4 +6,6 @@
 import java.util.Collection;
 import java.util.LinkedList;
+
+import javax.swing.JOptionPane;
 
 import org.openstreetmap.josm.Main;
@@ -125,9 +127,6 @@
 
     private void dealWithTransferException (OsmTransferException e) {
-        Main.pleaseWaitDlg.currentAction.setText(tr("Transfer aborted due to error (will wait for 5 seconds):") + e.getMessage());
-        try {
-            Thread.sleep(5000);
-        }
-        catch (InterruptedException ex) {}
+        JOptionPane.showMessageDialog(Main.parent, 
+            /* tr("Error during upload: ") + */ e.getMessage());
     }
 }
