make implementation almost work