Index: trunk/src/org/openstreetmap/josm/actions/upload/UploadNotesTask.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/upload/UploadNotesTask.java	(revision 18442)
+++ trunk/src/org/openstreetmap/josm/actions/upload/UploadNotesTask.java	(revision 18443)
@@ -5,6 +5,8 @@
 
 import java.io.IOException;
+import java.util.Collection;
 import java.util.HashMap;
 import java.util.Map;
+import java.util.Optional;
 import java.util.stream.Collectors;
 
@@ -64,7 +66,12 @@
         @Override
         protected void realRun() throws SAXException, IOException, OsmTransferException {
-            ProgressMonitor monitor = progressMonitor.createSubTaskMonitor(ProgressMonitor.ALL_TICKS, false);
             OsmApi api = OsmApi.getOsmApi();
-            for (Note note : noteData.getNotes()) {
+            final Collection<Note> modifiedNotes = noteData.getNotes().stream()
+                    .filter(note -> Optional.ofNullable(note.getLastComment()).map(NoteComment::isNew).orElse(false))
+                    .collect(Collectors.toList());
+            getProgressMonitor().setTicksCount(modifiedNotes.size());
+            for (Note note : modifiedNotes) {
+                getProgressMonitor().setCustomText(tr("Uploading notes {0}/{1}", getProgressMonitor().getTicks(),
+                        getProgressMonitor().getTicksCount()));
                 if (isCanceled) {
                     Logging.info("Note upload interrupted by user");
@@ -74,7 +81,8 @@
                     if (comment.isNew()) {
                         Logging.debug("found note change to upload");
-                        processNoteComment(monitor, api, note, comment);
+                        processNoteComment(getProgressMonitor(), api, note, comment);
                     }
                 }
+                getProgressMonitor().worked(1);
             }
         }
