tests pass
refactored tests
more refacotring