full functionality with unit tests