We're doing too much here for my taste in one method - can we abstract this a little better by moving functionality into aptly named methods?