anchor.diff:      Headers2 = oauth_header(HttpDb, Params) ++ Headers1,
       Url = full_url(HttpDb, Params),
       Body = get_value(body, Params, []),
  -    IsChanges = get_value(path, Params) == "_changes",
  -    if IsChanges ->
  -        {ok, Worker} = ibrowse:spawn_link_worker_process(Url),
  +    case get_value(path, Params) == "_changes" of
  +    true ->
           Timeout = infinity;
  -    true ->
  -        {ok, Worker} = couch_replicator_httpc_pool:get_worker(HttpDb#httpdb.httpc_pool),
  +    false ->
           Timeout = case config:get("replicator", "request_timeout", "infinity") of
               "infinity" -> infinity;
               Milliseconds -> list_to_integer(Milliseconds)
           end
       end,
  +    {ok, Worker} = couch_replicator_httpc_pool:get_worker(HttpDb#httpdb.httpc_pool),
       IbrowseOptions = [
           {response_format, binary}, {inactivity_timeout, HttpDb#httpdb.timeout} |
           lists:ukeymerge(1, get_value(ibrowse_options, Params, []),
  
positive.code:     ],
      Response = ibrowse:send_req_direct(
          Worker, Url, Headers2, Method, Body, IbrowseOptions, Timeout),
      {Worker, Response, IsChanges}.
  
  
  process_response({error, sel_conn_closed}, _Worker, HttpDb, Params, _Cb) ->
  
negative.code:         [{K, ?b2l(iolist_to_binary(V))} || {K, V} <- get_value(qs, Params1, [])]),
      Params = ?replace(Params2, ibrowse_options,
          lists:keysort(1, get_value(ibrowse_options, Params2, []))),
      {Worker, Response} = send_ibrowse_req(HttpDb, Params),
      Ret = try
          process_response(Response, Worker, HttpDb, Params, Callback)
      catch
          throw:{retry, NewHttpDb0, NewParams0} ->
              {retry, NewHttpDb0, NewParams0}
      after
          ok = couch_replicator_httpc_pool:release_worker(
              HttpDb#httpdb.httpc_pool,
              Worker
          ),
          clean_mailbox(Response)
      end,
      % This is necessary to keep this tail-recursive. Calling
  