             }
         }
     }
+}
+
+extension EventBus : EventChainable {
 
     public func attach(chain: EventNotifyable) {
         self.serialQueue.sync {


    public static let shared: EventBus = EventBus()

    var subscribed: [ObjectIdentifier: Set<WeakBox>] = [:]
    var chained: Set<WeakBox> = []

    private let serialQueue: DispatchQueue = DispatchQueue(label: "com.regexident.eventbus")
    private let queue: DispatchQueue

    public init(queue: DispatchQueue = DispatchQueue.global()) {
        self.queue = queue
    }

    public func add<T>(subscriber: T, for eventType: T.Type) {
        self.serialQueue.sync {

            self.subscribed = [:]
        }
    }
}

extension EventBus : EventNotifyable {

    public func notify<T>(_ eventType: T.Type, closure: @escaping (T) -> ()) {
        self.serialQueue.sync {
