                           device's location updates.
      */
     public func startMonitoring(handler: LocationUpdateHandler?) {
-        if GeoLocator.authorizationStatus == .Yes && mode == .Continuous {
-            updateHandler = handler
+        guard mode == .Continuous else {
+            handler?(location)
+            return
+        }
+
+        let status = CLLocationManager.authorizationStatus()
+        guard status != .Restricted && status != .Denied else {
+            handler?(location)
+            return
+        }
+
+        guard !active else {
+            return
+        }
+
+        updateHandler = handler
+
+        if GeoLocator.authorizationStatus == .Yes {
+            active = true
             manager.startUpdatingLocation()
-            active = true
-        }
+        }
+        else {
+            waitingForAuthorization = true
+            manager.requestWhenInUseAuthorization()
+        }
+
     }
 
     /**

                break
            }
        }
    }

    // MARK: Responding to Authorization Changes


        switch status {
        case .AuthorizedAlways, .AuthorizedWhenInUse:
            if waitingForAuthorization {
                waitingForAuthorization = false
                switch mode {
                case .OneShot:
                    requestLocationUpdate(updateHandler)
