Add implementation and the test