separating message layer from invocation and events layer