anchor.diff:      OutDevice = proplists:get_value(device, Options),
       Length = proplists:get_value(max_length, Options, ?HTTPC_MAX_LENGTH),
       fetch_partial(z_convert:to_list(Url), 0, Length, OutDevice, Options).
  +
  +
  +-spec ensure_profiles() -> ok.
  +ensure_profiles() ->
  +    case inets:start(httpc, [{profile, z_url_fetch}]) of
  +        {ok, _} ->
  +            ok = httpc:set_options([
  +                {max_keep_alive_length, 10},
  +                {max_sessions, 10},
  +                {cookies, enabled}
  +            ], z_url_fetch),
  +            periodic_cleanup(),
  +            ok;
  +        {error, {already_started, _}} -> ok
  +    end.
  +
  +-spec periodic_cleanup() -> ok.
  +periodic_cleanup() ->
  +    httpc:reset_cookies(z_url_fetch),
  +    {ok, _} = timer:apply_after(3600*1000, ?MODULE, periodic_cleanup, []),
  +    ok.
  +
  +-spec profile(string()|binary()) -> atom().
  +profile(_Url) ->
  +    ensure_profiles(),
  +    z_url_fetch.
   
   %% -------------------------------------- Fetch first part of a HTTP location -----------------------------------------
   
  
positive.code: -export([
      fetch/2,
      fetch_partial/1,
      fetch_partial/2
      ]).
  
  -type options() :: list(option()).
  
negative.code: start_stream(Url, Headers, Opts) ->
      try
          Timeout = proplists:get_value(timeout, Opts, ?HTTPC_TIMEOUT),
          httpc:request(get,
                        {Url, Headers},
                        [ {autoredirect, false}, {relaxed, true}, {timeout, Timeout}, {connect_timeout, ?HTTPC_TIMEOUT_CONNECT} ],
                        [ {sync, false}, {body_format, binary}, {stream, {self, once}} ],
                        profile(Url))
      catch
          error:E -> {error, E};
          throw:E -> {error, E}
  