Index: trunk/src/org/openstreetmap/josm/tools/ImageProvider.java
===================================================================
--- trunk/src/org/openstreetmap/josm/tools/ImageProvider.java	(revision 4960)
+++ trunk/src/org/openstreetmap/josm/tools/ImageProvider.java	(revision 4961)
@@ -279,5 +279,7 @@
                         return new ImageResource(getSvgUniverse().getDiagram(uri));
                     } else {
-                        return new ImageResource(new ImageIcon(bytes).getImage());
+                        try {
+                            return new ImageResource(ImageIO.read(new ByteArrayInputStream(bytes)));
+                        } catch (IOException e) {}
                     }
                 }
@@ -751,5 +753,5 @@
     }
 
-    public static Image createImageFromSvg(SVGDiagram svg, Dimension dim) {
+    public static BufferedImage createImageFromSvg(SVGDiagram svg, Dimension dim) {
         float realWidth = svg.getWidth();
         float realHeight = svg.getHeight();
@@ -772,6 +774,6 @@
             width = (int) Math.round(realWidth * scaleX);
         }
-        Image img = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
-        Graphics2D g = ((BufferedImage) img).createGraphics();
+        BufferedImage img = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
+        Graphics2D g = img.createGraphics();
         g.setClip(0, 0, width, height);
         if (scaleX != null) {
Index: trunk/src/org/openstreetmap/josm/tools/ImageResource.java
===================================================================
--- trunk/src/org/openstreetmap/josm/tools/ImageResource.java	(revision 4960)
+++ trunk/src/org/openstreetmap/josm/tools/ImageResource.java	(revision 4961)
@@ -22,9 +22,9 @@
      * Caches the image data for resized versions of the same image.
      */
-    private HashMap<Dimension, Image> imgCache = new HashMap<Dimension, Image>();
+    private HashMap<Dimension, BufferedImage> imgCache = new HashMap<Dimension, BufferedImage>();
     private SVGDiagram svg;
     public static final Dimension DEFAULT_DIMENSION = new Dimension(-1, -1);
  
-    public ImageResource(Image img) {
+    public ImageResource(BufferedImage img) {
         CheckParameterUtil.ensureParameterNotNull(img);
         imgCache.put(DEFAULT_DIMENSION, img);
@@ -49,5 +49,5 @@
         if (dim.width < -1 || dim.width == 0 || dim.height < -1 || dim.height == 0)
             throw new IllegalArgumentException();
-        Image img = imgCache.get(dim);
+        BufferedImage img = imgCache.get(dim);
         if (img != null) {
             return new ImageIcon(img);
@@ -58,5 +58,5 @@
             return new ImageIcon(img);
         } else {
-            Image base = imgCache.get(DEFAULT_DIMENSION);
+            BufferedImage base = imgCache.get(DEFAULT_DIMENSION);
             if (base == null) throw new AssertionError();
             
@@ -69,5 +69,7 @@
                 height = icon.getIconHeight() * width / icon.getIconWidth();
             }
-            img = icon.getImage().getScaledInstance(width, height, Image.SCALE_SMOOTH);
+            Image i = icon.getImage().getScaledInstance(width, height, Image.SCALE_SMOOTH);
+            img = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
+            img.getGraphics().drawImage(i, 0, 0, null);
             imgCache.put(dim, img);
             return new ImageIcon(img);
@@ -91,5 +93,5 @@
             realHeight = svg.getHeight();
         } else {
-            Image base = imgCache.get(DEFAULT_DIMENSION);
+            BufferedImage base = imgCache.get(DEFAULT_DIMENSION);
             if (base == null) throw new AssertionError();
             ImageIcon icon = new ImageIcon(base);
