Improve message listener API