added more on implementation