Index: trunk/src/org/openstreetmap/josm/io/OsmReader.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/OsmReader.java	(revision 2077)
+++ trunk/src/org/openstreetmap/josm/io/OsmReader.java	(revision 2078)
@@ -338,4 +338,6 @@
                 String value = atts.getValue("v");
                 current.rememberTag(key, value);
+            } else {
+                throwException(tr("Undefined element ''{0}'' found in input stream. Aborting.", qName));
             }
         }
Index: trunk/src/org/openstreetmap/josm/io/OsmServerWriter.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/OsmServerWriter.java	(revision 2077)
+++ trunk/src/org/openstreetmap/josm/io/OsmServerWriter.java	(revision 2078)
@@ -90,4 +90,5 @@
     protected void uploadChangesIndividually(Collection<OsmPrimitive> primitives, Changeset changeset, ChangesetProcessingType changesetProcessingType, ProgressMonitor progressMonitor) throws OsmTransferException {
         try {
+            progressMonitor.beginTask(tr("Starting to upload with one request per primitive ..."));
             progressMonitor.setTicksCount(primitives.size());
             if (changesetProcessingType.isUseNew()) {
@@ -102,7 +103,7 @@
                 String msg = "";
                 switch(OsmPrimitiveType.from(osm)) {
-                    case NODE: msg = marktr("{0}% ({1}/{2}), {3} left. Uploading node ''{4}'' (id: {5})"); break;
-                    case WAY: msg = marktr("{0}% ({1}/{2}), {3} left. Uploading way ''{4}'' (id: {5})"); break;
-                    case RELATION: msg = marktr("{0}% ({1}/{2}), {3} left. Uploading relation ''{4}'' (id: {5})"); break;
+                case NODE: msg = marktr("{0}% ({1}/{2}), {3} left. Uploading node ''{4}'' (id: {5})"); break;
+                case WAY: msg = marktr("{0}% ({1}/{2}), {3} left. Uploading way ''{4}'' (id: {5})"); break;
+                case RELATION: msg = marktr("{0}% ({1}/{2}), {3} left. Uploading relation ''{4}'' (id: {5})"); break;
                 }
                 progressMonitor.subTask(
@@ -135,4 +136,6 @@
                 closeException.setChangeset(api.getCurrentChangeset());
                 throw closeException;
+            } finally {
+                progressMonitor.finishTask();
             }
         }
@@ -150,4 +153,5 @@
         //
         try {
+            progressMonitor.beginTask(tr("Starting to upload in one request ..."));
             if (changesetProcessingType.isUseNew()) {
                 api.createChangeset(changeset,progressMonitor.createSubTaskMonitor(0, false));
@@ -167,5 +171,8 @@
                 closeException.setChangeset(api.getCurrentChangeset());
                 throw closeException;
-            }
+            } finally {
+                progressMonitor.finishTask();
+            }
+
         }
     }
@@ -179,5 +186,5 @@
     public void uploadOsm(String apiVersion, Collection<OsmPrimitive> primitives, Changeset changeset, ChangesetProcessingType changesetProcessingType, ProgressMonitor progressMonitor) throws OsmTransferException {
         processed = new LinkedList<OsmPrimitive>();
-
+        progressMonitor.beginTask(tr("Uploading data ..."));
         api.initialize(progressMonitor);
         try {
@@ -185,4 +192,8 @@
             //
             boolean casUseDiffUploads = api.hasSupportForDiffUploads();
+            if (apiVersion == null) {
+                System.out.println(tr("WARNING: no API version defined for data to upload. Falling back to version 0.6"));
+                apiVersion = "0.6";
+            }
             boolean useDiffUpload = Main.pref.getBoolean("osm-server.atomic-upload", apiVersion.compareTo("0.6")>=0);
             if (useDiffUpload && ! casUseDiffUploads) {
@@ -192,9 +203,7 @@
 
             if (useDiffUpload) {
-                progressMonitor.beginTask(tr("Starting to upload in one request ..."));
-                uploadChangesAsDiffUpload(primitives,changeset, changesetProcessingType, progressMonitor);
+                uploadChangesAsDiffUpload(primitives,changeset, changesetProcessingType, progressMonitor.createSubTaskMonitor(0,false));
             } else {
-                progressMonitor.beginTask(tr("Starting to upload with one request per primitive ..."));
-                uploadChangesIndividually(primitives,changeset,changesetProcessingType,  progressMonitor);
+                uploadChangesIndividually(primitives,changeset,changesetProcessingType,  progressMonitor.createSubTaskMonitor(0,false));
             }
         } finally {
