anchor.diff:  
   ping_all_yall(Nodes) ->
       lists:map(fun(Node) -> net_adm:ping(Node) end, Nodes).
  +
  +
  +get_remote_states(NodeList) ->
  +    NodeList1 = lists:delete(node(), NodeList),
  +    {States1, BadNodes} = rpc:multicall(NodeList1, mem3, state, [], 5000),
  +    {_Status, States2} = lists:unzip(States1),
  +    {States2, BadNodes}.
  +
  +
  +%% @doc compare state with states based on vector clock
  +%%      return match | {bad_state_match, Node, NodesThatDontMatch}
  +compare_state_with_rest(#mem{node=Node, clock=Clock} = _State, States) ->
  +    Results = lists:map(fun(#mem{node=Node1, clock=Clock1}) ->
  +        {vector_clock:equals(Clock, Clock1), Node1}
  +    end, States),
  +    BadResults = lists:foldl(fun({true, _N}, AccIn) -> AccIn;
  +        ({false, N}, AccIn) -> [N | AccIn] end, [], Results),
  +    if
  +    length(BadResults) == 0 -> match;
  +    true -> {bad_state_match, Node, BadResults}
  +    end.
  
positive.code:     merged ->
          showroom_log:message(info, "membership: merged new gossip: ~p",
                               [MergedState]),
          update_cache(MergedState),
          gossip(MergedState),
          {noreply, MergedState}
      end;
  
negative.code:     {error, {unknown_join_type, JoinType}}.
  
  
  int_join(JoinType, ExtNodes, #mem{node=Node, nodes=Nodes, clock=Clock} = State,
       Config) ->
      NewClock = vector_clock:increment(Node, Clock),
      NewState = State#mem{nodes=ExtNodes, clock=NewClock},
      {Pmap, Fullmap} = create_maps(Config, JoinType, ExtNodes, Nodes),
      new_state(NewState, Pmap, Fullmap, Config).
  
  
  gossip(#mem{args=Args} = NewState) ->
  