message passing done , nothing tested :D