added some implementation