     fileprivate func updateLocation(location: CLLocation) {
         if let timeOfLastLocationUpdate = locationMonitor.timeOfLastLocationUpdate,
             timeOfLastLocationUpdate < location.timestamp {
-            locationMonitor.startMonitoringCurrentLocation()
-        }
-
-        if places.isEmpty {
-            updatePlaces(forLocation: location)
+            locationMonitor.startMonitoringForVisitAtCurrentLocation()
         }
 
         if sunriseSet == nil {
             updateSunRiseSetTimes(forLocation: location)
         }
+
+        updatePlaces(forLocation: location)
     }
 
     fileprivate func toggleLoadingUI(loading: Bool) {

            // TODO: how do we make sure the user wasn't interacting?
            headerView.numberOfPlacesLabel.text = "\(places.count) place" + (places.count != 1 ? "s" : "")
            placeCarousel.refresh()

            if oldValue.isEmpty,
                !places.isEmpty {
                openFirstPlace()
            }
        }
    }


        (self.presentedViewController as? PlaceDetailViewController)?.placesUpdated()

        if wasEmpty && !places.isEmpty {
            // Wrap the openClosedPlace in an async block to make sure its queued after the
            // carousel's refresh so the cells load before we invoke the transition
            DispatchQueue.main.async {
