Complete the implemention, and test