 		if observers.containsObject(observer) == true {
 			observers.removeObject(observer)
 		}
+        if observers.count == 0 {
+            self.observers = NSHashTable.weakObjectsHashTable()
+        }
     }
 
     // MARK: - settings

    func startUpdating() {
        let status: LocationAuthorizationStatus = self.locationServicesStatus
        switch status {
        case .AllowedAlways, .AllowedWhenInUse:
            self.locationManager.startUpdatingLocation()
            self.locationManager.startMonitoringVisits()
            self.updatingLocation = true
            self.updateLocationManagerStateIfNeeded()
        default:
            break
        }
    }

    func stopUpdating() {
        let status: LocationAuthorizationStatus = self.locationServicesStatus
        switch status {
        case .AllowedAlways, .AllowedWhenInUse:
            self.locationManager.stopUpdatingLocation()
            self.locationManager.stopMonitoringVisits()
            self.updatingLocation = false
            self.updateLocationManagerStateIfNeeded()
        default:
            break
        }
    }
    
    func startLowPowerUpdating() {
        let status: LocationAuthorizationStatus = self.locationServicesStatus
        switch status {
        case .AllowedAlways, .AllowedWhenInUse:
            self.locationManager.startMonitoringSignificantLocationChanges()
            self.updatingLowPowerLocation = true
            self.updateLocationManagerStateIfNeeded()
        default:
            break
        }
    }

    func stopLowPowerUpdating() {
        let status: LocationAuthorizationStatus = self.locationServicesStatus
        switch status {
        case .AllowedAlways, .AllowedWhenInUse:
            self.locationManager.stopMonitoringSignificantLocationChanges()
            self.updatingLowPowerLocation = false
            self.updateLocationManagerStateIfNeeded()
        default:
            break
        }
    }
    

            
            var status: LocationAuthorizationStatus = .NotDetermined
            switch CLLocationManager.authorizationStatus() {
                case .AuthorizedAlways:
                    status = .AllowedAlways
                    break
                case .AuthorizedWhenInUse:
                    status = .AllowedWhenInUse
                    break
                case .Denied, .Restricted:
                    status = .Denied
                    break
                case .NotDetermined:
                    status = .NotDetermined
                    break
            }
            return status
        }
