 public typealias MOCObserverBlock = (observer: MOCObserver, changes: [String: [NSManagedObjectID]]?) -> ()
 
 public class MOCObserver {
+    private struct MOCNotificationObserver {
+        let observer: NSObjectProtocol
+        let object: NSObject?
+    }
+    
     private let notificationCenter = NSNotificationCenter.defaultCenter()
     
     public private(set) var contexts: [NSManagedObjectContext]?
+    
+    private let workerQueue = NSOperationQueue()
+    private var observers = [MOCNotificationObserver]()
     
     public var queue: NSOperationQueue
     public var handler: MOCObserverBlock

        self.contexts = contexts
        self.handler = block
        self.queue = NSOperationQueue.currentQueue() ?? NSOperationQueue.mainQueue()
        if contexts?.count > 0 {
            for ctx in contexts! {
                notificationCenter.addObserver(self, selector: "managedObjectContextDidChange:", name: NSManagedObjectContextObjectsDidChangeNotification, object: ctx)
            }
        } else {
            notificationCenter.addObserver(self, selector: "managedObjectContextDidChange:", name: NSManagedObjectContextObjectsDidChangeNotification, object: nil)
        }
        if fireInitially {
            block(observer: self, changes: nil)

    }
    
    deinit {
        for observer in observers {
            notificationCenter.removeObserver(observer.observer, name: NSManagedObjectContextObjectsDidChangeNotification, object: observer.object)
        }
    }
    
