Index: /trunk/src/org/openstreetmap/josm/tools/ImageResource.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/tools/ImageResource.java	(revision 16925)
+++ /trunk/src/org/openstreetmap/josm/tools/ImageResource.java	(revision 16926)
@@ -297,4 +297,10 @@
      */
     public ImageIcon getPaddedIcon(Dimension iconSize) {
+        final ImageIcon imageIcon = getImageIcon(iconSize);
+        if (imageIcon.getIconWidth() == iconSize.width && imageIcon.getIconHeight() == iconSize.height) {
+            // fast path for square and svg icons
+            return imageIcon;
+        }
+
         final Dimension cacheKey = new Dimension(-iconSize.width, -iconSize.height); // use negative width/height for differentiation
         BufferedImage image = imgCache.get(cacheKey);
Index: /trunk/test/unit/org/openstreetmap/josm/tools/OsmPrimitiveImageProviderTest.java
===================================================================
--- /trunk/test/unit/org/openstreetmap/josm/tools/OsmPrimitiveImageProviderTest.java	(revision 16925)
+++ /trunk/test/unit/org/openstreetmap/josm/tools/OsmPrimitiveImageProviderTest.java	(revision 16926)
@@ -17,6 +17,9 @@
 import java.util.EnumSet;
 
+import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
+
+import javax.swing.ImageIcon;
 
 /**
@@ -58,4 +61,10 @@
         assertNotNull(OsmPrimitiveImageProvider.getResource(OsmUtils.createPrimitive("way waterway=stream"), noDefault));
         assertNotNull(OsmPrimitiveImageProvider.getResource(OsmUtils.createPrimitive("relation type=route route=railway"), noDefault));
+        // a non-square svg icon
+        final ImageIcon bankIcon = OsmPrimitiveImageProvider
+                .getResource(OsmUtils.createPrimitive("node amenity=bank"), Options.DEFAULT)
+                .getPaddedIcon(ImageProvider.ImageSizes.LARGEICON.getImageDimension());
+        assertEquals(ImageProvider.ImageSizes.LARGEICON.getVirtualWidth(), bankIcon.getIconWidth());
+        assertEquals(ImageProvider.ImageSizes.LARGEICON.getVirtualHeight(), bankIcon.getIconHeight());
     }
 }
