Add initial implementation with unit tests