anchor.diff:          {ok, "200", _Header, _Body} ->
               ok;
           {ok, "204", _Header, _Body} ->
  +            ok;
  +        {ok, Code, _Header, _Body} ->
  +            {error, {http_error, Code}};
  +        {error, Reason} ->
  +            {error, Reason}
  +    end.
  +
  +do_copy(Host, Url, Headers, State) ->
  +    case send_request(Host, Url, Headers, put, <<>>, proxy_opts(State)) of
  +        {ok, "200", _Header, _Body} ->
               ok;
           {ok, Code, _Header, _Body} ->
               {error, {http_error, Code}};
  
positive.code:     Key = KeyGen(),
      Url = url(Host, Port, Bucket, Key),
      case do_delete({Host, Port}, Url, [], State) of
          ok ->
              {ok, S2};
          {error, Reason} ->
  
negative.code:                                'Content-Type', Headers0,
                                 'application/octet-stream')),
      Date = httpd_util:rfc1123_date(),
      Uri = element(7, Url),
      Headers = [{'Content-Type', ContentTypeStr},
                 {'Date', Date}|lists:keydelete('Content-Type', 1, Headers0)],
      HeadersWithAuth =
          case basho_bench_config:get(cs_access_key, undefined) of
              undefined ->
                  Headers;
              AccessKey ->
                  AuthSig = auth_sig(AccessKey, basho_bench_config:get(cs_secret_key),
                                     uppercase_verb(Method), ContentTypeStr, Date,
                                     Headers, Uri),
                  [{'Authorization', AuthSig}|Headers]
          end,
      Timeout = basho_bench_config:get(cs_request_timeout, 5000),
      ibrowse_http_client:send_req(Pid, Url, HeadersWithAuth, Method,
                                   Body, Options, Timeout).
  
  %% S3 utilities
  
  auth_sig(AccessKey, SecretKey, Method, ContentType, Date, Headers, Resource) ->
      AmzHeaders = lists:filter(fun ({"x-amz-" ++ _, V}) when V =/= undefined -> true; (_) -> false end, Headers),
      CanonizedAmzHeaders =
          [[Name, $:, Value, $\n] || {Name, Value} <- lists:sort(AmzHeaders)],
      StringToSign = [string:to_upper(atom_to_list(Method)), $\n,
                      "", $\n,  % Content-MD5
                      ContentType, $\n,
                      Date, $\n,
                      CanonizedAmzHeaders,
                      Resource
                     ],
      Signature = base64:encode(stanchion_utils:sha_mac(SecretKey, StringToSign)),
      ["AWS ", AccessKey, $:, Signature].
  
  %% CS utilities
  
  setup_user_and_bucket(State) ->
      case basho_bench_config:get(cs_access_key, undefined) of
  