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