Index: trunk/src/org/openstreetmap/josm/actions/UploadAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/UploadAction.java	(revision 2188)
+++ trunk/src/org/openstreetmap/josm/actions/UploadAction.java	(revision 2189)
@@ -415,4 +415,11 @@
                 return;
             }
+            // Tried to update or delete a primitive which never existed on
+            // the server?
+            //
+            else if (ex.getResponseCode() == HttpURLConnection.HTTP_NOT_FOUND) {
+                ExceptionDialogUtil.explainNotFound(ex);
+                return;
+            }
             // any other API exception
             //
Index: trunk/src/org/openstreetmap/josm/gui/ExceptionDialogUtil.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/ExceptionDialogUtil.java	(revision 2188)
+++ trunk/src/org/openstreetmap/josm/gui/ExceptionDialogUtil.java	(revision 2189)
@@ -133,4 +133,15 @@
 
     /**
+     * Explains a {@see OsmApiException} which was thrown because a resource wasn't found
+     * on the server
+     * 
+     * @param e the exception
+     */
+    public static void explainNotFound(OsmApiException e) {
+        JOptionPane.showMessageDialog(Main.parent, ExceptionUtil.explainNotFound(e), tr("Not Found"),
+                JOptionPane.ERROR_MESSAGE);
+    }
+
+    /**
      * Explains a {@see UnknownHostException} which has caused an {@see OsmTransferException}.
      * This is most likely happening when there is an error in the API URL or when
@@ -216,4 +227,9 @@
                 return;
             }
+            if (oae.getResponseCode() == HttpURLConnection.HTTP_NOT_FOUND) {
+                explainNotFound(oae);
+                return;
+            }
+
         }
         explainGeneric(e);
Index: trunk/src/org/openstreetmap/josm/io/OsmApiException.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/OsmApiException.java	(revision 2188)
+++ trunk/src/org/openstreetmap/josm/io/OsmApiException.java	(revision 2189)
@@ -86,5 +86,5 @@
             sb.append(tr(errorHeader));
             sb.append(tr("(Code={0})", responseCode));
-        } else if (errorBody != null) {
+        } else if (errorBody != null && !errorBody.trim().equals("")) {
             errorBody = errorBody.trim();
             sb.append(tr(errorBody));
Index: trunk/src/org/openstreetmap/josm/tools/ExceptionUtil.java
===================================================================
--- trunk/src/org/openstreetmap/josm/tools/ExceptionUtil.java	(revision 2188)
+++ trunk/src/org/openstreetmap/josm/tools/ExceptionUtil.java	(revision 2189)
@@ -168,4 +168,19 @@
             message += tr("<br>Error message(untranslated): {0}", e.getErrorHeader());
         }
+        message = "<html>" + message + "</html>";
+        e.printStackTrace();
+        return message;
+    }
+
+    /**
+     * Explains a {@see OsmApiException} which was thrown because a resource wasn't found.
+     * 
+     * @param e the exception
+     */
+    public static String explainNotFound(OsmApiException e) {
+        String apiUrl = OsmApi.getOsmApi().getBaseUrl();
+        String message = tr("The OSM server ''{0}'' doesn't know about an object<br>"
+                + "you tried to update or delete."
+                , apiUrl);
         message = "<html>" + message + "</html>";
         e.printStackTrace();
