Large refactor on Event Handling