anchor.diff:      ?TRACE("proposer:initialize for paxos id: ~p round ~p~n", [PaxosID,InitialRound]),
       case pdb:get(PaxosID, ETSTableName) of
           undefined ->
  -            pdb:set(state_new(PaxosID, ReplyTo, Acceptors, Proposal,
  -                              Majority, MaxProposers, InitialRound),
  -                    ETSTableName);
  -        _ ->
  +            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,
  -    gen_component:post_op({proposer_trigger, PaxosID, InitialRound}, State);
  +    proposer_trigger(StateForID, PaxosID, InitialRound, State);
   
   % trigger new proposer round
   on({proposer_trigger, PaxosID}, ETSTableName = State) ->
  
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]),
  