first version. 100% test coverage