     @matrix ?= new THREE.Matrix4()
 
     # Start a timer if one wasn't passed
-    @options.timer ?= new Timelimit(@options.timeout)
+    @options.timer ?= new Timelimit(@options.timer?.timeout ? @options.timeout)
 
     @tree   = @toTree treeIsh
 

    throw new Error("Finished more tasks than started") if @tasks? and @tasks < 1
    @tasks -= 1
    elapsed = @check()
    if @tasks == 0
      @started = undefined

  doTask: (block) =>
    do @start


  check: =>
    return unless @started?
    returning (elapsed = (Date.now() - @started)), =>
      if elapsed >= @timeout ? Infinity
        throw new Error("Timeout reached: #{elapsed}/#{@timeout}")

  start: =>
