Index: pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDResources.java
===================================================================
--- pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDResources.java	(revision 1668559)
+++ pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDResources.java	(working copy)
@@ -18,6 +18,7 @@
 
 import java.io.IOException;
 import java.util.Collections;
+import java.util.HashMap;
 
 import org.apache.pdfbox.cos.COSBase;
 import org.apache.pdfbox.cos.COSDictionary;
@@ -31,6 +32,7 @@
 import org.apache.pdfbox.pdmodel.graphics.optionalcontent.PDOptionalContentGroup;
 import org.apache.pdfbox.pdmodel.graphics.state.PDExtendedGraphicsState;
 import org.apache.pdfbox.pdmodel.graphics.color.PDColorSpace;
+import org.apache.pdfbox.pdmodel.graphics.color.PDICCBased;
 import org.apache.pdfbox.pdmodel.graphics.pattern.PDAbstractPattern;
 import org.apache.pdfbox.pdmodel.graphics.shading.PDShading;
 import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject;
@@ -45,6 +47,7 @@
 public final class PDResources implements COSObjectable
 {
     private final COSDictionary resources;
+    private final HashMap<COSName, PDColorSpace> colorSpaceCache = new HashMap();
 
     /**
      * Constructor for embedding.
@@ -92,22 +95,28 @@
         }
         return PDFontFactory.createFont(dict);
     }
-
+    
     /**
      * Returns the color space resource with the given name, or null if none exists.
      */
     public PDColorSpace getColorSpace(COSName name) throws IOException
     {
+        PDColorSpace result = colorSpaceCache.get(name);
+        if(result != null) {
+            return result;
+        }
         // get the instance
         COSBase object = get(COSName.COLORSPACE, name);
         if (object != null)
         {
-            return PDColorSpace.create(object, this);
+            result = PDColorSpace.create(object, this);
         }
         else
         {
-            return PDColorSpace.create(name, this);
+            result = PDColorSpace.create(name, this);
         }
+        colorSpaceCache.put(name, result);
+        return result;
     }
 
     /**
