a lot of refactoring, that's getting better