Add initial implementation, unit tests