modified to use Geo::IP