Index: /src/org/openstreetmap/josm/io/OsmServerWriter.java
===================================================================
--- /src/org/openstreetmap/josm/io/OsmServerWriter.java	(revision 215)
+++ /src/org/openstreetmap/josm/io/OsmServerWriter.java	(revision 216)
@@ -150,5 +150,4 @@
 	 * 		<code>false</code>, if only the id is encoded.
 	 */
-	@SuppressWarnings("unchecked")
 	private void sendRequest(String requestMethod, String urlSuffix,
 			OsmPrimitive osm, boolean addBody) {
@@ -183,4 +182,9 @@
 				return; // everything fine.. was already deleted.
 			if (retCode != 200) {
+				// Look for a detailed error message from the server
+				if (activeConnection.getHeaderField("Error") != null)
+					retMsg += "\n" + activeConnection.getHeaderField("Error");
+
+				// Report our error
 				ByteArrayOutputStream o = new ByteArrayOutputStream();
 				OsmWriter.output(o, new OsmWriter.Single(osm, true));
Index: /src/org/openstreetmap/josm/io/ProgressInputStream.java
===================================================================
--- /src/org/openstreetmap/josm/io/ProgressInputStream.java	(revision 215)
+++ /src/org/openstreetmap/josm/io/ProgressInputStream.java	(revision 216)
@@ -19,7 +19,21 @@
 	private PleaseWaitDialog pleaseWaitDlg;
 
-	public ProgressInputStream(URLConnection con, PleaseWaitDialog pleaseWaitDlg) throws IOException {
+	public class OsmServerException extends IOException {
+		private OsmServerException(String e) {
+			super(e);
+		}
+	}
+
+	public ProgressInputStream(URLConnection con, PleaseWaitDialog pleaseWaitDlg) throws IOException, OsmServerException {
 		this.connection = con;
-		this.in = con.getInputStream();
+
+		try {
+			this.in = con.getInputStream();
+		} catch (IOException e) {
+			if (con.getHeaderField("Error") != null)
+				throw new OsmServerException(con.getHeaderField("Error"));
+			throw e;
+		}
+
 		int contentLength = con.getContentLength();
 		this.pleaseWaitDlg = pleaseWaitDlg;
