 
   start: ->
     if @options.benchmark
-      @startTime = (new Date).getTime()
+      @startedAt = @now()
 
     @playing = true
-    @lastFrameTime = (new Date()).getTime()
+    @lastFrameAt = @now()
     @nextFrame()
 
   stop: ->
+    clearInterval @nextFrameTimeoutId
     @playing = false
-    clearInterval @nextFrameTimeoutId
-    @timeElapsedBeforePause = (new Date()).getTime() - @lastFrameTime
+    now = @now()
+    resumedAt = @resumedAt or @lastFrameAt
+    currentWaitTime = now - resumedAt
+    @totalFrameWaitTime += currentWaitTime
+    @pausedAt = now
 
   restart: ->
     @reset()

      @trigger('movie-finished')

      if @options.benchmark
        now = (new Date).getTime()
        console.log "finished in #{(now - @startTime) / 1000.0}s"

      false


    clearInterval @timeReportId

  currentTime: ->
    @completedFramesTime + @currentFrameTime()

  currentFrameTime: ->
    if @isPlaying()
      @playingFrameTime()
    else if @isPaused()
      @pausedFrameTime()
    else
      0

  playingFrameTime: ->
    if @frameWasPaused()
      @currentFrameWithPauseTime()
    else
      @currentFrameWithNoPauseTime()

  frameWasPaused: ->
    !!@pausedAt

  currentFrameWithPauseTime: ->
    @totalFrameWaitTime + @sinceResumeTime()

  currentFrameWithNoPauseTime: ->
    @now() - @lastFrameAt

  sinceResumeTime: ->
    @now() - @resumedAt

  pausedFrameTime: ->
    @totalFrameWaitTime

  clearPauseState: ->
    @pausedAt = undefined
    @resumedAt = undefined
    @totalFrameWaitTime = 0

  nextFrame: ->
    if frame = @timing()[@frameNo]
