More testable, better event model