done with the first implementation