Breaking change to how listener() works, see readme. Other tweaks and enhancements.