anchor.diff:          NewState = State#state{
              busy = Busy2,
              free = Free2,
  -           waiting = Waiting2
  +           waiting = Waiting2,
  +           callers = NewCallers1
           },
           {noreply, NewState};
      false ->
  -        {noreply, State}
  +        {noreply, State#state{callers = NewCallers0}}
      end.
   
   handle_info({'EXIT', Pid, _Reason}, State) ->
  
positive.code:         [Worker | Free2] ->
             ok
          end,
          monitor_client(Callers, Worker, From),
          NewState = State#state{free = Free2, busy = [Worker | Busy]},
          {reply, {ok, Worker}, NewState}
      end;
  
  
negative.code:         waiting = Waiting,
          callers = Callers
      } = State,
      NewCallers0 = demonitor_client(Callers, Pid),
      case Free -- [Pid] of
      Free ->
          case Busy -- [Pid] of
          Busy ->
              {noreply, State#state{callers = NewCallers0}};
          Busy2 ->
              case queue:out(Waiting) of
              {empty, _} ->
                  {noreply, State#state{busy = Busy2, callers = NewCallers0}};
              {{value, From}, Waiting2} ->
                  {ok, Worker} = ibrowse:spawn_link_worker_process(Url),
                  NewCallers1 = monitor_client(Callers, Worker, From),
                  gen_server:reply(From, {ok, Worker}),
                  NewState = State#state{
                      busy = [Worker | Busy2],
                      waiting = Waiting2,
                      callers = NewCallers1
                  },
                  {noreply, NewState}
              end
          end;
      Free2 ->
          {noreply, State#state{free = Free2, callers = NewCallers0}}
      end;
  
  handle_info({'DOWN', Ref, process, _, _}, #state{callers = Callers} = State) ->
      case lists:keysearch(Ref, 2, Callers) of
          {value, {Worker, Ref}} ->
              handle_cast({release_worker, Worker}, State);
          false ->
              {noreply, State}
      end.
  
  code_change(_OldVsn, OldState, _Extra) when tuple_size(OldState) =:= 7 ->
      case element(7, OldState) of
          EtsTable when is_integer(EtsTable) ->
              NewState = setelement(7, OldState, ets:tab2list(EtsTable)),
              ets:delete(EtsTable),
              {ok, NewState};
          Callers when is_list(Callers) ->
              % Already upgraded
              {ok, OldState}
      end;
  code_change(_OldVsn, State, _Extra) ->
      {ok, State}.
  
  