anchor.diff:                  async         :: pid(),
                   tree          :: pid(),
                   lease         :: riak_ensemble_lease:lease_ref(),
  -                watchers = [] :: [pid()],
  +                watchers = [] :: [{pid(), reference()}],
                   self          :: pid()
                  }).
   
  
positive.code:         {reset, ModState2} ->
              State2 = State#state{modstate=ModState2},
              step_down(State2)
      end;
  handle_info(quorum_timeout, StateName, State) ->
      State2 = quorum_timeout(State),
      {next_state, StateName, State2};
  handle_info(_Info, StateName, State) ->
      {next_state, StateName, State}.
  
  -spec terminate(_,_,_) -> ok.
  terminate(_Reason, _StateName, _State) ->
  
negative.code:     {next_state, StateName, State};
  handle_event({watch_leader_status, Pid}, StateName, State = #state{watchers = Watchers}) ->
      _ = notify_leader_status(Pid, StateName, State),
      MRef = erlang:monitor(process, Pid),
      {next_state, StateName, State#state{watchers = [{Pid, MRef} | Watchers]}};
  handle_event({stop_watching, Pid}, StateName, State = #state{watchers = Watchers}) ->
      case remove_watcher(Pid, Watchers) of
          not_found ->
              lager:warning("Tried to stop watching for pid ~p, but did not find it in watcher list"),
              {next_state, StateName, State};
          {MRef, NewWatcherList} ->
              erlang:demonitor(MRef, [flush]),
              {next_state, StateName, State#state{watchers = NewWatcherList}}
      end;
  handle_event({reply, ReqId, Peer, Reply}, StateName, State) ->
      State2 = handle_reply(ReqId, Peer, Reply, State),
      {next_state, StateName, State2};
  