Refactoring
Major refactor