All implementations must have simalar behaviour. * check contracts * input params * returns and exceptions