add initial version with working unit test