Index: /trunk/src/org/openstreetmap/josm/tools/ExceptionUtil.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/tools/ExceptionUtil.java	(revision 4481)
+++ /trunk/src/org/openstreetmap/josm/tools/ExceptionUtil.java	(revision 4482)
@@ -105,6 +105,6 @@
         msg = tr(
                 "<html>Uploading to the server <strong>failed</strong> because your current<br>"
-                + "dataset violates a precondition.<br>" + "The error message is:<br>" + "{0}" + "</html>", e
-                .getMessage().replace("&", "&amp;").replace("<", "&lt;").replace(">", "&gt;"));
+                + "dataset violates a precondition.<br>" + "The error message is:<br>" + "{0}" + "</html>", 
+                escapeReservedCharactersHTML(e.getMessage()));
         return msg;
     }
@@ -298,5 +298,5 @@
         }
         e.printStackTrace();
-        return msg;
+        return escapeReservedCharactersHTML(msg);
     }
 
@@ -410,4 +410,18 @@
         return message;
     }
+    
+    /**
+     * Explains a {@see OsmApiException} which was thrown because of
+     * bandwidth limit exceeded (HTTP error 509) 
+     *
+     * @param e the exception
+     */
+    public static String explainBandwidthLimitExceeded(OsmApiException e) {
+        // TODO: Write a proper error message
+        String message = explainGenericOsmApiException(e);
+        e.printStackTrace();
+        return message;
+    }
+    
 
     /**
@@ -504,4 +518,6 @@
             if (oae.getResponseCode() == HttpURLConnection.HTTP_BAD_REQUEST)
                 return explainBadRequest(oae);
+            if (oae.getResponseCode() == 509)
+                return explainBandwidthLimitExceeded(oae);
         }
         return explainGeneric(e);
@@ -522,5 +538,5 @@
                 + "<br>"
                 + "The error message is:<br>" + "{0}"
-                + "</html>", e.getMessage().replace("&", "&amp;").replace("<", "&lt;").replace(">", "&gt;"));
+                + "</html>", escapeReservedCharactersHTML(e.getMessage()));
         return msg;
 
@@ -542,3 +558,12 @@
         return msg;
     }
+    
+    /**
+     * Replaces some HTML reserved characters (<, > and &) by their equivalent entity (&lt;, &gt; and &amp;);
+     * @param s The unescaped string
+     * @return The escaped string
+     */
+    public static String escapeReservedCharactersHTML(String s) {
+        return s == null ? "" : s.replace("&", "&amp;").replace("<", "&lt;").replace(">", "&gt;");
+    }
 }
