ticket:3 tests
ticket:3 implementation