implement all the other methods