[minor] allow callback arg and use exported extension
[major] extend listen functionality