location refactor and added reverse geolocation