revamping plugins to use events (plugin authors don't need to know how to do the eventing)