rationalize events system with delegateEvents override