Refactore using events and a lot of cleanup.