         actions[action.title!] = action
         
         // listen to changes on the BPCompatibleAlertAction enabled field to update the UIAlertAction in the alertController
-        NSNotificationCenter.defaultCenter().addObserverForName(BPCompatibleAlertActionEnabledDidChangeNotification, object: action, queue: NSOperationQueue.mainQueue()) { (notification) in
-            if self.isiOS8 {
+        let observerObject = NSNotificationCenter.defaultCenter().addObserverForName(BPCompatibleAlertActionEnabledDidChangeNotification, object: action, queue: NSOperationQueue.mainQueue()) { (notification) in
+            if self.uiAlertControllerAvailable {
+			
+				// This reference to self.alertController has the side effect of preventing ARC from releasing self, which on iOS 7 avoids a crash if the external client code hasn't explicitly retained this alertController.
                 for a in self.alertController.actions {
                     if a.title == action.title {
                         if let internalAction = a as? UIAlertAction {

                }
            }
        }
    }
    
    public func addTextFieldWithConfigurationHandler(configurationHandler : BPCompatibleTextFieldConfigruationHandler ) -> Void {

    }
    
    public func textFieldAtIndex(index: Int) -> UITextField? {
        if uiAlertControllerAvailable {
            if alertController.textFields?.count > index {
                if let textField: UITextField = alertController.textFields![index] as? UITextField {
                    return textField
