      * Checks for authorization status of location services
      * returns promise for authorization status on success, LocationManagerAuthorizationError on fail
      */
+    
+    public class func askForLocationServicesIfNeeded() -> Promise<CLAuthorizationStatus>{
+        return self.sharedManager.askForLocationServicesIfNeeded()
+    }
+    
     public func askForLocationServicesIfNeeded() -> Promise<CLAuthorizationStatus>{
         return Promise { fulfill, reject in
             if self.isLocationStatusDetermined() {

        }
        self.updateLocationManagerSettings()
    }
    func stopUpdatingLocationIfPossible() {
        if self.locationRequests.count == 0 && self.locationObservers.count == 0 {
            self.locationManager.stopUpdatingLocation()

    
    // MARK: - location observers
    
    public class func addLocationObserver(observer: LocationObserver, desiredAccuracy: CLLocationAccuracy? = nil, distanceFilter: CLLocationDistance? = nil, minimumTimeInterval: NSTimeInterval? = nil, maximumTimeInterval: NSTimeInterval? = nil) {
        self.sharedManager.addLocationObserver(observer, desiredAccuracy: desiredAccuracy, distanceFilter: distanceFilter, minimumTimeInterval: minimumTimeInterval, maximumTimeInterval: maximumTimeInterval)
    }
    
    public func addLocationObserver(observer: LocationObserver, desiredAccuracy: CLLocationAccuracy? = nil, distanceFilter: CLLocationDistance? = nil, minimumTimeInterval: NSTimeInterval? = nil, maximumTimeInterval: NSTimeInterval? = nil) {
        let item = LocationObserverItem(locationObserver: observer, locationManager: self, desiredAccuracy: desiredAccuracy, distanceFilter: distanceFilter, minimumTimeInterval: minimumTimeInterval, maximumTimeInterval: maximumTimeInterval)
        self.locationObservers.insert(item)
        
        self.startUpdatingLocationIfNeeded()
    }
    
    public class func removeLocationObserver(observer: LocationObserver) {
        self.removeLocationObserver(observer)
    }
    
    public func removeLocationObserver(observer: LocationObserver) {
