rewritten to follow TDD closer