updated to implement Delegate on event listeners