Index: /src/org/openstreetmap/josm/gui/annotation/AnnotationPreset.java
===================================================================
--- /src/org/openstreetmap/josm/gui/annotation/AnnotationPreset.java	(revision 254)
+++ /src/org/openstreetmap/josm/gui/annotation/AnnotationPreset.java	(revision 255)
@@ -35,4 +35,5 @@
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.tools.GBC;
+import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.tools.XmlObjectParser;
 import org.xml.sax.SAXException;
@@ -54,5 +55,5 @@
 		boolean requestFocusInWindow() {return false;}
 	}
-	
+
 	public static class Text extends Item {
 		public String key;
@@ -81,5 +82,5 @@
 		public String text;
 		public boolean default_ = false;
-		
+
 		private JCheckBox check = new JCheckBox();
 
@@ -143,7 +144,7 @@
 
 	/**
-     * The types as preparsed collection.
-     */
-    public Collection<Class<?>> types;
+	 * The types as preparsed collection.
+	 */
+	public Collection<Class<?>> types;
 	private List<Item> data = new LinkedList<Item>();
 
@@ -166,8 +167,13 @@
 	 * Called from the XML parser to set the icon
 	 */
-	public void setIcon(String icon) {
-		putValue(Action.SMALL_ICON, new ImageIcon(new ImageIcon(icon).getImage().getScaledInstance(24, 24, Image.SCALE_SMOOTH)));
-	}
-	
+	public void setIcon(String iconName) {
+		ImageIcon icon = ImageProvider.getIfAvailable(null, iconName);
+		if (icon == null)
+			icon = new ImageIcon(iconName);
+		if (Math.max(icon.getIconHeight(), icon.getIconWidth()) != 24)
+			icon = new ImageIcon(icon.getImage().getScaledInstance(24, 24, Image.SCALE_SMOOTH));
+		putValue(Action.SMALL_ICON, icon);
+	}
+
 	/**
 	 * Called from the XML parser to set the types, this preset affects
@@ -186,5 +192,5 @@
 		}
 	}
-	
+
 	public static List<AnnotationPreset> readAll(InputStream inStream) throws SAXException {
 		BufferedReader in = null;
Index: /src/org/openstreetmap/josm/tools/ImageProvider.java
===================================================================
--- /src/org/openstreetmap/josm/tools/ImageProvider.java	(revision 254)
+++ /src/org/openstreetmap/josm/tools/ImageProvider.java	(revision 255)
@@ -69,5 +69,7 @@
 		if (name == null)
 			return null;
-		if (subdir == null || subdir != "")
+		if (subdir == null)
+			subdir = "";
+		else
 			subdir += "/";
 		String ext = name.indexOf('.') != -1 ? "" : ".png";
Index: /test/org/openstreetmap/josm/gui/annotation/AnnotationPresetTest.java
===================================================================
--- /test/org/openstreetmap/josm/gui/annotation/AnnotationPresetTest.java	(revision 254)
+++ /test/org/openstreetmap/josm/gui/annotation/AnnotationPresetTest.java	(revision 255)
@@ -1,4 +1,5 @@
 package org.openstreetmap.josm.gui.annotation;
 
+import java.io.ByteArrayInputStream;
 import java.io.InputStream;
 import java.lang.reflect.Field;
@@ -6,4 +7,5 @@
 
 import javax.swing.Action;
+import javax.swing.Icon;
 
 import junit.framework.TestCase;
@@ -14,4 +16,5 @@
 import org.openstreetmap.josm.gui.annotation.AnnotationPreset.Label;
 import org.openstreetmap.josm.gui.annotation.AnnotationPreset.Text;
+import org.openstreetmap.josm.tools.ImageProvider;
 
 public class AnnotationPresetTest extends TestCase {
@@ -55,3 +58,15 @@
 		assertEquals("highway", key.value);
 	}
+	
+	public void testIconLoadsFromClasspath() throws Exception {
+		String xml = "<annotations><item icon='logo'></item></annotations>";
+		List<AnnotationPreset> all = AnnotationPreset.readAll(new ByteArrayInputStream(xml.getBytes()));
+
+		assertEquals(1, all.size());
+
+		Icon icon = (Icon)all.get(0).getValue(Action.SMALL_ICON);
+		assertNotNull(icon);
+		assertEquals("Icon loaded and of correct size", 
+				24, Math.max(icon.getIconHeight(), icon.getIconWidth()));
+    }
 }
