add message passing and message splicing