A bit of a more object oriented refactor