removed timer, replaced with callback