starting custom event abstraction library