       targetSpaceDrawArea = @drawAreaIn(elementToTargetMatrix).intersection target.getClippingArea()
       return unless targetSpaceDrawArea.area > 0
 
-      if @getCacheDrawRequired()
+      if @getCacheDrawRequired elementToTargetMatrix
         @_cachedFullDraw targetSpaceDrawArea, target, elementToTargetMatrix
       else
         @_clearDrawCache()

      @_clipDraw null, stagingBitmap, elementToTargetMatrix
    else
      @_drawChildren stagingBitmap, elementToTargetMatrix, true

    # log _renderStagingBitmap:
    #   element: @inspectedName
    #   targetSpaceDrawArea:targetSpaceDrawArea
    #   elementToTargetMatrix: elementToTargetMatrix
    #   stagingBitmap: stagingBitmap

    stagingBitmap


      proposedTargetSpaceDrawArea = child.overDraw proposedTargetSpaceDrawArea, elementToTargetMatrix
    proposedTargetSpaceDrawArea

  # OVERRIDE _clipDraw AND hasCustomClipping for custom clipping (RectangleElement, for example)
  _clipDraw: (clipArea, target, elementToTargetMatrix)->
    throw new Error "bad matrix" unless elementToTargetMatrix.getIsTranslateAndScaleOnly()
    target.clippedTo clipArea, =>
      @_drawChildren target, elementToTargetMatrix

  @getter
    hasCustomClipping: -> false

  draw: (target, elementToTargetMatrix)->
    stats.elementsDrawn++
