Refactoring further, moving any low level code into it's own method