refactor location information to have a Source class