anchor.diff:      T = Task#task{chosen_input = Input},
       gb_trees:update(nopref, {N + 1, C + 1, [T|L]}, Tasks).
   
  --spec findpref(task(), [load()], gb_tree(), [node()]) -> gb_tree().
  +-spec findpref(task(), [load()], gb_tree(), [host()]) -> gb_tree().
   findpref(Task, NodeStats, Tasks, Nodes) ->
       LoadSorted = lists:sort([{taskcount(Node, Tasks), Load, X}
                                || {Load, {_Url, Node} = X}
  
positive.code: get_stats(JobPid, Timeout) ->
      gen_server:call(JobPid, get_stats, Timeout).
  
  -type state() :: {gb_tree(), gb_tree(), [node()]}.
  
  -spec init({jobname(), pid()}) -> gs_init() | {stop, normal}.
  init({JobName, JobCoord}) ->
  
negative.code: 
  % pop_busiest_node defines the policy for choosing the next task from a chosen
  % set of Nodes. Pick the task from the longest list.
  -spec pop_busiest_node(gb_tree(), [host()]) -> {schedule_result(), gb_tree()}.
  pop_busiest_node(Tasks, []) -> {nonodes, Tasks};
  pop_busiest_node(Tasks, Nodes) ->
      {{N, C, [Task|R]}, MaxNode} = lists:max([{gb_trees:get(Node, Tasks), Node}
  