anchor.diff:  on({proposer_trigger, PaxosID, Round}, ETSTableName = State) ->
       ?TRACE("proposer:trigger for paxos id ~p and round ~p~n", [PaxosID, Round]),
       case pdb:get(PaxosID, ETSTableName) of
  -        undefined -> ok;
  -        StateForID ->
  -            Acceptors = state_get_acceptors(StateForID),
  -            ReplyTo = state_get_replyto(StateForID),
  -            Proposal = state_get_proposal(StateForID),
  -            _ = case Round of
  -                0 -> [msg_accept(X, ReplyTo,
  -                                 PaxosID, Round,
  -                                 Proposal)
  -                      || X <- Acceptors];
  -                _ -> [msg_prepare(X, ReplyTo, PaxosID, Round)
  -                      || X <- Acceptors]
  -            end,
  -            case Round > state_get_round(StateForID) of
  -                true ->
  -                    pdb:set(state_set_round(StateForID, Round),
  -                            ETSTableName);
  -                false -> ok
  -            end
  -    end,
  -    State;
  +        undefined  -> State;
  +        StateForID -> proposer_trigger(StateForID, PaxosID, Round, ETSTableName)
  +    end;
   
   on({acceptor_ack, PaxosID, Round, Value, RLast}, ETSTableName = State) ->
       ?TRACE("proposer:ack for paxos id ~p round ~p~n", [PaxosID, Round]),
  
positive.code:                                             {min_heap_size, 16383}]}]).
  
  %% initialize: return initial state.
  -spec init([]) -> atom().
  init([]) ->
      ?TRACE("Starting proposer for DHT node: ~p~n", [pid_groups:my_groupname()]),
      %% For easier debugging, use a named table (generates an atom)
  
negative.code:     ?TRACE("proposer:initialize for paxos id: ~p round ~p~n", [PaxosID,InitialRound]),
      case pdb:get(PaxosID, ETSTableName) of
          undefined ->
              StateForID = state_new(PaxosID, ReplyTo, Acceptors, Proposal,
                                     Majority, MaxProposers, InitialRound),
              pdb:set(StateForID, ETSTableName);
          StateForID ->
              log:log(error, "Duplicate proposer:initialize for paxos id ~p"
                             "Just triggering instead~n", [PaxosID])
      end,
      proposer_trigger(StateForID, PaxosID, InitialRound, State);
  
  % trigger new proposer round
  on({proposer_trigger, PaxosID}, ETSTableName = State) ->
  