using generic timer to fsm