Refactored so all events go through the GenericEvents routines.