 
     public func statusLocationAlways() -> PermissionStatus {
         let status = CLLocationManager.authorizationStatus()
-        if status == CLAuthorizationStatus.AuthorizedAlways {
+        switch status {
+        case .AuthorizedAlways:
             return .Authorized
-        }
-
-        return .Unknown
+        case .Restricted, .Denied, .AuthorizedWhenInUse:
+            return .Unauthorized
+        case .NotDetermined:
+            return .Unknown
+        }
     }
 
     func requestLocationAlways() {
         if statusLocationAlways() != .Authorized {
             locationManager.delegate = self
             locationManager.requestAlwaysAuthorization()
+        } else if statusContacts() == .Unauthorized {
+            self.showDeniedAlert(.LocationAlways)
         }
     }
 

        let settings = UIApplication.sharedApplication().currentUserNotificationSettings()
        if settings.types != UIUserNotificationType.None {
            return .Authorized
        }

        return .Unknown
    }

    func requestNotifications() {
        if statusNotifications() != .Authorized {
            UIApplication.sharedApplication().registerUserNotificationSettings(UIUserNotificationSettings(forTypes: .Alert | .Sound | .Badge, categories: nil))
            self.pollForNotificationChanges()
        }
    }


            button.center = contentView.center
            button.frame.offset(dx: -contentView.frame.origin.x, dy: -contentView.frame.origin.y)
            button.frame.offset(dx: 0, dy: -80 + CGFloat(index * baseOffset))
            
            // TODO: New func to setUnauthorizedStyle ? new tintColor also ?
            // Question: Use (XXX, YYY) tuple instead of case XXX: if status() = YYY ? => Each Permission should know how to get it's status
            let type = configuredPermissions[index].type
            switch type {
            case .LocationAlways:
                if statusLocationAlways() == .Authorized {
                    setButtonAuthorizedStyle(button)
                    button.setTitle("Got Location".uppercaseString, forState: UIControlState.Normal)
                } else if statusNotifications() == .Unauthorized {
                    setButtonUnauthorizedStyle(button)
                    button.setTitle("Denied Location".uppercaseString, forState: UIControlState.Normal)
                }
            case .LocationInUse:
                if statusLocationInUse() == .Authorized {
                    setButtonAuthorizedStyle(button)
                    button.setTitle("Got Location".uppercaseString, forState: UIControlState.Normal)
                } else if statusLocationInUse() == .Unauthorized {
                    setButtonUnauthorizedStyle(button)
                    button.setTitle("Denied Location".uppercaseString, forState: UIControlState.Normal)
                }
            case .Contacts:
                if statusContacts() == .Authorized {
                    setButtonAuthorizedStyle(button)
                    button.setTitle("Allowed Contacts".uppercaseString, forState: UIControlState.Normal)
                } else if statusContacts() == .Unauthorized {
                    setButtonUnauthorizedStyle(button)
                    button.setTitle("Denied \(type.rawValue)".uppercaseString, forState: UIControlState.Normal)
                }
            case .Notifications:
                if statusNotifications() == .Authorized {
                    setButtonAuthorizedStyle(button)
                    button.setTitle("Allowed Notifications".uppercaseString, forState: UIControlState.Normal)
                } else if statusNotifications() == .Unauthorized {
                    setButtonUnauthorizedStyle(button)
                    button.setTitle("Denied \(type.rawValue)".uppercaseString, forState: UIControlState.Normal)
                }
                }
            }

