         }
     }
     
-    internal func presentReEnablePopup(title: String, message: String) {
+    private func presentReEnablePopup() {
+        if self.configuration.canPresentReEnablePopup(permission: self.permission) {
+            self.presentReEnablePopup(title: self.reEnablePopupData.title, message: self.reEnablePopupData.message)
+        }
+    }
+
+    private func presentReEnablePopup(title: String, message: String) {
         let alert = UIAlertController(title: title, message: message, preferredStyle: .alert)
         
         let allow = UIAlertAction(title: "Allow", style: .default) { (action) in

            topController.present(alert, animated: true, completion: nil)
        }
    }
}

typealias ArekPermissionResponse = (ArekPermissionStatus) -> Void

protocol ArekPermissionProtocol {
    var identifier: String { get }
    
    // MARK: Logic
    func status(completion: @escaping ArekPermissionResponse)
    func manage(completion: @escaping ArekPermissionResponse)
    func askForPermission(completion: @escaping ArekPermissionResponse)
}

class ArekBasePermission {
    var configuration: ArekConfiguration
    var initialPopupData: ArekPopupData
    var reEnablePopupData: ArekPopupData
    var permission: ArekPermissionProtocol!
    
    init() {
        self.configuration = ArekConfiguration(frequency: .OnceADay, presentInitialPopup:
            true, presentReEnablePopup: true)
        
        self.initialPopupData = ArekPopupData()
        self.reEnablePopupData = ArekPopupData()
    }
    
    required init(configuration: ArekConfiguration, initialPopupData: ArekPopupData, reEnablePopupData: ArekPopupData) {
        self.configuration = configuration
        self.initialPopupData = initialPopupData
        self.reEnablePopupData = reEnablePopupData
    }
    
    internal func manageInitialPopup(completion: @escaping ArekPermissionResponse) {
        if self.configuration.presentInitialPopup {
            self.presentInitialPopup(title: self.initialPopupData.title, message: self.initialPopupData.message, completion: completion)
        } else {
            self.permission.status(completion: completion)
        }
    }
    
    private func presentInitialPopup(title: String, message: String, completion: @escaping ArekPermissionResponse) {
        let alert = UIAlertController(title: title, message: message, preferredStyle: .alert)
        
        let allow = UIAlertAction(title: "Enable", style: .default) { (action) in
