     
     :param: action Function or closure with info:AnyObject? argument
     */
-    class func subscribe(events: [T], action: Action.InfoAction) {
+    class func subscribe(events: [EventType], action: Action.InfoAction) -> String {
+        let token = NSUUID().UUIDString
         let eventer = Eventer.sharedInstance
         for event in events {
-            eventer.actions.append((event, Action.Info(action)))
-        }
-    }
-    
-    /**
-    Unsubscribe all actions from this event
-    
-    :param: event Your event
-    */
-    class func unsubscribe(event: T) {
+            eventer.actions.append((token:token, event:event, action:Action.Info(action)))
+        }
+        return token
+    }
+    
+    /**
+    Unsubscribe action for event with specific token
+    
+    :param: event Your event
+    
+    :param: token Subscription token
+    */
+    class func unsubscribe(event: EventType, token: String) {
         let eventer = Eventer.sharedInstance
         var index = 0
         for action in eventer.actions {
-            if action.0 == event {
+            if action.token == token {
                 eventer.actions.removeAtIndex(index)
+                break
             }
             index += 1
         }
     }
     
-    static var sharedInstance:Eventer<T> {
+    /**
+    Unsubscribe all actions from this event
+    
+    :param: event Your event
+    */
+    class func unsubscribe(event: EventType) {
+        let eventer = Eventer.sharedInstance
+        var index = 0
+        for action in eventer.actions {
+            if action.event == event {
+                eventer.actions.removeAtIndex(index)
+            }
+            index += 1
+        }
+    }
+    
+    static var sharedInstance:Eventer<EventType> {
         for eventerInstance in __eventerInstances {
-            if let instance = eventerInstance as? Eventer<T> {
+            if let instance = eventerInstance as? Eventer<EventType> {
                 return instance
             }
         }
-        let eventer = Eventer<T>()
+        let eventer = Eventer<EventType>()
         __eventerInstances.append(eventer)
         return eventer
     }
     
-    private var actions = [(T, Action)]()
+    typealias Subscription = (token:String, event:EventType, action:Action)
+    private var actions = [Subscription]()
 }
-
-
 /**
 Do not change it! Internal variable for holding Eventer instances.
 */
 var __eventerInstances = [AnyObject]()
+
+
+/**
+NSNotificationCenter wrapper.
+*/
+class Notificator {
+    /**
+    Subscribe notification action to NSNotification
+    
+    :param: event Your string event
+    
+    :param: action Function or closure with notification:NSNotification! argument
+    
+    :returns: Subscription token
+    */
+    class func subscribe(event: String, action: Action.NotificationAction) -> NSObjectProtocol {
+        return NSNotificationCenter.defaultCenter().addObserverForName(event, object: nil, queue: nil, usingBlock: action)
+    }
+    
+    /**
+    Subscribe notification action to NSNotification
+    
+    :param: token Subscription token
+    */
+    class func unsubscribe(token: NSObjectProtocol) {
+        NSNotificationCenter.defaultCenter().removeObserver(token)
+    }
+}
 
 
 /**

    
    :param: info Any object you want to pass to actions
    */
    class func publish(event: T, info: AnyObject?) {
        publish(event, info: info, to:.Immediate)
    }
    

    
    :param: action Function or closure with info:AnyObject? argument
    */
    class func subscribe(event: EventType, action: Action.InfoAction) -> String {
        return subscribe([event], action: action)
    }
    
    /**
