Rahul - Grand refactoring. Gives more structure and better organization to code. All tests currently broken. Will be fixed in subsequent commits.