using primitive message passing