improved message passing