anchor.diff:  handle_cast({doit, From, MFA}, St) ->
       handle_cast({doit, From, undefined, MFA}, St);
   
  -handle_cast({doit, From, Nonce, MFA}, State) ->
  +handle_cast({doit, {ClientPid, ClientRef} = From, Nonce, MFA}, State) ->
       {LocalPid, Ref} = spawn_monitor(?MODULE, init_p, [From, MFA, Nonce]),
  -    Job = #job{client = element(2, From), worker = Ref, pid = LocalPid},
  +    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, pid = Pid} = Job ->
  +    #job{worker = KeyRef, worker_pid = Pid} = Job ->
           erlang:demonitor(KeyRef),
           exit(Pid, kill),
           {noreply, remove_job(Job, St)};
  
positive.code: -record(job, {
      client::reference(),
      worker::reference(),
      pid::pid()
  }).
  
  -record(st, {
  
negative.code:     {noreply, St}.
  
  terminate(_Reason, St) ->
      ets:foldl(fun(#job{worker_pid=Pid},_) -> exit(Pid,kill) end, nil,
          St#st.workers),
      ok.
  
  code_change(_OldVsn, {st, Workers}, _Extra) ->
      {ok, #st{workers = Workers}};
  
  code_change(_OldVsn, {st, Workers0, Errors, Limit, Count}, _Extra) ->
      Jobs = [#job{worker_pid=A, worker=B, client_pid=C, client=D}
          || {A, B, {C, D}} <- ets:tab2list(Workers0)],
      ets:delete(Workers0),
      State = #st{errors = Errors, error_limit = Limit, error_count = Count},
      ets:insert(State#st.workers, Jobs),
  