Index: trunk/src/org/openstreetmap/josm/gui/tagging/TaggingPreset.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/tagging/TaggingPreset.java	(revision 7531)
+++ trunk/src/org/openstreetmap/josm/gui/tagging/TaggingPreset.java	(revision 7532)
@@ -220,5 +220,5 @@
         }
         if (preset_name_label) {
-            TaggingPresetItems.Label.addLabel(p, getName());
+            TaggingPresetItems.Label.addLabel(p, getIcon(), getName());
         }
 
@@ -374,5 +374,5 @@
             }
 
-            answer = new PresetDialog(p, title, (ImageIcon) getValue(Action.SMALL_ICON),
+            answer = new PresetDialog(p, title, preset_name_label ? null : (ImageIcon) getValue(Action.SMALL_ICON),
                     sel.isEmpty(), showNewRelation).getValue();
         }
Index: trunk/src/org/openstreetmap/josm/gui/tagging/TaggingPresetItems.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/tagging/TaggingPresetItems.java	(revision 7531)
+++ trunk/src/org/openstreetmap/josm/gui/tagging/TaggingPresetItems.java	(revision 7532)
@@ -32,4 +32,5 @@
 
 import javax.swing.ButtonGroup;
+import javax.swing.Icon;
 import javax.swing.ImageIcon;
 import javax.swing.JButton;
@@ -91,5 +92,7 @@
         public String display_value;
         public String short_description;
+        /** The location of icon file to display */
         public String icon;
+        /** The size of displayed icon. If not set, default is size from icon file */
         public String icon_size;
         /** The localized version of {@link #display_value}. */
@@ -128,15 +131,4 @@
         public ImageIcon getIcon() {
             return icon == null ? null : loadImageIcon(icon, zipIcons, parseInteger(icon_size));
-        }
-
-        private Integer parseInteger(String str) {
-            if (str == null || str.isEmpty())
-                return null;
-            try {
-                return Integer.parseInt(str);
-            } catch (Exception e) {
-                //
-            }
-            return null;
         }
 
@@ -357,8 +349,13 @@
     public static class Label extends TaggingPresetTextItem {
 
+        /** The location of icon file to display (optional) */
+        public String icon;
+        /** The size of displayed icon. If not set, default is 16px */
+        public String icon_size;
+
         @Override
         public boolean addToPanel(JPanel p, Collection<OsmPrimitive> sel, boolean presetInitiallyMatches) {
             initializeLocaleText(null);
-            addLabel(p, locale_text);
+            addLabel(p, getIcon(), locale_text);
             return true;
         }
@@ -367,8 +364,18 @@
          * Adds a new {@code JLabel} to the given panel.
          * @param p The panel
+         * @param icon the icon (optional, can be null)
          * @param label The text label
          */
-        public static void addLabel(JPanel p, String label) {
-            p.add(new JLabel(label), GBC.eol().fill(GBC.HORIZONTAL));
+        public static void addLabel(JPanel p, Icon icon, String label) {
+            p.add(new JLabel(label, icon, JLabel.LEADING), GBC.eol().fill(GBC.HORIZONTAL));
+        }
+
+        /**
+         * Returns the label icon, if any.
+         * @return the label icon, or {@code null}
+         */
+        public ImageIcon getIcon() {
+            Integer size = parseInteger(icon_size);
+            return icon == null ? null : loadImageIcon(icon, TaggingPresetReader.getZipIcons(), size != null ? size : 16);
         }
     }
@@ -1507,3 +1514,16 @@
         return imgProv.get();
     }
+
+    protected static Integer parseInteger(String str) {
+        if (str == null || str.isEmpty())
+            return null;
+        try {
+            return Integer.parseInt(str);
+        } catch (Exception e) {
+            if (Main.isTraceEnabled()) {
+                Main.trace(e.getMessage());
+            }
+        }
+        return null;
+    }
 }
