CGLayer is a Tiger (and beyond) feature that will cache Quartz operations. Kind of like a PICT for CG. Make a new layer based on the context you're going to be drawing it in, then get a context from the layer, and draw into that. So something like this:- (void) makeLayerInContext: (CGContextRef) enclosingContext { layer = CGLayerCreateWithContext (enclosingContext, CGSizeMake(100, 100), NULL); // options - unused in Tiger CGContextRef context; context = CGLayerGetContext (layer); // .. and do your drawing } // makeLayerAnd then to draw the layer at a particular point (like replicating it a bunch of different points as done here):for (i = 0; i < pointCount; i++) { CGContextDrawLayerAtPoint (context, locations[i], layer); }