anchor.diff:              Ret;
           {'DOWN', Ref, process, Pid, {{nocatch, {missing_stub,_} = Stub}, _}} ->
               throw(Stub);
  +        {'DOWN', Ref, process, Pid, request_uri_too_long} ->
  +            NewMaxLen = get_value(max_url_len, Options, ?MAX_URL_LEN) div 2,
  +            case NewMaxLen < ?MIN_URL_LEN of
  +                true ->
  +                    throw(request_uri_too_long);
  +                false ->
  +                    ?LOG_INFO("Reducing url length to ~B because of 414 response", [NewMaxLen]),
  +                    Options1 = lists:keystore(max_url_len, 1, Options,
  +                                              {max_url_len, NewMaxLen}),
  +                    open_doc_revs(HttpDb, Id, Revs, Options1, Fun, Acc)
  +            end;
           {'DOWN', Ref, process, Pid, Else} ->
               Url = couch_util:url_strip_password(
                   couch_replicator_httpc:full_url(HttpDb, [{path,Path}, {qs,QS}])
  
positive.code:     JsonRevs = ?b2l(?JSON_ENCODE(couch_doc:revs_to_strs(Revs))),
      options_to_query_args(Rest, [{"open_revs", JsonRevs} | Acc]).
  
  
  -define(MAX_URL_LEN, 7000).
  
  atts_since_arg(_UrlLen, [], Acc) ->
      lists:reverse(Acc);
  atts_since_arg(UrlLen, [PA | Rest], Acc) ->
      RevStr = couch_doc:rev_to_str(PA),
      NewUrlLen = case Rest of
      [] ->
  
negative.code:     QS = options_to_query_args(HttpDb, Path, [revs, {open_revs, Revs} | Options]),
      {Pid, Ref} = spawn_monitor(fun() ->
          Self = self(),
          Callback = fun
            (200, Headers, StreamDataFun) ->
              remote_open_doc_revs_streamer_start(Self),
              {<<"--">>, _, _} = couch_httpd:parse_multipart_request(
                  get_value("Content-Type", Headers),
                  StreamDataFun,
                  fun mp_parse_mixed/1
              );
            (414, _, _) ->
              exit(request_uri_too_long)
          end,
          Streamer = spawn_link(fun() ->
              Params = [
  