Implemented all requirements