 
         wesabe.info 'History is ', (hi.name for hi in @history).join(' -> ')
 
-        wesabe.lang.func.callWithScope fn, this, wesabe.lang.extend(
-          browser: browser
-          page: page
-          e: @constructor.elements
-          answers: @answers
-          options: @job.options
-          log: log
-          tmp: @tmp
-          action: @getActionProxy(browser, page)
-          job: @getJobProxy()
-          skipAccount: @skipAccount
-          reload: => @triggerDispatch(browser, page)
-          download: (args...) => @download(args...)
-        , scope or {})
+        @callWithMagicScope fn, browser, page, wesabe.lang.extend({log}, scope or {})
 
     @job.timer.start 'Navigate', overlap: off
 

  shouldDispatch: (browser, page) ->
    for filter in @filters
      result = wesabe.tryCatch "#{@constructor.fid}#filter(#{filter.name})", (log) =>
        r = wesabe.lang.func.callWithScope filter.test, this,
          browser: browser
          page: page
          e: @constructor.elements
          log: log
          tmp: @tmp
          job: @getJobProxy()
          skipAccount: @skipAccount

        if r is true
          log.debug "forcing dispatch"
        else if r is false
          log.debug "aborting dispatch"

        return r



    wesabe.debug "no filter voted to force or abort dispatch, so forcing dispatch by default"
    return true

  callWithMagicScope: (fn, browser, page, scope, args...) ->
    wesabe.lang.func.callWithScope fn, this, wesabe.lang.extend({
      browser
      page
      e: @constructor.elements
      answers: @answers
      options: @job.options
      tmp: @tmp
      action: @getActionProxy browser, page
      job: @getJobProxy()
      skipAccount: @skipAccount
      reload: => @triggerDispatch browser, page
      download: (args...) => @download args...
    }, scope or {}), args...


  @::__defineGetter__ 'history', ->
    @_history ||= []
