factory pattern for the events. use dis plz