Major refactoring part 1
Major refactoring part 2
Major refactoring part 3
Major refactoring part 4
Major refactoring part 5
Major refactoring part 6
Major refactoring part 7
Major refactoring part 8
Major refactoring part 9