Note, I don't really like my suggestion, I don't like lots of returns in a big method... I was trying to limit the size of the method by moving the code into methods and keep state small.