     }
 
     func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
-        currentLocation = manager.location?.coordinate
-        getWeatherViaLocation()
+        currentLocationSerialQueue.sync {
+            currentLocation = manager.location?.coordinate
+            guard let currentLocation = currentLocation else {
+                if #available(macOS 11.0, *) {
+                    logger.error("Getting location failed")
+                }
+                DispatchQueue.main.async { [weak self] in
+                    self?.statusItem.title = self?.locationErrorString
+                }
+                return
+            }
+            getWeatherViaLocation(currentLocation)
+        }
     }
 }

            }
        }
        eventMonitor?.start()
    }

    @objc func getWeather(_ sender: AnyObject?) {
        switch WeatherSource(rawValue: configManager.weatherSource) {
        case .latLong:
            guard let latLong = configManager.weatherSourceText else {
                DispatchQueue.main.async { [weak self] in
                    self?.statusItem.title = self?.latLongErrorString
                }
                return
            }
            getWeatherViaCoordinates(latLong)
        case .zipCode:
            guard let zipCode = configManager.weatherSourceText else {
                DispatchQueue.main.async { [weak self] in
                    self?.statusItem.title = self?.zipCodeErrorString
                }
                return
            }
            getWeatherViaZipCode(zipCode)
        default:
            getWeatherViaLocation()
        }
    }

    func createLocationTimer() -> Timer {
        Timer.scheduledTimer(
            withTimeInterval: locationTimerInterval,
            repeats: true,
            block: { [weak self] _ in self?.getLocation() }
        )
    }

    @objc func togglePopover(_ sender: AnyObject?) {
        if popover.isShown {
            closePopover(sender)
            resetWeatherTimer()
        } else {
            showPopover(sender)
        }
    }

    @objc func terminate() { NSApp.terminate(self) }

    private func resetWeatherTimer() {
        weatherTimer?.invalidate()

        })
    }

    // MARK: UI

    @objc func togglePopover(_ sender: AnyObject?) {
        if popover.isShown {
            closePopover(sender)
            resetWeatherTimer()
        } else {
            showPopover(sender)
        }
    }

    /// Popover stuff for listening for clicks outside the configure window
    private func showPopover(_ sender: AnyObject?) {
