         unobserveAll()
     }
     
-    // MARK: Observe with Clouse
+    // MARK: Observe with Closure
     
-    public func observe(notification: String?, object: NSObject? = nil, queue: NSOperationQueue? = nil, block: NotificationClouse) {
+    public func observe(notification: String?, object: NSObject? = nil, queue: NSOperationQueue? = nil, block: NotificationClosure) {
         let observer = DefaultCenter.addObserverForName(notification, object: object, queue: queue, usingBlock: block)
-        
         let info = NotificationInfo(observer: observer as! NSObject, name: notification, object: object)
         
-        with {
+        spinLock {
             self.blockInfos.insert(info)
         }
-        
     }
     
     // MARK: Observe with Selector

        selectorInfos.insert(notificationInfo)
    }
    
    
    // MARK: Unobserve
    
    public func unobserve(notification: String?, object: NSObject? = nil) {
        var deadInfos = Set<NotificationInfo>()
        
        with {
            for info in self.blockInfos {
                if info.name == notification && info.object == object {
                    self.DefaultCenter.removeObserver(info.observer, name: info.name, object: info.object)
                }
                
                deadInfos.insert(info)
            }
            

}

public class NotificationController: NSObject {
    public typealias NotificationClosure = (NSNotification!) -> Void
    
    private let observer: NSObject!
    private var blockInfos = Set<NotificationInfo>()
