reworked for much better TDD