       targetSpaceDrawArea = @drawAreaIn(elementToTargetMatrix).intersection target.getClippingArea()
       return unless targetSpaceDrawArea.area > 0
 
-      @_cachedFullDraw targetSpaceDrawArea, target, elementToTargetMatrix
+      if @getCacheDrawRequired()
+        @_cachedFullDraw targetSpaceDrawArea, target, elementToTargetMatrix
+      else
+        @_clearDrawCache()
+        if @_clip then  @_clipDraw targetSpaceDrawArea, target, elementToTargetMatrix
+        else            @_drawChildren target, elementToTargetMatrix
+
     finally
       @_currentDrawTarget = @_currentToTargetMatrix = null
 

    # override this for elements which are faster w/o caching (RectangleElement, BitmapElement)
    cacheable: -> true

  _generateDrawCacheIfNeeded: ->
    if @getCacheDrawRequired()
      @_generateDrawCache() unless @getCacheIsValid()
    else
      @_clearDrawCache()

  _cachedFullDraw: (targetSpaceDrawArea, target, elementToTargetMatrix) ->

    @_generateDrawCacheIfNeeded()

    if @getCacheIsValid()
      drawCacheManager.useDrawCache @
      drawCacheToTargetMatrix = @_drawCacheToElementMatrix.mul elementToTargetMatrix
      target.drawBitmap drawCacheToTargetMatrix, @_drawCacheBitmap,
        opacity:        @opacity
        compositeMode:  @compositeMode
    else
      @_fullDraw targetSpaceDrawArea, target, elementToTargetMatrix

  _generateDrawCache: ->


    stagingBitmap = @_renderStagingBitmap rect(0, 0, @_currentSize.x * s.x, @_currentSize.y * s.y), m = Matrix.scale s
    target.drawBitmap m.inv.mul(elementToTargetMatrix), stagingBitmap, compositeMode:@_compositeMode, opacity: @opacity

  _clipDraw: (clipArea, target, elementToTargetMatrix)->
    if !elementToTargetMatrix.getIsTranslateAndScaleOnly() || @needsStagingBitmap
      @_clippedDrawWithStagingBitmapInElementSpace target, elementToTargetMatrix
