implemented all methods