anchor.diff:              false ->
                   riak_core_apl:get_primary_apl(DocIdx, NVal, riak_kv)
           end,
  -    Workers = workers(),
  -    R = random(size(Workers)),
  -    Worker = element(R, workers()),
  -    ReqId = erlang:monitor(process, Worker),
  -    RObj2 = riak_object:set_vclock(RObj, vclock:fresh(<<0:8>>, 1)),
  -    RObj3 = riak_object:update_last_modified(RObj2),
  -    RObj4 = riak_object:apply_updates(RObj3),
  -    Bucket = riak_object:bucket(RObj4),
  -    Key = riak_object:key(RObj4),
  -    EncodedVal = riak_object:to_binary(v1, RObj4),
  -    gen_server:cast(
  -        Worker,
  -        {put, Bucket, Key, EncodedVal, ReqId, Preflist,
  -            #rec{w=W, pw=PW, n_val=NVal, from=self()}
  -        }
  -    ),
  -    Timeout = case proplists:get_value(timeout, Options, ?DEFAULT_TIMEOUT) of
  -        N when is_integer(N) andalso N > 0 ->
  -            N;
  -        _ ->
  -            ?DEFAULT_TIMEOUT
  -    end,
  -    receive
  -        {'DOWN', ReqId, process, _Pid, _Reason} ->
  -            {error, riak_kv_fast_put_server_crashed};
  -        {ReqId, Response} ->
  -            erlang:demonitor(ReqId),
  -            Response
  -    after Timeout ->
  -        gen_server:cast(Worker, {cancel, ReqId}),
  -        receive
  -            {ReqId, Response} ->
  -                Response
  -        end
  +    case validate_options(NVal, Preflist, Options, BucketProps) of
  +        {ok, W, PW} ->
  +            Workers = workers(),
  +            R = random(size(Workers)),
  +            Worker = element(R, workers()),
  +            ReqId = erlang:monitor(process, Worker),
  +            RObj2 = riak_object:set_vclock(RObj, vclock:fresh(<<0:8>>, 1)),
  +            RObj3 = riak_object:update_last_modified(RObj2),
  +            RObj4 = riak_object:apply_updates(RObj3),
  +            Bucket = riak_object:bucket(RObj4),
  +            Key = riak_object:key(RObj4),
  +            EncodedVal = riak_object:to_binary(v1, RObj4),
  +            gen_server:cast(
  +                Worker,
  +                {put, Bucket, Key, EncodedVal, ReqId, Preflist,
  +                    #rec{w=W, pw=PW, n_val=NVal, from=self()}
  +                }
  +            ),
  +            Timeout = case proplists:get_value(timeout, Options, ?DEFAULT_TIMEOUT) of
  +                          N when is_integer(N) andalso N > 0 ->
  +                              N;
  +                          _ ->
  +                              ?DEFAULT_TIMEOUT
  +                      end,
  +            receive
  +                {'DOWN', ReqId, process, _Pid, _Reason} ->
  +                    {error, riak_kv_fast_put_server_crashed};
  +                {ReqId, Response} ->
  +                    erlang:demonitor(ReqId, [flush]),
  +                    Response
  +            after Timeout ->
  +                gen_server:cast(Worker, {cancel, ReqId}),
  +                receive
  +                    {ReqId, Response} ->
  +                        Response
  +                end
  +            end;
  +        Error ->
  +            Error
       end.
   
   %%%===================================================================
  
positive.code:         riak_kv_fp_worker07
      }.
  
  start_link(Name) ->
      gen_server:start_link({local, Name}, ?MODULE, [], []).
  
  put(RObj, Options) ->
      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),
      NVal = proplists:get_value(n_val, BucketProps),
      PW = get_rw_value(pw, BucketProps, NVal, Options),
      W = case get_rw_value(dw, BucketProps, NVal, Options) of
              error   -> get_rw_value(w, BucketProps, NVal, Options);
              DW      -> erlang:max(DW, get_rw_value(w, BucketProps, NVal, Options))
          end,
      Preflist =
          case proplists:get_value(sloppy_quorum, Options, true) of
              true ->
  
negative.code:             end,
              {noreply, NewState}
      end;
  handle_info(_Msg, State) ->
      {noreply, State}.
  
  terminate(_Reason, _State) ->
  