Index: /trunk/src/org/openstreetmap/josm/actions/UploadNotesAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/UploadNotesAction.java	(revision 8473)
+++ /trunk/src/org/openstreetmap/josm/actions/UploadNotesAction.java	(revision 8474)
@@ -53,6 +53,5 @@
             return;
         }
-        UploadNotesTask uploadTask = new UploadNotesTask();
-        uploadTask.uploadNotes(noteData, new PleaseWaitProgressMonitor(tr("Uploading notes to server")));
+        new UploadNotesTask().uploadNotes(noteData, new PleaseWaitProgressMonitor(tr("Uploading notes to server")));
     }
 }
Index: /trunk/src/org/openstreetmap/josm/data/osm/NoteData.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/osm/NoteData.java	(revision 8473)
+++ /trunk/src/org/openstreetmap/josm/data/osm/NoteData.java	(revision 8474)
@@ -273,6 +273,8 @@
 
     private void dataUpdated() {
-        Main.map.noteDialog.setNotes(getSortedNotes());
-        Main.map.mapView.repaint();
+        if (Main.isDisplayingMapView()) {
+            Main.map.noteDialog.setNotes(getSortedNotes());
+            Main.map.mapView.repaint();
+        }
     }
 
Index: /trunk/src/org/openstreetmap/josm/gui/io/SaveLayersDialog.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/io/SaveLayersDialog.java	(revision 8473)
+++ /trunk/src/org/openstreetmap/josm/gui/io/SaveLayersDialog.java	(revision 8474)
@@ -548,4 +548,5 @@
             int numProblems = model.getNumCancel() + model.getNumFailed();
             if (numProblems == 0) return;
+            Main.warn(numProblems + " problems occured during upload/save");
             String msg = trn(
                     "<html>An upload and/or save operation of one layer with modifications<br>"
Index: /trunk/src/org/openstreetmap/josm/gui/io/UploadNoteLayerTask.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/io/UploadNoteLayerTask.java	(revision 8474)
+++ /trunk/src/org/openstreetmap/josm/gui/io/UploadNoteLayerTask.java	(revision 8474)
@@ -0,0 +1,51 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.gui.io;
+
+import static org.openstreetmap.josm.tools.I18n.tr;
+
+import org.openstreetmap.josm.actions.upload.UploadNotesTask;
+import org.openstreetmap.josm.gui.layer.NoteLayer;
+import org.openstreetmap.josm.gui.progress.NullProgressMonitor;
+import org.openstreetmap.josm.gui.progress.ProgressMonitor;
+import org.openstreetmap.josm.tools.CheckParameterUtil;
+
+/**
+ * UploadNoteLayerTask uploads the data managed by an {@link NoteLayer} asynchronously.
+ * @since 8474
+ */
+public class UploadNoteLayerTask extends AbstractIOTask {
+
+    private final NoteLayer layer;
+    private final ProgressMonitor monitor;
+
+    /**
+     * Creates the upload task.
+     *
+     * @param layer the layer. Must not be null.
+     * @param monitor  a progress monitor. If monitor is null, uses {@link NullProgressMonitor#INSTANCE}
+     * @throws IllegalArgumentException if layer is null
+     * @throws IllegalArgumentException if strategy is null
+     */
+    public UploadNoteLayerTask(NoteLayer layer, ProgressMonitor monitor) {
+        CheckParameterUtil.ensureParameterNotNull(layer, "layer");
+        if (monitor == null) {
+            monitor = NullProgressMonitor.INSTANCE;
+        }
+        this.layer = layer;
+        this.monitor = monitor;
+    }
+
+    @Override
+    public void run() {
+        monitor.indeterminateSubTask(tr("Uploading notes to server"));
+        new UploadNotesTask().uploadNotes(layer.getNoteData(), monitor.createSubTaskMonitor(ProgressMonitor.ALL_TICKS, false));
+        if (isCanceled())
+            return;
+        layer.onPostUploadToServer();
+    }
+
+    @Override
+    public void cancel() {
+        setCanceled(true);
+    }
+}
Index: /trunk/src/org/openstreetmap/josm/gui/layer/NoteLayer.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/layer/NoteLayer.java	(revision 8473)
+++ /trunk/src/org/openstreetmap/josm/gui/layer/NoteLayer.java	(revision 8474)
@@ -33,4 +33,7 @@
 import org.openstreetmap.josm.gui.dialogs.LayerListPopup;
 import org.openstreetmap.josm.gui.dialogs.NotesDialog;
+import org.openstreetmap.josm.gui.io.AbstractIOTask;
+import org.openstreetmap.josm.gui.io.UploadNoteLayerTask;
+import org.openstreetmap.josm.gui.progress.ProgressMonitor;
 import org.openstreetmap.josm.io.NoteExporter;
 import org.openstreetmap.josm.io.XmlWriter;
@@ -39,5 +42,6 @@
 
 /**
- * A layer to hold Note objects
+ * A layer to hold Note objects.
+ * @since 7522
  */
 public class NoteLayer extends AbstractModifiableLayer implements MouseListener {
@@ -246,13 +250,26 @@
 
     @Override
-    public void mousePressed(MouseEvent e) { }
-
-    @Override
-    public void mouseReleased(MouseEvent e) { }
-
-    @Override
-    public void mouseEntered(MouseEvent e) { }
-
-    @Override
-    public void mouseExited(MouseEvent e) { }
+    public AbstractIOTask createUploadTask(ProgressMonitor monitor) {
+        return new UploadNoteLayerTask(this, monitor);
+    }
+
+    @Override
+    public void mousePressed(MouseEvent e) {
+        // Do nothing
+    }
+
+    @Override
+    public void mouseReleased(MouseEvent e) {
+        // Do nothing
+    }
+
+    @Override
+    public void mouseEntered(MouseEvent e) {
+        // Do nothing
+    }
+
+    @Override
+    public void mouseExited(MouseEvent e) {
+        // Do nothing
+    }
 }
