Lots of refactoring out into tiny components