anchor.diff:      lists:map(fun({M,F,A}) when is_list(A) -> {M,F,length(A)}; (X) -> X end,
           erlang:get_stacktrace()).
   
  -add_worker(Worker, Tab) ->
  -    ets:insert(Tab, Worker), Tab.
  +add_job(Job, #st{workers = Workers, clients = Clients} = State) ->
  +    ets:insert(Workers, Job),
  +    ets:insert(Clients, Job),
  +    State.
   
  -remove_worker(Ref, Tab) ->
  -    ets:delete(Tab, Ref), Tab.
  +remove_job(Job, #st{workers = Workers, clients = Clients} = State) ->
  +    ets:delete_object(Workers, Job),
  +    ets:delete_object(Clients, Job),
  +    State.
   
   find_worker(Ref, Tab) ->
       case ets:lookup(Tab, Ref) of [] -> false; [Worker] -> Worker end.
   
  -find_worker_from(Ref, Tab) ->
  -    case ets:match_object(Tab, {'_', '_', {'_', Ref}}) of
  -    [] ->
  -        false;
  -    [Worker] ->
  -        Worker
  -    end.
  -
   notify_caller({Caller, Ref}, Reason) ->
       Caller ! {Ref, {rexi_EXIT, Reason}}.
  
positive.code:     {noreply, St}.
  
  handle_info({'DOWN', Ref, process, _, normal}, #st{workers=Workers} = St) ->
      {noreply, St#st{workers = remove_worker(Ref, Workers)}};
  
  handle_info({'DOWN', Ref, process, Pid, Error}, #st{workers=Workers} = St) ->
      case find_worker(Ref, Workers) of
      {Pid, Ref, From} ->
          case Error of #error{reason = {_Class, Reason}, stack = Stack} ->
              notify_caller(From, {Reason, Stack}),
              St1 = save_error(Error, St),
              {noreply, St1#st{workers = remove_worker(Ref, Workers)}};
          _ ->
              notify_caller(From, Error),
              {noreply, St#st{workers = remove_worker(Ref, Workers)}}
          end;
      false ->
          {noreply, St}
  
negative.code: -include("rexi.hrl").
  -include_lib("eunit/include/eunit.hrl").
  
  -record(job, {
      client::reference(),
      worker::reference(),
      pid::pid()
  }).
  
  -record(st, {
      workers = ets:new(workers, [private, {keypos, #job.worker}]),
      clients = ets:new(clients, [private, {keypos, #job.client}]),
      errors = queue:new(),
      error_limit = 20,
      error_count = 0
  