Edited by Zhuo Chen: Add IMessage interface