added an event publisher role and made EventPublisher a singleton