implemented all features