use timers instead of sleeps