 
     private var needsReloadDataClosure: (() -> Void)?
     
-    private var willChangeContentClosure: (() -> Void)?
-    private var didChangeContentClosure: (() -> Void)?
-    
-    private var didInsertSectionClosure: ((FetchedResultsSectionInfo<T>, Int) -> Void)?
-    private var didDeleteSectionClosure: ((FetchedResultsSectionInfo<T>, Int) -> Void)?
-    private var didUpdateSectionClosure: ((FetchedResultsSectionInfo<T>, Int) -> Void)?
-    
-    private var didInsertEntityClosure: ((T, NSIndexPath) -> Void)?
-    private var didDeleteEntityClosure: ((T, NSIndexPath) -> Void)?
-    private var didUpdateEntityClosure: ((T, NSIndexPath) -> Void)?
-    private var didMoveEntityClosure: ((T, NSIndexPath, NSIndexPath) -> Void)?
+    private lazy var willChangeContentClosures = Array<(() -> Void)>()
+    private lazy var didChangeContentClosures = Array<(() -> Void)>()
+    
+    private lazy var didInsertSectionClosures = Array<((FetchedResultsSectionInfo<T>, Int) -> Void)>()
+    private lazy var didDeleteSectionClosures = Array<((FetchedResultsSectionInfo<T>, Int) -> Void)>()
+    private lazy var didUpdateSectionClosures = Array<((FetchedResultsSectionInfo<T>, Int) -> Void)>()
+    
+    private lazy var didInsertEntityClosures = Array<((T, NSIndexPath) -> Void)>()
+    private lazy var didDeleteEntityClosures = Array<((T, NSIndexPath) -> Void)>()
+    private lazy var didUpdateEntityClosures = Array<((T, NSIndexPath) -> Void)>()
+    private lazy var didMoveEntityClosures = Array<((T, NSIndexPath, NSIndexPath) -> Void)>()
     
     private var sectionIndexTitleClosure: ((String) -> String!)?
 

    @objc func controller(controller: NSFetchedResultsController, didChangeSection sectionInfo: NSFetchedResultsSectionInfo, atIndex sectionIndex: Int, forChangeType type: NSFetchedResultsChangeType) {
        switch type {
        case .Insert:
            self.fetchedResultsController.didInsertSectionClosure?(FetchedResultsSectionInfo(underlyingSectionInfo: sectionInfo), sectionIndex)
            
        case .Delete:
            self.fetchedResultsController.didDeleteSectionClosure?(FetchedResultsSectionInfo(underlyingSectionInfo: sectionInfo), sectionIndex)
            
        case .Update:
            self.fetchedResultsController.didUpdateSectionClosure?(FetchedResultsSectionInfo(underlyingSectionInfo: sectionInfo), sectionIndex)
            
        default:
            break

    }
    
    @objc func controllerWillChangeContent(controller: NSFetchedResultsController) {
        for closure in self.fetchedResultsController.willChangeContentClosures {
            closure()
        }
    }
    
    @objc func controllerDidChangeContent(controller: NSFetchedResultsController) {
        for closure in self.fetchedResultsController.didChangeContentClosures {
            closure()
        }
    }
    
    @objc func controller(controller: NSFetchedResultsController, sectionIndexTitleForSectionName sectionName: String?) -> String? {
