     runNext()
     promise
 
-  _deferWait: ->
-    runDuration = @options.runDuration
-    Logger.debug('Task runner running for ' + runDuration + 'ms...')
-    @waitHandle = setTimeout (Meteor.bindEnvironment => @_wait()), @options.runDuration
-
   _wait: ->
     waitDuration = @options.waitDuration
     Logger.debug('Task runner ready to wait...')
     wait = =>
       Logger.debug('Task runner waiting for ' + waitDuration + 'ms...')
+      @status = 'waiting'
       @waitDf = Q.defer()
       onDone = Meteor.bindEnvironment =>
-        @_deferWait()
         @waitDf.resolve()
+        @status = 'running'
       setTimeout(onDone, waitDuration)
       @waitDf.promise
     @bufferQueue.unshift(wait)

    if @pauseDf
      @pauseDf.resolve()
      @pauseDf = null

    @status = 'running'
    @_deferWait()
    runNext = Meteor.bindEnvironment =>
      if @bufferQueue.length == 0
        Logger.debug('Task runner complete')
        @runDf.resolve()
        @reset()
        return
      callback = @bufferQueue.shift()
      @runQueue.add(callback).fin(runNext)
    
    # Running on an empty queue will reset the promise so we need to store a refernece to the

      if df && Q.isPending(df.promise)
        df.reject('Task runner reset')
      @[name] = null
    Logger.debug('Task runner reset')
