transformed IEvent interface in an abstract class instead