anchor.diff:  
   %% @private
   %% Incoming messages.
  +handle_info({heartbeat, FromNode}, State) ->
  +    lager:info("~p: received heartbeat at node: ~p from node: ~p", [node(), FromNode]),
  +    {noreply, State};
  +handle_info(heartbeat, #state{membership=Membership}=State) ->
  +    MyNode = partisan_peer_service_manager:mynode(),
  +
  +    %% Send heartbeat.
  +    lists:foreach(fun(N) ->
  +        lager:info("~p: sending heartbeat message to node ~p", [node(), N]),
  +
  +        %% Catch shutdown race with sending heartbeat.
  +        try
  +            partisan_pluggable_peer_service_manager:forward_message(N, undefined, ?MODULE, {heartbeat, MyNode}, [])
  +        catch
  +            _:_ ->
  +                ok
  +        end
  +    end, membership(Membership)),
  +
  +    %% Reschedule.
  +    schedule_heartbeat(),
  +
  +    {noreply, State};
   handle_info({coordinator_timeout, Id}, State) ->
       %% Find transaction record.
       case ets:lookup(?COORDINATING_TRANSACTIONS, Id) of 
  
positive.code:     %% Start with initial membership.
      {ok, Membership} = partisan_peer_service:members(),
      lager:info("Starting with membership: ~p", [Membership]),
  
      {ok, #state{membership=membership(Membership)}}.
  
  
negative.code: 
  %% @private -- sort to remove nondeterminism in node selection.
  membership(Membership) ->
      lists:usort(Membership).
  
  %% @private
  schedule_heartbeat() ->
      case os:getenv("NOISE") of 
          "true" ->
              erlang:send_after(1, self(), heartbeat);
          _ ->
              ok
      end.