Major refactoring
Major commit