Add initial implementation and unit test