make listener call explicit, which prevents race condition in dispose