anchor.diff:      {ok, riak_pb_codec:encode(Message)}.
   
   %% @doc process/2 callback. Handles an incoming request message.
  -process(#rpbcountergetreq{bucket=B0, type=T, key=K, r=R0, pr=PR0,
  +process(#rpbcountergetreq{bucket=B, key=K, r=R0, pr=PR0,
                             notfound_ok=NFOk, basic_quorum=BQ},
           #state{client=C} = State) ->
       case lists:member(pncounter, riak_core_capability:get({riak_kv, crdt}, [])) of
           true ->
               R = decode_quorum(R0),
               PR = decode_quorum(PR0),
  -            B = maybe_bucket_type(T, B0),
               case C:get(B, K, make_option(r, R) ++
                              make_option(pr, PR) ++
                              make_option(notfound_ok, NFOk) ++
  
positive.code: 
  -module(riak_kv_pb_counter).
  
  -include_lib("riak_pb/include/riak_kv_pb.hrl").
  -include_lib("riak_pb/include/riak_pb_kv_codec.hrl").
  -include("riak_kv_types.hrl").
  
  -behaviour(riak_api_pb_service).
  
negative.code:     Msg = riak_pb_codec:decode(Code, Bin),
      %% no special permissions for counters, just get/put
      case Msg of
          #rpbcountergetreq{bucket=B} ->
              Bucket = bucket_type(B),
              {ok, Msg, {"riak_kv.get", Bucket}};
          #rpbcounterupdatereq{bucket=B} ->
              Bucket = bucket_type(B),
              {ok, Msg, {"riak_kv.put", Bucket}}
      end.
  
  