refactor
more refactoring
Major refactor