use time-based ticking