#51 Not all tests passing yet, half way through refactor.