Implemented most methods, some waiting for tests