Large Refactoring (to continue)