anchor.diff:  
   handle_info({'DOWN', Ref, process, Pid, Error}, #st{workers=Workers} = St) ->
       case find_worker(Ref, Workers) of
  -    #job{pid=Pid, worker=Ref, client=From} = Job ->
  +    #job{worker_pid=Pid, worker=Ref, client_pid=CPid, client=CRef} =Job ->
           case Error of #error{reason = {_Class, Reason}, stack = Stack} ->
  -            notify_caller(From, {Reason, Stack}),
  +            notify_caller({CPid, CRef}, {Reason, Stack}),
               St1 = save_error(Error, St),
               {noreply, remove_job(Job, St1)};
           _ ->
  -            notify_caller(From, Error),
  +            notify_caller({CPid, CRef}, Error),
               {noreply, remove_job(Job, St)}
           end;
       false ->
  
positive.code: -record(job, {
      client::reference(),
      worker::reference(),
      pid::pid()
  }).
  
  -record(st, {
  
negative.code: handle_cast({doit, From, MFA}, St) ->
      handle_cast({doit, From, undefined, MFA}, St);
  
  handle_cast({doit, {ClientPid, ClientRef} = From, Nonce, MFA}, State) ->
      {LocalPid, Ref} = spawn_monitor(?MODULE, init_p, [From, MFA, Nonce]),
      Job = #job{
          client = ClientRef,
          worker = Ref,
          client_pid = ClientPid,
          worker_pid = LocalPid
      },
      {noreply, add_job(Job, State)};
  
  
  handle_cast({kill, FromRef}, #st{clients = Clients} = St) ->
      case find_worker(FromRef, Clients) of
      #job{worker = KeyRef, worker_pid = Pid} = Job ->
          erlang:demonitor(KeyRef),
          exit(Pid, kill),
          {noreply, remove_job(Job, St)};
  