     return unless @getNeedsStagingBitmap() || cacheDrawArea.size.area <= 2048 * 1536
 
     @_drawCacheToElementMatrix = Matrix.translateXY(-drawArea.x, -drawArea.y).scale(pixelsPerPoint).inv
+    @_elementToDrawCacheMatrix = @_drawCacheToElementMatrix.inv
 
     try
       # disable draw-caching for children
       Element._cachingDraws++
 
+      # stats
+      stats.stagingBitmapsCreated++
       globalEpochCycle.logEvent "generateDrawCache", @uniqueId
-      @_drawCacheBitmap = @_renderStagingBitmap cacheDrawArea, Matrix.scale(pixelsPerPoint), drawCacheManager.allocateCacheBitmap @, cacheDrawArea.size
+
+      @_drawCacheBitmap = stagingBitmap = drawCacheManager.allocateCacheBitmap @, cacheDrawArea.size
+
+      @_currentDrawTarget = @_drawCacheBitmap
+      @_currentToTargetMatrix = @_elementToDrawCacheMatrix
+
+      if @getHasCustomClipping()
+        @_drawWithClipping null, @_drawCacheBitmap, @_elementToDrawCacheMatrix
+      else
+        @_drawChildren @_drawCacheBitmap, @_elementToDrawCacheMatrix, true
+
     finally
       Element._cachingDraws--
 

  ###

  _resetDrawCache: ->
    @_drawCacheBitmap = null
    @_drawCacheToElementMatrix = null

  _drawPropertiesChanged: ->
    @_clearDrawCache()

      child.draw target, child.getElementToTargetMatrix elementToTargetMatrix
    @children # without this, coffeescript returns a new array

  # TODO - use new filterSource stuff
  _accountForOverdraw: (proposedTargetSpaceDrawArea, elementToTargetMatrix) ->
    for child in @children when child.overDraw
