Implemented all methods. Untested code!