 
 let THGLocationErrorDomain: String = "THGLocationErrorDomain"
 
-public enum THGLocationErrorCode: Int {
+public enum THGLocationError: Int, NSErrorEnum {
     /// The user has denied access to location services or their device has been configured to restrict it.
     case AuthorizationDeniedOrRestricted
-    /// The caller is asking for authorization that's different from what the user has provided.
-    case AuthorizationChanged
+    /// The caller is asking for authorization 'always' but user has granted 'when in use'.
+    case AuthorizationWhenInUse
+    /// The caller is asking for authorization 'when in use' but user has granted 'always'.
+    case AuthorizationAlways
     /// Location services are disabled.
     case LocationServicesDisabled
+    
+    public var domain: String {
+        return "io.theholygrail.THGLocationError"
+    }
+    
+    public var errorDescription: String {
+        switch self {
+        case .AuthorizationDeniedOrRestricted:
+            return "The user has denied location services in Settings or has been restricted from using them."
+        case .AuthorizationWhenInUse:
+            return "The user has granted permission to location services only when the app is in use."
+        case .AuthorizationAlways:
+            return "The user has granted permission to location services always, so use that or change it."
+        case .LocationServicesDisabled:
+            return "Location services are not enabled."
+        }
+    }
 }
 
 /**

        var requestAuth = false
        switch authStatus {
        case .Denied, .Restricted:
            return NSError(
                domain: THGLocationErrorDomain,
                code: THGLocationErrorCode.AuthorizationDeniedOrRestricted.rawValue,
                userInfo: [NSLocalizedDescriptionKey: "The user has denied location services in Settings or has been restricted from using them."]
            )
        case .NotDetermined:
            requestAuth = true
        case .AuthorizedAlways:
            if authorization != .Always {
                return NSError(
                    domain: THGLocationErrorDomain,
                    code: THGLocationErrorCode.AuthorizationChanged.rawValue,
                    userInfo: [NSLocalizedDescriptionKey: "The user has granted permission to location services only when the app is in use."]
                )
            }
        case .AuthorizedWhenInUse:
            if authorization != .WhenInUse {
                return NSError(
                    domain: THGLocationErrorDomain,
                    code: THGLocationErrorCode.AuthorizationChanged.rawValue,
                    userInfo: [NSLocalizedDescriptionKey: "The user has granted permission to location services always, so use that."]
                )
            }
        }
        

    Request the specified authorization.
    
    :param: authorization The authorization being requested.
    :returns: An optional error that could happen when requesting authorization. See `THGLocationError`.
    */
    public func requestAuthorization(authorization: LocationAuthorization) -> NSError? {
        return locationAuthorizationProvider.requestAuthorization(authorization)
