separation of events and commands