MAJOR update, refactored majority of the project. Add events.