Index: src/org/openstreetmap/josm/tools/ImageProvider.java
===================================================================
--- src/org/openstreetmap/josm/tools/ImageProvider.java	(revision 16792)
+++ src/org/openstreetmap/josm/tools/ImageProvider.java	(working copy)
@@ -1600,7 +1600,7 @@
         if (primitive.isTagged() && (!options.contains(GetPaddedOptions.NO_WAY_PRESETS) || OsmPrimitiveType.WAY != primitive.getType())) {
             final Optional<ImageIcon> icon = TaggingPresets.getMatchingPresets(primitive).stream()
                     .sorted(Comparator.comparing(p ->
-                            p.iconName.contains("multipolygon") || p.types == null || p.types.isEmpty() ? Integer.MAX_VALUE : p.types.size()))
+                            p.iconName != null && p.iconName.contains("multipolygon") || p.types == null || p.types.isEmpty() ? Integer.MAX_VALUE : p.types.size()))
                     .map(TaggingPreset::getImageResource)
                     .filter(Objects::nonNull)
                     .map(resource -> resource.getPaddedIcon(iconSize))
Index: test/unit/org/openstreetmap/josm/tools/ImageProviderTest.java
===================================================================
--- test/unit/org/openstreetmap/josm/tools/ImageProviderTest.java	(revision 16792)
+++ test/unit/org/openstreetmap/josm/tools/ImageProviderTest.java	(working copy)
@@ -6,12 +6,13 @@
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
 
 import java.awt.Color;
 import java.awt.Dimension;
+import java.awt.Graphics;
 import java.awt.GraphicsEnvironment;
 import java.awt.GridLayout;
-import java.awt.Graphics;
 import java.awt.Image;
 import java.awt.Point;
 import java.awt.Toolkit;
@@ -21,6 +22,8 @@
 import java.awt.image.BufferedImage;
 import java.io.File;
 import java.io.IOException;
+import java.util.Arrays;
+import java.util.Collections;
 import java.util.List;
 import java.util.logging.Handler;
 import java.util.logging.LogRecord;
@@ -37,7 +40,13 @@
 import org.junit.Test;
 import org.openstreetmap.josm.JOSMFixture;
 import org.openstreetmap.josm.TestUtils;
+import org.openstreetmap.josm.data.coor.LatLon;
+import org.openstreetmap.josm.data.osm.Node;
+import org.openstreetmap.josm.gui.tagging.presets.TaggingPreset;
+import org.openstreetmap.josm.gui.tagging.presets.TaggingPresets;
+import org.openstreetmap.josm.gui.tagging.presets.items.Key;
 import org.openstreetmap.josm.testutils.JOSMTestRules;
+import org.xml.sax.SAXException;
 
 import com.kitfox.svg.SVGConst;
 
@@ -47,7 +56,7 @@
  * Unit tests of {@link ImageProvider} class.
  */
 public class ImageProviderTest {
-    
+
     /**
      * Setup test.
      */
@@ -128,6 +137,28 @@
     }
 
     /**
+     * Non-regression test for ticket <a href="https://josm.openstreetmap.de/ticket/19551">#19551</a>
+     * @throws SAXException If the type cannot be set (shouldn't throw)
+     */
+    @Test
+    public void testTicket19551() throws SAXException {
+        TaggingPreset badPreset = new TaggingPreset();
+        badPreset.setType("node,way,relation,closedway");
+        Key key = new Key();
+        key.key = "amenity";
+        key.value = "fuel";
+        badPreset.data.add(key);
+        TaggingPreset goodPreset = new TaggingPreset();
+        goodPreset.setType("node,way,relation,closedway");
+        goodPreset.data.add(key);
+        goodPreset.iconName = "stop";
+        TaggingPresets.addTaggingPresets(Arrays.asList(goodPreset, badPreset));
+        Node node = new Node(LatLon.ZERO);
+        node.put("amenity", "fuel");
+        assertDoesNotThrow(() -> ImageProvider.getPadded(node, ImageProvider.ImageSizes.MAP.getImageDimension(), Collections.emptyList()));
+    }
+
+    /**
      * Test fetching an image using {@code wiki://} protocol.
      */
     @Test
