       # Skip some frame updates unless we're playing and not at end (or we haven't drawn much yet)
       frameAdvanced = (@playing and @currentFrame < lastFrame) or @totalFramesDrawn < 2
       if frameAdvanced and @playing
-        @currentFrame += @world.frameRate / @options.frameRate
+        advanceBy = @world.frameRate / @options.frameRate
+        if @fastForwardingToFrame and @currentFrame < @fastForwardingToFrame - advanceBy
+          advanceBy = Math.min(@currentFrame + advanceBy * @fastForwardingSpeed, @fastForwardingToFrame) - @currentFrame
+        else if @fastForwardingToFrame
+          @fastForwardingToFrame = @fastForwardingSpeed = null
+        @currentFrame += advanceBy
         @currentFrame = Math.min @currentFrame, lastFrame
       newWorldFrame = Math.floor @currentFrame
       worldFrameAdvanced = newWorldFrame isnt oldWorldFrame


    @setWorld event.world
    @onFrameChanged(true)
    if @playing and ffToFrame = Math.min event.firstChangedFrame, @frameBeforeCast, event.world.frames.length
      ffToRatio = ffToFrame / @world.frames.length
      ffToTime = ffToFrame * @world.dt
      ffSpeed = Math.max 4, ffToTime / 3
      ffInterval = 1000 * (ffToFrame - @currentFrame) / @options.frameRate
      ffScrubDuration = 1000 * ffToTime / ffSpeed
      ffScrubDuration = Math.min(ffScrubDuration, ffInterval)
      ffFactor = ffInterval / ffScrubDuration
      if ffFactor > 1.5
        createjs.Tween.removeTweens(@)
        @scrubbingTo = null
        @fastForwarding = true
        @setProgress ffToRatio, ffScrubDuration
      else
        createjs.Tween.removeTweens(@)

  # initialization



    @scrubbingTo = Math.min(Math.round(progress * @world.frames.length), @world.frames.length)
    @scrubbingPlaybackSpeed = Math.sqrt(Math.abs(@scrubbingTo - @currentFrame) * @world.dt / (scrubDuration or 0.5))
    if scrubDuration
      t = createjs.Tween
        .get(@)
        .to({currentFrame: @scrubbingTo}, scrubDuration, createjs.Ease.sineInOut)
        .call(onTweenEnd)
      t.addEventListener('change', @onFramesScrubbed)
    else
