anchor.diff:          [Worker | Free2] ->
              ok
           end,
  -        monitor_client(Callers, Worker, From),
  -        NewState = State#state{free = Free2, busy = [Worker | Busy]},
  +        NewState = State#state{
  +            free = Free2,
  +            busy = [Worker | Busy],
  +            callers = monitor_client(Callers, Worker, From)
  +        },
           {reply, {ok, Worker}, NewState}
       end;
   
  
positive.code:     limit,                  % max # of workers allowed
      free = [],              % free workers (connections)
      busy = [],              % busy workers (connections)
      waiting = queue:new(),   % blocked clients waiting for a worker
      callers = ets:new(callers,[set]) % clients who've been given a worker
  }).
  
  
  
negative.code:     lists:foreach(fun ibrowse_http_client:stop/1, State#state.free),
      lists:foreach(fun ibrowse_http_client:stop/1, State#state.busy).
  
  monitor_client(Callers, Worker, {ClientPid, _}) ->
      [{Worker, erlang:monitor(process, ClientPid)} | Callers].
  
  demonitor_client(Callers, Worker) ->
      case lists:keysearch(Worker, 1, Callers) of
          {value, {Worker, MonRef}} ->
              erlang:demonitor(MonRef, [flush]),
              lists:keydelete(Worker, 1, Callers);
          false ->
              Callers
      end.
  