anchor.diff:      lists:foreach(fun ibrowse_http_client:stop/1, State#state.free),
       lists:foreach(fun ibrowse_http_client:stop/1, State#state.busy).
   
  -monitor_client(Tab, Worker, {ClientPid, _}) ->
  -    ets:insert(Tab, {Worker, erlang:monitor(process, ClientPid)}).
  +monitor_client(Callers, Worker, {ClientPid, _}) ->
  +    [{Worker, erlang:monitor(process, ClientPid)} | Callers].
   
  -demonitor_client(Tab, Worker) ->
  -    case ets:lookup(Tab, Worker) of
  -    [] -> ok;
  -    [{Worker, MonRef}] ->
  -        ets:delete(Tab, Worker),
  -        erlang:demonitor(MonRef, [flush])
  +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.
  
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:         NewState = State#state{
             busy = Busy2,
             free = Free2,
             waiting = Waiting2,
             callers = NewCallers1
          },
          {noreply, NewState};
     false ->
          {noreply, State#state{callers = NewCallers0}}
     end.
  
  handle_info({'EXIT', Pid, _Reason}, State) ->
  