This method's logic screams "duck type me!" to me. Do you think it would be a large amount of work to see if the different `*Location` classes could be refactored to simply return a Hash with their important bits to this method?