Whole lots of refactoring