did some implementation