 
     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 ||= []


        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 {})

    @job.timer.start 'Navigate', overlap: off


  shouldDispatch: (browser, page) ->
    for filter in @filters
      result = wesabe.tryCatch "#{@constructor.fid}#filter(#{filter.name})", (log) =>
        switch r = @callWithMagicScope filter.test, browser, page, {log}
          when true
            log.debug "forcing dispatch"
          when false
            log.debug "aborting dispatch"

        return r

