Index: trunk/src/org/openstreetmap/josm/io/OsmApiException.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/OsmApiException.java	(revision 3510)
+++ trunk/src/org/openstreetmap/josm/io/OsmApiException.java	(revision 3511)
@@ -61,16 +61,27 @@
         sb.append("ResponseCode=")
         .append(responseCode);
-        if (errorHeader != null && errorBody != null && !errorBody.trim().equals("")) {
-            sb.append(", Error Header=<")
-            .append(tr(errorHeader))
-            .append(">");
-        }
-        if (errorBody != null && !errorBody.trim().equals("")) {
-            errorBody = errorBody.trim();
-            if(!errorBody.equals(errorHeader)) {
-                sb.append(", Error Body=<")
-                .append(tr(errorBody))
+        String eh = "";
+        try
+        {
+            if(errorHeader != null)
+                eh = tr(errorHeader.trim());
+            if (!eh.isEmpty()) {
+                sb.append(", Error Header=<")
+                .append(eh)
                 .append(">");
             }
+        }
+        catch (Exception e) {
+        }
+        try
+        {
+            String eb = errorBody != null ? tr(errorBody.trim()) : "";
+            if (!eb.isEmpty() && !eb.equals(eh)) {
+                sb.append(", Error Body=<")
+                .append(eb)
+                .append(">");
+            }
+        }
+        catch (Exception e) {
         }
         return sb.toString();
Index: trunk/src/org/openstreetmap/josm/io/OsmServerReader.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/OsmServerReader.java	(revision 3510)
+++ trunk/src/org/openstreetmap/josm/io/OsmServerReader.java	(revision 3511)
@@ -5,4 +5,5 @@
 
 import java.io.BufferedReader;
+import java.io.IOException;
 import java.io.InputStream;
 import java.io.InputStreamReader;
@@ -94,16 +95,22 @@
                     throw new OsmTransferCancelledException();
 
+                String encoding = activeConnection.getContentEncoding();
                 if (activeConnection.getResponseCode() != HttpURLConnection.HTTP_OK) {
                     String errorHeader = activeConnection.getHeaderField("Error");
-                    InputStream i = null;
-                    i = activeConnection.getErrorStream();
                     StringBuilder errorBody = new StringBuilder();
-                    if (i != null) {
-                        BufferedReader in = new BufferedReader(new InputStreamReader(i));
-                        String s;
-                        while((s = in.readLine()) != null) {
-                            errorBody.append(s);
-                            errorBody.append("\n");
+                    try
+                    {
+                        InputStream i = FixEncoding(activeConnection.getErrorStream(), encoding);
+                        if (i != null) {
+                            BufferedReader in = new BufferedReader(new InputStreamReader(i));
+                            String s;
+                            while((s = in.readLine()) != null) {
+                                errorBody.append(s);
+                                errorBody.append("\n");
+                            }
                         }
+                    }
+                    catch(Exception e) {
+                        errorBody.append(tr("Reading error text failed."));
                     }
 
@@ -111,13 +118,5 @@
                 }
 
-                String encoding = activeConnection.getContentEncoding();
-                InputStream inputStream = new ProgressInputStream(activeConnection, progressMonitor);
-                if (encoding != null && encoding.equalsIgnoreCase("gzip")) {
-                    inputStream = new GZIPInputStream(inputStream);
-                }
-                else if (encoding != null && encoding.equalsIgnoreCase("deflate")) {
-                    inputStream = new InflaterInputStream(inputStream, new Inflater(true));
-                }
-                return inputStream;
+                return FixEncoding(new ProgressInputStream(activeConnection, progressMonitor), encoding);
             } catch(Exception e) {
                 if (e instanceof OsmTransferException)
@@ -130,4 +129,15 @@
             progressMonitor.invalidate();
         }
+    }
+
+    private InputStream FixEncoding(InputStream stream, String encoding) throws IOException
+    {
+        if (encoding != null && encoding.equalsIgnoreCase("gzip")) {
+            stream = new GZIPInputStream(stream);
+        }
+        else if (encoding != null && encoding.equalsIgnoreCase("deflate")) {
+            stream = new InflaterInputStream(stream, new Inflater(true));
+        }
+        return stream;
     }
 
