A lot of refactoring with a new approach (Out vs. out, etc.)