Index: trunk/src/org/openstreetmap/josm/data/osm/DataSet.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/DataSet.java	(revision 3421)
+++ trunk/src/org/openstreetmap/josm/data/osm/DataSet.java	(revision 3422)
@@ -918,5 +918,5 @@
             while (it.hasNext()) {
                 OsmPrimitive primitive = it.next();
-                if (primitive.isDeleted()) {
+                if (primitive.isDeleted() && !primitive.isVisible()) {
                     selectedPrimitives.remove(primitive);
                     selectionSnapshot = null;
Index: trunk/src/org/openstreetmap/josm/gui/io/UploadPrimitivesTask.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/io/UploadPrimitivesTask.java	(revision 3421)
+++ trunk/src/org/openstreetmap/josm/gui/io/UploadPrimitivesTask.java	(revision 3422)
@@ -235,5 +235,4 @@
                     }
                     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.
@@ -243,5 +242,5 @@
                     e.printStackTrace();
                     uploadCancelled = true;
-                    return;
+                    break uploadloop;
                 } catch(OsmApiPrimitiveGoneException e) {
                     // try to recover from  410 Gone
@@ -273,4 +272,7 @@
                     }
                 } finally {
+                    if (writer != null) {
+                        processedPrimitives.addAll(writer.getProcessedPrimitives());
+                    }
                     synchronized(this) {
                         writer = null;
@@ -286,9 +288,9 @@
             if (uploadCancelled) {
                 System.out.println(tr("Ignoring caught exception because upload is canceled. Exception is: {0}", e.toString()));
-                return;
-            }
-            lastException = e;
-        }
-        if (uploadCancelled) return;
+            } else {
+                lastException = e;
+            }
+        }
+        if (uploadCancelled && processedPrimitives.isEmpty()) return;
         cleanupAfterUpload();
     }
Index: trunk/src/org/openstreetmap/josm/io/DiffResultProcessor.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/DiffResultProcessor.java	(revision 3421)
+++ trunk/src/org/openstreetmap/josm/io/DiffResultProcessor.java	(revision 3422)
@@ -126,4 +126,6 @@
                     p.setOsmId(entry.new_id, entry.new_version);
                     p.setVisible(true);
+                } else {
+                    p.setVisible(false);
                 }
                 if (cs != null && !cs.isNew()) {
