added message abstraction