updated (more sane) handler API