anchor.diff:    when DeadlineNS =< NowNS ->
       #tick{id = Id,
             duration_ns = DurationNS,
  -          generation = Generation}=Tick,
  -    {noreply, NewState} = Mod:handle_tick(Id, Generation, State),
  -    NewTick = Tick#tick{deadline_ns = DeadlineNS + DurationNS,
  -                        generation = Generation + 1},
  +          generation = Generation,
  +          skip_missed = SkipMissed} = Tick,
  +    GenerationsSkip = case SkipMissed of
  +                        false -> 0;
  +                        true  -> trunc((NowNS - DeadlineNS) / DurationNS)
  +                      end,
  +    {noreply, NewState} = Mod:handle_tick(Id, Generation + GenerationsSkip, State),
  +    NewTick = Tick#tick{deadline_ns = DeadlineNS + ((1 + GenerationsSkip) * DurationNS),
  +                        generation = Generation + GenerationsSkip + 1},
       handle_tick_deadlines(NewState, UntriggeredTicks, NowNS, Mod, [NewTick | TriggeredTicks]);
   handle_tick_deadlines(State, UntriggeredTicks, _NowNS, _Mod, TriggeredTicks) ->
       {State, TriggeredTicks ++ UntriggeredTicks}.
  
positive.code:            {error, {already_started, pid()}} |
             {error, Reason :: term()}.
  start_link(Name, Mod, Args, Options) ->
      {TickOptions, GenServerOptions} = split_start_options(Options),
      gen_server:start_link(Name, ?MODULE, {Mod, Args, TickOptions}, GenServerOptions).
  
  %% ------------------------------------------------------------------
  %% gen_server Function Definitions
  %% ------------------------------------------------------------------
  
  -spec init({Mod :: module(), Args :: term(), TickOptions :: [{ticks, tick_start_option()}]})
          -> {ok, State :: term(), Timeout :: non_neg_integer()} |
             {stop, Reason :: term()} | ignore.
  init({Mod, Args, TickOptions}) ->
      NowNS = now_timestamp_ns(),
      TickSettings = proplists:get_value(ticks, TickOptions, []),
      Ticks = lists:map(
                fun ({TickId, TickDurationMS}) ->
                        #tick{id = TickId,
                              duration_ns = TickDurationMS * 1000000,
                              deadline_ns = NowNS,
                              generation = 0}
                end,
                TickSettings),
      undefined = put(?PROCDIC_MODULE, Mod),
      undefined = put(?PROCDIC_TICKS, Ticks),
      inject_init_timeout(Mod:init(Args)).
  
negative.code:           id :: term(),
            duration_ns :: pos_integer(),
            deadline_ns :: timestamp(),
            generation :: non_neg_integer(),
            skip_missed :: boolean()
  }).
  -type tick() :: #tick{}.
  
  