anchor.diff:      {noreply, St}.
   
   terminate(_Reason, St) ->
  -    ets:foldl(fun({Pid, _, _}, _) -> exit(Pid,kill) end, nil, St#st.workers),
  +    ets:foldl(fun(#job{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{pid=A, worker=B, client=C} || {A, B, {_, C}}
  +        <- ets:tab2list(Workers0)],
  +    ets:delete(Workers0),
  +    State = #st{errors = Errors, error_limit = Limit, error_count = Count},
  +    ets:insert(State#st.workers, Jobs),
  +    ets:insert(State#st.clients, Jobs),
  +    {ok, State};
   
   code_change(_OldVsn, St, _Extra) ->
       {ok, St}.
  
positive.code: handle_cast({doit, From, MFA}, St) ->
      handle_cast({doit, From, undefined, MFA}, St);
  
  handle_cast({doit, From, Nonce, MFA}, #st{workers=Workers} = St) ->
      {LocalPid, Ref} = spawn_monitor(?MODULE, init_p, [From, MFA, Nonce]),
      {noreply, St#st{workers = add_worker({LocalPid, Ref, From}, Workers)}};
  
  
  handle_cast({kill, FromRef}, #st{workers=Workers} = St) ->
      case find_worker_from(FromRef, Workers) of
      {Pid, KeyRef, {_, FromRef}} ->
          erlang:demonitor(KeyRef),
          exit(Pid, kill),
          {noreply, St#st{workers = remove_worker(KeyRef, Workers)}};
      false ->
          {noreply, St}
      end;
  
negative.code:     {noreply, St}.
  
  handle_info({'DOWN', Ref, process, _, normal}, #st{workers=Workers} = St) ->
      case find_worker(Ref, Workers) of
      #job{} = Job ->
          {noreply, remove_job(Job, St)};
      false ->
          {noreply, St}
      end;
  
  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 ->
          case Error of #error{reason = {_Class, Reason}, stack = Stack} ->
              notify_caller(From, {Reason, Stack}),
              St1 = save_error(Error, St),
              {noreply, remove_job(Job, St1)};
          _ ->
              notify_caller(From, Error),
              {noreply, remove_job(Job, St)}
          end;
      false ->
          {noreply, St}
  