Implemented all needed features