This should probably be broken out into multiple things. There's different types of events that all run differently.