refactored events to treat any object as an event