Index: /trunk/src/org/openstreetmap/josm/gui/widgets/TextContextualPopupMenu.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/widgets/TextContextualPopupMenu.java	(revision 13964)
+++ /trunk/src/org/openstreetmap/josm/gui/widgets/TextContextualPopupMenu.java	(revision 13965)
@@ -8,4 +8,6 @@
 import java.awt.event.KeyEvent;
 import java.beans.PropertyChangeListener;
+import java.util.HashMap;
+import java.util.Map;
 
 import javax.swing.AbstractAction;
@@ -44,4 +46,11 @@
     private static final String EDITABLE = "editable";
 
+    private static final Map<String, ImageIcon> iconCache = new HashMap<>();
+
+    private static ImageIcon loadIcon(String iconName) {
+        return iconCache.computeIfAbsent(iconName,
+                x -> new ImageProvider(iconName).setOptional(true).setSize(ImageProvider.ImageSizes.SMALLICON).get());
+    }
+
     protected JTextComponent component;
     protected boolean undoRedo;
@@ -173,5 +182,5 @@
             mi.setText(label);
             if (iconName != null && Config.getPref().getBoolean("text.popupmenu.useicons", true)) {
-                ImageIcon icon = new ImageProvider(iconName).setOptional(true).setSize(ImageProvider.ImageSizes.SMALLICON).get();
+                ImageIcon icon = loadIcon(iconName);
                 if (icon != null) {
                     mi.setIcon(icon);
