      A method for retrieving events with a predicate in date sorted order.
      - Parameter predicate: A NSPredicate.
      - Parameter completion: A completion call back.
-     */
-    open func reminders(matching predicate: NSPredicate, completion: @escaping ([EKReminder]) -> Void) {
-        eventStore.fetchReminders(matching: predicate, completion: { [completion = completion] (reminders) in
+     - Returns: A fetch reminders request identifier.
+     */
+    @discardableResult
+    open func reminders(matching predicate: NSPredicate, completion: @escaping ([EKReminder]) -> Void) -> Any {
+        return eventStore.fetchReminders(matching: predicate, completion: { [completion = completion] (reminders) in
             DispatchQueue.main.async { [completion = completion] in
                 completion(reminders ?? [])
             }

    }
    
    /**
     Fetch all the reminders in a given Array of calendar.
     - Parameter in calendars: An Array of EKCalendars.
     - Parameter completion: A completion call back.
     */
    open func reminders(in calendars: [EKCalendar], completion: @escaping ([EKReminder]) -> Void) {
        reminders(matching: predicateForReminders(in: calendars), completion: completion)
    }
}

extension Reminders {
    /**
     A method for creating new Reminder calendar.
     - Parameter list title: the name of the list.
     - Parameter completion: An optional completion call back.
     */
    open func create(list title: String, completion: ((Bool, Error?) -> Void)? = nil) {
        DispatchQueue.global(qos: .default).async { [weak self, completion = completion] in
            guard let s = self else {
                return
            }
            
            let list = EKCalendar(for: .reminder, eventStore: s.eventStore)
            list.title = title
            
            for source in s.eventStore.sources {
                if .local == source.sourceType {
                    list.source = source
                    
                    var created = false
                    var error: Error?
                    
                    do {
                        try s.eventStore.saveCalendar(list, commit: true)
                        created = true
                    } catch let e {
                        error = e
                    }
                    
                    DispatchQueue.main.async { [weak self, completion = completion] in
                        guard let s = self else {
                            return
                        }
                        s.delegate?.reminders?(reminders: s, list: list, created: created)
                        completion?(created, error)
                    }
                }
            }
        }
    }
    
    /**
     A method for deleting existing Reminder lists,
     - Parameter list identifier: the name of the list.
     - Parameter completion: An optional completion call back.
     */
    open func delete(list identifier: String, completion: ((Bool, Error?) -> Void)? = nil) {
        DispatchQueue.global(qos: .default).async { [weak self, completion = completion] in
            guard let s = self else {
                return
            }
            
            guard let list = s.eventStore.calendar(withIdentifier: identifier) else {
                return
            }
            
            var deleted = false
            var error: Error?
            
            do {
                try s.eventStore.removeCalendar(list, commit: true)
                deleted = true
            } catch let e {
                error = e
            }

    /**
     A delegation method that is executed when a new Reminders list is created
     - Parameter reminders: A reference to the Reminders.
     - Parameter calendar: An optional reference to the calendar created.
     - Parameter error: An optional error if the calendar failed to be created.
     */
    @objc
    optional func reminders(reminders: Reminders, calendar: EKCalendar?, error: Error?)
    
    /**
     A delegation method that is executed when a new Reminders list is created
     - Parameter reminders: A reference to the Reminder.
     - Parameter calendar: A reference to the calendar created.
     - Parameter deleted: A boolean describing if the operation succeeded or not.
     */
    @objc
    optional func reminders(reminders: Reminders, calendar: EKCalendar, deleted: Bool)
    
    /**
     A delegation method that is executed when a new Reminders list is created
