implemented function *