     clearInterval @timeReportId
 
   currentTime: ->
+    @completedFramesTime + @currentFrameTime()
+
+  currentFrameTime: ->
     if @isPlaying()
-      now = (new Date()).getTime()
-      delta = now - @lastFrameTime
-      @playedTimeSum + delta
+      @playingFrameTime()
     else if @isPaused()
-      @playedTimeSum + @timeElapsedBeforePause
-    else if @isFinished()
-      @playedTimeSum
-    else
-      0 # not started
+      @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]

      @trigger('movie-finished')

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

      false


    return if @isPlaying()

    @playing = true
    @resumedAt = @now()
    frame = @timing()[@frameNo]
    [delay, count] = frame
    delayMs = delay * 1000
    delayLeft = delayMs - @totalFrameWaitTime
    @processFrameWithDelay(delayLeft)
    @trigger('movie-playback-resumed')

  togglePlay: ->
