anchor.diff:      {ibrowse_async_headers, ReqId, Code, Hdrs} when Code=="301"; Code=="302" ->
           catch ibrowse:stop_worker_process(Pid),
           Url2 = couch_rep_httpc:redirect_url(Hdrs, Req#http_db.url),
  -        %% TODO use couch_httpc:request instead of start_http_request
  -        {Pid2, ReqId2} = start_http_request(Url2),
  +        Req2 = couch_rep_httpc:redirected_request(Req, Url2),
  +        Pid2 = couch_rep_httpc:spawn_link_worker_process(Req2),
  +        Req3 = Req2#http_db{conn = Pid2},
  +        {ibrowse_req_id, ReqId2} = couch_rep_httpc:request(Req3),
  +        Args2 = [Parent, Req3, Since, PostProps],
           receive {ibrowse_async_headers, ReqId2, "200", _} ->
  -            {ok, #state{conn=Pid2, last_seq=Since, reqid=ReqId2, init_args=Args}}
  +            {ok, #state{conn=Pid2, last_seq=Since, reqid=ReqId2, init_args=Args2}}
           after 30000 ->
               {stop, changes_timeout}
           end;
  
positive.code: stop(Server) ->
      gen_server:call(Server, stop).
  
  init([_Parent, #http_db{}=Source, Since, PostProps] = Args) ->
      process_flag(trap_exit, true),
      Feed = case couch_util:get_value(<<"continuous">>, PostProps, false) of
      false ->
  
negative.code:         resource = "_changes",
          qs = QS,
          conn = Pid,
          options = [{stream_to, {self(), once}}] ++
                  lists:keydelete(inactivity_timeout, 1, Source#http_db.options),
          headers = Source#http_db.headers -- [{"Accept-Encoding", "gzip"}]
      },
      {ibrowse_req_id, ReqId} = couch_rep_httpc:request(Req),
      Args = [Parent, Req, Since, PostProps],
  
      receive
      {ibrowse_async_headers, ReqId, "200", _} ->
  