implemented all methods so far.