anchor.diff:  
   %%===================================================================
   
  +-spec handle_down(reference(), pid(), term(), state()) -> false |
  +                                                          {reset, state()}.
  +handle_down(Ref, _Pid, Reason, #state{id=Id,
  +                                      proxy=Proxy,
  +                                      vnode_ref=VnodeRef,
  +                                      proxy_ref=ProxyRef}=State) ->
  +    {{kv, _PL, _N, Idx}, _} = Id,
  +    case Ref of
  +        VnodeRef ->
  +            lager:warning("Vnode for Idx: ~p crashed with reason: ~p.",
  +                [Idx, Reason]),
  +            %% There are some races here. The vnode may not have been restarted yet
  +            %% or the manager itself could be down.
  +            %% TODO: Add a timer:sleep()? Something else?
  +            {ok, Vnode} =
  +                riak_core_vnode_manager:get_vnode_pid(Idx, riak_kv_vnode),
  +            VnodeRef2 = erlang:monitor(process, Vnode),
  +            {reset, State#state{vnode_ref=VnodeRef2}};
  +        ProxyRef ->
  +            lager:warning("Vnode Proxy for Idx: ~p crashed with reason: ~p.",
  +                [Idx, Reason]),
  +            ProxyRef2 = erlang:monitor(process, Proxy),
  +            {reset, State#state{proxy_ref=ProxyRef2}};
  +        _ ->
  +            false
  +    end.
  +
  +%%===================================================================
  +
   -spec tick(epoch(), seq(), peer_id(), views(), state()) -> state().
   tick(_Epoch, _Seq, _Leader, Views, State=#state{id=Id}) ->
       %% TODO: Should this entire function be async?
  
positive.code:     Peers0 = [{Idx, PeerId} || {PeerId={{kv,_PL,_N,Idx},_Node},_Reply} <- Replies],
      Peers = orddict:from_list(Peers0),
      {{kv, PL, N, Idx}, _} = Id,
      IndexN = {PL,N}, 
      %% Sort to remove duplicates when changing ownership / forwarded response
      Siblings0 = lists:usort([I || {{{kv,_PL,_N,I},_Node},_Reply} <- Replies]),
      %% Just in case, remove self from list
  
negative.code: -export([trusted/1, sync_request/2, sync/2]).
  -export([reply/2]).
  -export([obj_newer/2]).
  -export([handle_down/4]).
  
  -include_lib("riak_ensemble/include/riak_ensemble_types.hrl").
  
  -record(state, {ensemble  :: ensemble_id(),
                  id        :: peer_id(),
                  proxy     :: atom(),
                  proxy_ref :: reference(),
                  vnode_ref :: reference(),
                  async     :: pid()}).
  
  -type obj()    :: riak_object:riak_object().
  