had better merge MessageHandler into one