don't depend on geo.js