Gracefully handle replacing existing listeners
Add some docstrings, and stop using def at runtime
Catch reader exceptions too, I suppose