split message from timout handlers for perf
use runtime types where possible
move to delegates
use list instead of dict

add perf tests
add todo
better tests