implemented all basic features