anchor.diff:           broadcast/2,
            ring_update/1,
            broadcast_members/0,
  -         broadcast_members/1]).
  +         broadcast_members/1,
  +         exchanges/0,
  +         exchanges/1,
  +         cancel_exchanges/1]).
   
   %% Debug API
   -export([debug_get_peers/2,
  
positive.code: -type message_id()      :: any().
  -type message_round()   :: non_neg_integer().
  -type outstanding()     :: {message_id(), module(), message_round(), nodename()}.
  
  -record(state, {
            %% Initially trees rooted at each node are the same.
  
negative.code:     LazyPeers = all_peers(Root, State#state.lazy_sets, State#state.common_lazys),
      {reply, {EagerPeers, LazyPeers}, State};
  handle_call(broadcast_members, _From, State=#state{all_members=AllMembers}) ->
      {reply, AllMembers, State};
  handle_call(exchanges, _From, State=#state{exchanges=Exchanges}) ->
      {reply, Exchanges, State};
  handle_call({cancel_exchanges, WhichExchanges}, _From, State) ->
      Cancelled = cancel_exchanges(WhichExchanges, State#state.exchanges),
      {reply, Cancelled, State}.
  
  %% @private
  -spec handle_cast(term(), #state{}) -> {noreply, #state{}} |
  