Given that an error can happen, I'm not sure we want to do the callback here. Isn't it better to do the callback at the end, when you know that listen has actually completed...? What do you think?