refactored even more, the tests are much more readable now.