use cleaner event names
de-duplicate some of the listenToOnce wrapCallback logic