         if newNotifications.isEmpty { self.notificationsKeyedSender.removeObjectForKey(sender) }
         else { self.notificationsKeyedSender.setObject(newNotifications, forKey: sender) }
       }
-      
-    }
-    else {
-//      self.notificationsKeyedName[name]?._removeNotification(name)
-      if let notifications = self.notificationsKeyedName[name] {
-        let newNotifications = notifications.filter { ($0 as Notification<T>).name != name }
-        if newNotifications.isEmpty { self.notificationsKeyedName[name] = nil }
-        else { self.notificationsKeyedName[name] = newNotifications }
-
-    }
-    
-//    self.notificationsUnsorted._removeNotification(name)
-    
-   }
+      else { self.removeNotifications(name) }
+    }
+    else { self.removeNotifications(name) }
+    
+    self.notificationsUnsorted = self.notificationsUnsorted.filter  {
+      return $0.name != name && $0.sender !== sender
+    }
+
+  }
+  
+  func removeNotifications(name:String) {
+    if let notifications = self.notificationsKeyedName[name] {
+      let newNotifications = notifications.filter { ($0 as Notification<T>).name != name }
+      if newNotifications.isEmpty { self.notificationsKeyedName[name] = nil }
+      else { self.notificationsKeyedName[name] = newNotifications }
+    }
   }
   
   //Remove notifications with the name from both sender and without sender

//    }

    notifications = notifications ?? self.notificationsKeyedName[name]
//    ADD USERINFO IN EXECUTE and then remove after posting
    if let notifications = notifications {
      for notification in notifications { notification.execute() }
    }

        let newNotifications = notifications.filter { ($0 as Notification<T>) !== notification }
        if newNotifications.isEmpty { self.notificationsKeyedName[name] = nil }
        else { self.notificationsKeyedName[name] = newNotifications }
      }
    }
    

    self.notificationsUnsorted = self.notificationsUnsorted.filter  { return $0 != notification }
    
  }
  
  //Remove notification with name or name & sender
  func removeNotification(name:String, sender: AnyObject? = nil) {
    let name = name
    let sender: AnyObject? = sender
    
    if let sender: AnyObject = sender {
      if let notifications = self.observersKeyedNameForSender(sender)?[name] {
