         return try self.stack.metadataForEntityClass(type)
     }
 
-    public class func observeCommit(queue queue: NSOperationQueue? = nil, block: () -> Void) -> Observer {
+    public class func observeCommit(queue queue: NSOperationQueue? = nil, block: () -> Void) -> AnyObject {
         return Observer(notification: CoreDataContext.CommitNotification, object: nil, queue: queue ?? NSOperationQueue.mainQueue()) {
             _ in
             

        case Default
    }
    
    public class Observer {
        var observer: NSObjectProtocol
        
        init(notification: String, object: AnyObject?, queue: NSOperationQueue?, block: (NSNotification) -> Void) {

    let stack: CoreDataStack
    let updateTarget: UpdateTarget
    let updateQueue: dispatch_queue_t?
    var autoMergeObserver: AnyObject?

    public init(stack: CoreDataStack, mainContext: NSManagedObjectContext? = nil, updateTarget: UpdateTarget = .RootContext(autoMerge: false), updateOrder: UpdateOrder = .Default) throws {
        if updateOrder == .Serial {
