all methods are implemented, need to test