major refactor and geonames