factored out time-ticker logic