anchor.diff:  put(RObj, Options) ->
       StartTS = os:timestamp(),
       Bucket = riak_object:bucket(RObj),
  -    BKey = {Bucket, riak_object:key(RObj)},
  -    BucketProps = riak_core_bucket:get_bucket(riak_object:bucket(RObj)),
  -    DocIdx = riak_core_util:chash_key(BKey, BucketProps),
  +    Key = riak_object:key(RObj),
  +    BucketProps = riak_core_bucket:get_bucket(Bucket),
  +    DocIdx = riak_core_util:chash_key({Bucket, Key}, BucketProps),
       NVal = proplists:get_value(n_val, BucketProps),
       Preflist =
           case proplists:get_value(sloppy_quorum, Options, true) of
  
positive.code: %%% Internal functions
  %%%===================================================================
  
  validate_options(NVal, Preflist, Options, BucketProps) ->
      PW = get_rw_value(pw, BucketProps, NVal, Options),
      W = case get_rw_value(dw, BucketProps, NVal, Options) of
  
negative.code:         end,
      case validate_options(NVal, Preflist, Options, BucketProps) of
          {ok, W, PW} ->
              Worker = random_worker(),
              EncodedVal = encoded_val(RObj),
              ReqId = erlang:monitor(process, Worker),
              Timeout = case proplists:get_value(timeout, Options, ?DEFAULT_TIMEOUT) of
                  N when is_integer(N) andalso N > 0 ->
                      N;
                  _ ->
                      ?DEFAULT_TIMEOUT
              end,
              gen_server:cast(
                  Worker,
                  {put, Bucket, Key, EncodedVal, ReqId, Preflist,
                   #rec{w=W, pw=PW, n_val=NVal, from=self(),
                        start_ts=StartTS,
                        size=size(EncodedVal)}}),
              receive
                  {'DOWN', ReqId, process, _Pid, _Reason} ->
                      {error, riak_kv_w1c_server_crashed};
  