anchor.diff:                                     precommit = Precommit}) ->
       case invoke_precommit(Precommit, update_last_modified(UpdateLastMod, RObj0)) of
           fail ->
  -            client_reply({error, precommit_fail}, StateData0),
  -            {stop, normal, StateData0};
  +            process_reply({error, precommit_fail}, StateData0);
           {fail, Reason} ->
  -            client_reply({error, {precommit_fail, Reason}}, StateData0),
  -            {stop, normal, StateData0};
  +            process_reply({error, {precommit_fail, Reason}}, StateData0);
           RObj1 ->
               TRef = schedule_timeout(Timeout),
               Preflist = [IndexNode || {IndexNode, _Type} <- Preflist2],
  
positive.code: make_vtag(RObj) ->
      <<HashAsNum:128/integer>> = crypto:md5(term_to_binary(riak_object:vclock(RObj))),
      riak_core_util:integer_to_list(HashAsNum,62).
  
  update_stats(#state{startnow=StartNow}) ->
      EndNow = now(),
      riak_kv_stat:update({put_fsm_time, timer:now_diff(EndNow, StartNow)}).
  
  %% Run the precommit hooks
  invoke_precommit([], RObj) ->
  
negative.code:     StateData1 = add_vnode_result(Reply, StateData),
      {next_state, postcommit, StateData1, 0}.
  
  finish(timeout, StateData = #state{timing = Timing, reply = Reply}) ->
      case Reply of
          {error, _} ->
              ok;
          _Ok ->
              %% TODO: Improve reporting of timing
              %% For now can add debug tracers to view the return from calc_timing
              {Duration, _Stages} = calc_timing(Timing),
              riak_kv_stat:update({put_fsm_time, Duration})
      end,
      {stop, normal, StateData};
  finish(Reply, StateData) -> % late responses - add to state
      StateData1 = add_vnode_result(Reply, StateData),
      {next_state, finish, StateData1, 0}.
  
  %% @private
  handle_event(_Event, _StateName, StateData) ->
  