Refactoring: cleaner use of geolocation API (with model + events)