anchor.diff:  		     {bad_action_from_state_function,Action},
   		     ?STACKTRACE()}
   	    end;
  +	%%
   	%% Actions that set options
   	{hibernate,NewHibernate} when is_boolean(NewHibernate) ->
   	    parse_actions(
   	      Debug, S, State, Actions,
   	      NewHibernate, TimeoutsR, Postpone, NextEventsR);
  -	{hibernate,_} ->
  -	    {error,
  -	     {bad_action_from_state_function,Action},
  -	     ?STACKTRACE()};
   	hibernate ->
   	    NewHibernate = true,
   	    parse_actions(
   	      Debug, S, State, Actions,
   	      NewHibernate, TimeoutsR, Postpone, NextEventsR);
  -	{state_timeout,Time,_} = StateTimeout
  -	  when is_integer(Time), Time >= 0;
  -	       Time =:= infinity ->
  -	    parse_actions(
  -	      Debug, S, State, Actions,
  -	      Hibernate, [StateTimeout|TimeoutsR], Postpone, NextEventsR);
  -	{state_timeout,_,_} ->
  -	    {error,
  -	     {bad_action_from_state_function,Action},
  -	     ?STACKTRACE()};
  -	{timeout,Time,_} = Timeout
  -	  when is_integer(Time), Time >= 0;
  -	       Time =:= infinity ->
  -	    parse_actions(
  -	      Debug, S, State, Actions,
  -	      Hibernate, [Timeout|TimeoutsR], Postpone, NextEventsR);
  -	{timeout,_,_} ->
  -	    {error,
  -	     {bad_action_from_state_function,Action},
  -	     ?STACKTRACE()};
  -	Time
  -	  when is_integer(Time), Time >= 0;
  -	       Time =:= infinity ->
  -	    Timeout = {timeout,Time,Time},
  -	    parse_actions(
  -	      Debug, S, State, Actions,
  -	      Hibernate, [Timeout|TimeoutsR], Postpone, NextEventsR);
  +	%%
   	{postpone,NewPostpone}
   	  when is_boolean(NewPostpone), Postpone =/= forbidden ->
   	    parse_actions(
   	      Debug, S, State, Actions,
   	      Hibernate, TimeoutsR, NewPostpone, NextEventsR);
  -	{postpone,_} ->
  -	    {error,
  -	     {bad_action_from_state_function,Action},
  -	     ?STACKTRACE()};
   	postpone when Postpone =/= forbidden ->
   	    NewPostpone = true,
   	    parse_actions(
   	      Debug, S, State, Actions,
   	      Hibernate, TimeoutsR, NewPostpone, NextEventsR);
  +	%%
   	{next_event,Type,Content} ->
   	    case event_type(Type) of
   		true when NextEventsR =/= forbidden ->
  
positive.code: 		    parse_timers(
  		      TimerRefs, NewTimerTypes, NewCancelTimers, TimeoutsR,
  		      NewSeen, [TimeoutEvent|TimeoutEvents]);
  		true ->
  		    %% (Re)start the timer
  		    TimerRef =
  			erlang:start_timer(Time, self(), TimerMsg),
  
negative.code: parse_timers(
    TimerRefs, TimerTypes, CancelTimers, [Timeout|TimeoutsR],
    Seen, TimeoutEvents) ->
      case Timeout of
  	{TimerType,Time,TimerMsg} ->
  	    parse_timers(
                TimerRefs, TimerTypes, CancelTimers, TimeoutsR,
                Seen, TimeoutEvents,
                TimerType, Time, TimerMsg);
  	Time ->
  	    parse_timers(
                TimerRefs, TimerTypes, CancelTimers, TimeoutsR,
                Seen, TimeoutEvents,
                timeout, Time, Time)
      end.
  
  parse_timers(
    TimerRefs, TimerTypes, CancelTimers, TimeoutsR,
    Seen, TimeoutEvents,
    TimerType, Time, TimerMsg) ->
      case Seen of
  	#{TimerType := _} ->
  	    %% Type seen before - ignore
  