 
             let block: @objc_block (CFNotificationCenter!, UnsafeMutablePointer<Void>, CFString!, UnsafePointer<Void>, CFDictionary!) -> Void = { _, _, _, _, _ in
 
-                if let message = self.messageWithIdentifier(identifier) {
-                    if self.messageListenerSet.contains(messageListener) {
-                        messageListener.listener.action(message)
-                    }
+                if self.messageListenerSet.contains(messageListener) {
+                    messageListener.listener.action(self.messageWithIdentifier(identifier))
                 }
             }
 


    public typealias Message = NSCoding

    public func passMessage(message: Message, withIdentifier identifier: String) {

        if identifier.isEmpty {
            fatalError("ERROR: Message need identifier")
        }

        var success = false

        if let filePath = filePathForIdentifier(identifier) {
            let data = NSKeyedArchiver.archivedDataWithRootObject(message)
            success = data.writeToFile(filePath, atomically: true)
        }

        if success {
            if let center = CFNotificationCenterGetDarwinNotifyCenter() {
                CFNotificationCenterPostNotification(center, identifier, nil, nil, 1)
                println("notifyForMessageWithIdentifier \(identifier)")
            }
        }
    }

    public struct Listener {

        public typealias Action = Message -> Void

        let name: String
        let action: Action

            CFNotificationCenterAddObserver(center, unsafeAddressOf(self), callBack, identifier, nil, CFNotificationSuspensionBehavior.DeliverImmediately)


            // Try fire Listener's action for first time

            listener.action(messageWithIdentifier(identifier))
        }
    }

