Index: /trunk/src/org/openstreetmap/josm/data/notes/Note.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/notes/Note.java	(revision 17836)
+++ /trunk/src/org/openstreetmap/josm/data/notes/Note.java	(revision 17837)
@@ -53,13 +53,9 @@
 
     /** Sorts notes by user, then creation date */
-    public static final Comparator<Note> USER_COMPARATOR = (n1, n2) -> {
-        String n1User = n1.getFirstComment().getUser().getName();
-        String n2User = n2.getFirstComment().getUser().getName();
-        return n1User.equals(n2User) ? DATE_COMPARATOR.compare(n1, n2) : n1User.compareTo(n2User);
-    };
+    public static final Comparator<Note> USER_COMPARATOR =
+            Comparator.comparing(Note::getUserName, Comparator.nullsLast(Comparator.naturalOrder())).thenComparing(DATE_COMPARATOR);
 
     /** Sorts notes by the last modified date */
-    public static final Comparator<Note> LAST_ACTION_COMPARATOR =
-            (n1, n2) -> NoteComment.DATE_COMPARATOR.compare(n1.getLastComment(), n2.getLastComment());
+    public static final Comparator<Note> LAST_ACTION_COMPARATOR = Comparator.comparing(Note::getLastComment, NoteComment.DATE_COMPARATOR);
 
     private long id;
@@ -181,4 +177,8 @@
     public NoteComment getFirstComment() {
         return comments.isEmpty() ? null : comments.get(0);
+    }
+
+    private String getUserName() {
+        return getFirstComment() == null ? null : getFirstComment().getUser().getName();
     }
 
Index: /trunk/src/org/openstreetmap/josm/data/notes/NoteComment.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/notes/NoteComment.java	(revision 17836)
+++ /trunk/src/org/openstreetmap/josm/data/notes/NoteComment.java	(revision 17837)
@@ -40,5 +40,5 @@
 
     /** Sorts note comments strictly by creation date */
-    public static final Comparator<NoteComment> DATE_COMPARATOR = Comparator.comparing(n -> n.commentTimestamp);
+    public static final Comparator<NoteComment> DATE_COMPARATOR = Comparator.nullsLast(Comparator.comparing(n -> n.commentTimestamp));
 
     /**
Index: /trunk/test/unit/org/openstreetmap/josm/data/notes/NoteTest.java
===================================================================
--- /trunk/test/unit/org/openstreetmap/josm/data/notes/NoteTest.java	(revision 17836)
+++ /trunk/test/unit/org/openstreetmap/josm/data/notes/NoteTest.java	(revision 17837)
@@ -6,4 +6,5 @@
 
 import java.time.Instant;
+import java.util.List;
 
 import org.junit.jupiter.api.extension.RegisterExtension;
@@ -11,4 +12,5 @@
 import org.openstreetmap.josm.TestUtils;
 import org.openstreetmap.josm.data.coor.LatLon;
+import org.openstreetmap.josm.io.NoteReader;
 import org.openstreetmap.josm.testutils.JOSMTestRules;
 
@@ -69,3 +71,54 @@
             .verify();
     }
+
+    @Test
+    void testSorting() throws Exception {
+        List<Note> list = new NoteReader("" +
+                "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
+                "<osm version=\"0.6\" generator=\"OpenStreetMap server\">\n" +
+                "<note lon=\"68.86415\" lat=\"36.7232991\">\n"+
+                "  <id>4</id>\n"+
+                "  <url>http://api.openstreetmap.org/api/0.6/notes/4</url>\n"+
+                "  <reopen_url>http://api.openstreetmap.org/api/0.6/notes/4/reopen</reopen_url>\n"+
+                "  <date_created>2013-04-24 08:07:02 UTC</date_created>\n"+
+                "  <status>closed</status>\n"+
+                "  <date_closed>2013-04-24 08:08:51 UTC</date_closed>\n"+
+                "  <comments>\n"+
+                "    <comment>\n"+
+                "      <date>2013-04-24 08:07:02 UTC</date>\n"+
+                "      <uid>1626</uid>\n"+
+                "      <user>FredB</user>\n"+
+                "      <user_url>http://www.openstreetmap.org/user/FredB</user_url>\n"+
+                "      <action>opened</action>\n"+
+                "      <text>test</text>\n"+
+                "      <html>&lt;p&gt;test&lt;/p&gt;</html>\n"+
+                "    </comment>\n"+
+                "    <comment>\n"+
+                "      <date>2013-04-24 08:08:51 UTC</date>\n"+
+                "      <uid>1626</uid>\n"+
+                "      <user>FredB</user>\n"+
+                "      <user_url>http://www.openstreetmap.org/user/FredB</user_url>\n"+
+                "      <action>closed</action>\n"+
+                "      <text></text>\n"+
+                "      <html>&lt;p&gt;&lt;/p&gt;</html>\n"+
+                "    </comment>\n"+
+                "  </comments>\n"+
+                "</note>\n"+
+                "<note lon=\"23.2663071\" lat=\"50.7173607\">\n" +
+                "  <id>1396945</id>\n" +
+                "  <url>https://www.openstreetmap.org/api/0.6/notes/1396945</url>\n" +
+                "  <comment_url>https://www.openstreetmap.org/api/0.6/notes/1396945/comment</comment_url>\n" +
+                "  <close_url>https://www.openstreetmap.org/api/0.6/notes/1396945/close</close_url>\n" +
+                "  <date_created>2018-05-17 15:41:06 UTC</date_created>\n" +
+                "  <status>open</status>\n" +
+                "  <comments>\n" +
+                "  </comments>\n" +
+                "</note>\n" +
+                "</osm>\n").parse();
+        // Non-regression test for ticket #20824
+        list.sort(Note.DATE_COMPARATOR);
+        list.sort(Note.DEFAULT_COMPARATOR);
+        list.sort(Note.LAST_ACTION_COMPARATOR);
+        list.sort(Note.USER_COMPARATOR);
+    }
 }
