Implemented and tested fully. Review is necessary only