refactor geo to extract common classes