Index: src/org/openstreetmap/josm/gui/io/UploadPrimitivesTask.java
===================================================================
--- src/org/openstreetmap/josm/gui/io/UploadPrimitivesTask.java	(revision 3409)
+++ src/org/openstreetmap/josm/gui/io/UploadPrimitivesTask.java	(working copy)
@@ -234,7 +234,6 @@
                         writer = new OsmServerWriter();
                     }
                     writer.uploadOsm(strategy, toUpload.getPrimitives(), changeset, getProgressMonitor().createSubTaskMonitor(1, false));
-                    processedPrimitives.addAll(writer.getProcessedPrimitives());
 
                     // if we get here we've successfully uploaded the data. Exit the loop.
                     //
@@ -242,7 +241,7 @@
                 } catch(OsmTransferCancelledException e) {
                     e.printStackTrace();
                     uploadCancelled = true;
-                    return;
+                    break uploadloop;
                 } catch(OsmApiPrimitiveGoneException e) {
                     // try to recover from  410 Gone
                     //
@@ -272,6 +271,9 @@
                         break uploadloop;
                     }
                 } finally {
+                    if (writer != null) {
+                        processedPrimitives.addAll(writer.getProcessedPrimitives());
+                    }
                     synchronized(this) {
                         writer = null;
                     }
@@ -285,11 +287,11 @@
         } catch (Exception e) {
             if (uploadCancelled) {
                 System.out.println(tr("Ignoring caught exception because upload is canceled. Exception is: {0}", e.toString()));
-                return;
+            } else {
+                lastException = e;
             }
-            lastException = e;
         }
-        if (uploadCancelled) return;
+        if (uploadCancelled && processedPrimitives.isEmpty()) return;
         cleanupAfterUpload();
     }
 
Index: src/org/openstreetmap/josm/io/DiffResultProcessor.java
===================================================================
--- src/org/openstreetmap/josm/io/DiffResultProcessor.java	(revision 3409)
+++ src/org/openstreetmap/josm/io/DiffResultProcessor.java	(working copy)
@@ -125,6 +125,8 @@
                 if (!p.isDeleted()) {
                     p.setOsmId(entry.new_id, entry.new_version);
                     p.setVisible(true);
+                } else {
+                    p.setVisible(false);
                 }
                 if (cs != null && !cs.isNew()) {
                     p.setChangesetId(cs.getId());
Index: src/org/openstreetmap/josm/data/osm/DataSet.java
===================================================================
--- src/org/openstreetmap/josm/data/osm/DataSet.java	(revision 3409)
+++ src/org/openstreetmap/josm/data/osm/DataSet.java	(working copy)
@@ -888,7 +888,7 @@
         boolean changed = false;
         while (it.hasNext()) {
             OsmPrimitive primitive = it.next();
-            if (primitive.isDeleted()) {
+            if (primitive.isDeleted() && !primitive.isVisible()) {
                 selectedPrimitives.remove(primitive);
                 allPrimitives.remove(primitive);
                 primitive.setDataset(null);

