diff --git a/src/org/openstreetmap/josm/tools/ImageProvider.java b/src/org/openstreetmap/josm/tools/ImageProvider.java
index 39678d6..f7e6046 100644
--- a/src/org/openstreetmap/josm/tools/ImageProvider.java
+++ b/src/org/openstreetmap/josm/tools/ImageProvider.java
@@ -1,6 +1,9 @@
 // License: GPL. Copyright 2007 by Immanuel Scholz and others
 package org.openstreetmap.josm.tools;
 
+import java.util.Enumeration;
+import java.util.logging.Level;
+import java.util.logging.Logger;
 import static org.openstreetmap.josm.tools.I18n.tr;
 
 import java.awt.Component;
@@ -48,6 +51,9 @@ import org.xml.sax.helpers.XMLReaderFactory;
 import com.kitfox.svg.SVGDiagram;
 import com.kitfox.svg.SVGException;
 import com.kitfox.svg.SVGUniverse;
+import java.io.BufferedInputStream;
+import java.io.FileInputStream;
+import java.util.zip.ZipInputStream;
 
 /**
  * Helper class to support the application with images.
@@ -147,15 +153,66 @@ public class ImageProvider {
      *                  around certain issues.
      */
     public static ImageIcon getIfAvailable(Collection<String> dirs, String id, String subdir, String name, File archive, Dimension dim, boolean sanitize) {
+        ImageIcon fromZip = zipImages.get("images/" + name);
+        if (fromZip != null) {
+            return fromZip;
+        }
+
         ImageResource ir = getIfAvailableImpl(dirs, id, subdir, name, archive);
         if (ir == null)
             return null;
         return ir.getImageIcon(dim == null ? ImageResource.DEFAULT_DIMENSION : dim, sanitize);
     }
 
+    private static class ZipImages {
+        private String filename;
+        private Map<String, ImageIcon> icons = new HashMap<String, ImageIcon>();
+
+        public ZipImages(String filename) {
+            this.filename = filename;
+            try {
+                init();
+            } catch (IOException ex) {
+                ex.printStackTrace();
+            }
+            System.out.println(icons.keySet());
+        }
+
+        private void init() throws IOException {
+            ZipInputStream zis = new ZipInputStream(new BufferedInputStream(new FileInputStream(filename)));
+            ZipEntry entry;
+            while ((entry = zis.getNextEntry()) != null) {
+                if (entry.isDirectory()) {
+                    continue;
+                }
+                String name = entry.getName();
+                int size = (int) entry.getSize();
+                byte[] b = new byte[size];
+                int rb = 0;
+                int chunk = 0;
+                while ((size - rb) > 0) {
+                    chunk = zis.read(b, rb, size - rb);
+                    if (chunk == -1) {
+                        break;
+                    }
+                    rb += chunk;
+                }
+                ImageIcon icon = new ImageIcon(b);
+                icons.put(name, icon);
+            }
+        }
+
+        public ImageIcon get(String name) {
+            return icons.get(name);
+        }
+    }
+
+    private static final ZipImages zipImages = new ZipImages("/home/simon/src/josm.git/images.zip");
+
     private static ImageResource getIfAvailableImpl(Collection<String> dirs, String id, String subdir, String name, File archive) {
         if (name == null)
             return null;
+
         ImageType type = name.toLowerCase().endsWith(".svg") ? ImageType.SVG : ImageType.OTHER;
 
         if (name.startsWith("http://")) {
