anchor.diff:  
   on(_, _State) ->
       unknown_event.
  +
  +-spec proposer_trigger(StateForID::proposer_state(), PaxosID::any(),
  +                       Round::non_neg_integer(), state()) -> state().
  +proposer_trigger(StateForID, PaxosID, Round, ETSTableName = State) ->
  +    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,
  +    State.
   
   start_new_higher_round(PaxosID, Round, ETSTableName) ->
       case pdb:get(PaxosID, ETSTableName) of
  
positive.code:             TmpState = state_reset_state(StateForID),
              NewState = state_inc_round(TmpState),
              pdb:set(NewState, ETSTableName),
              gen_component:post_op({proposer_trigger, PaxosID,
                                     state_get_round(NewState)},
                                    State)
      end;
  
  %% trigger for given round is needed for initial round without auto-increment
  
negative.code: 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  -> 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]),
  