Use timer based event model and other improvements