         switch status {
         case .AuthorizedAlways:
             return .Authorized
-        case .Restricted, .Denied, .AuthorizedWhenInUse:
+        case .Restricted, .Denied:
             return .Unauthorized
+        case .AuthorizedWhenInUse:
+            let defaults = NSUserDefaults.standardUserDefaults()
+            // curious why this happens? Details on upgrading from WhenInUse to Always:
+            // https://github.com/nickoneill/PermissionScope/issues/24
+            if defaults.boolForKey(PermissionScopeConstants.requestedInUseToAlwaysUpgrade) == true {
+                return .Unauthorized
+            } else {
+                return .Unknown
+            }
         case .NotDetermined:
             return .Unknown
         }

    func requestLocationAlways() {
        switch statusLocationAlways() {
        case .Unknown:
            locationManager.delegate = self
            locationManager.requestAlwaysAuthorization()
        case .Unauthorized:

import AVFoundation
import Photos
import EventKit

struct PermissionScopeConstants {
    static let requestedInUseToAlwaysUpgrade = "requestedInUseToAlwaysUpgrade"
}

public enum PermissionType: String {
    case Contacts       = "Contacts"
