diff --git a/src/org/openstreetmap/josm/gui/tagging/presets/items/PresetListEntry.java b/src/org/openstreetmap/josm/gui/tagging/presets/items/PresetListEntry.java
index ef5dc6e66b..17b2d0815e 100644
--- a/src/org/openstreetmap/josm/gui/tagging/presets/items/PresetListEntry.java
+++ b/src/org/openstreetmap/josm/gui/tagging/presets/items/PresetListEntry.java
@@ -188,7 +188,7 @@ public class PresetListEntry implements Comparable<PresetListEntry> {
      * @return see above
      */
     public int getCount() {
-        Integer count = cms == null ? null : cms.usage.map.get(value);
+        Integer count = cms == null || cms.usage == null ? null : cms.usage.map.get(value);
         return count == null ? 0 : count;
     }
 
diff --git a/test/unit/org/openstreetmap/josm/gui/tagging/presets/items/PresetListEntryTest.java b/test/unit/org/openstreetmap/josm/gui/tagging/presets/items/PresetListEntryTest.java
index 1c2827878c..0555ba6ca1 100644
--- a/test/unit/org/openstreetmap/josm/gui/tagging/presets/items/PresetListEntryTest.java
+++ b/test/unit/org/openstreetmap/josm/gui/tagging/presets/items/PresetListEntryTest.java
@@ -1,6 +1,7 @@
 // License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.gui.tagging.presets.items;
 
+import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import org.junit.jupiter.api.BeforeAll;
@@ -27,4 +28,13 @@ class PresetListEntryTest {
     void testTicket12416() {
         assertTrue(new PresetListEntry("", null).getListDisplay(200).contains(" "));
     }
+
+    /**
+     * Non-regression test for ticket <a href="https://josm.openstreetmap.de/ticket/21550">#21550</a>
+     */
+    @Test
+    void testTicket21550() {
+        final PresetListEntry entry = new PresetListEntry("", new Combo());
+        assertDoesNotThrow(entry::getCount);
+    }
 }
