add timer.cancel
refactor
add some assert() parameter checks
update comments
update version