New design.
More refactoring.