 
     public static let shared: EventBus = EventBus()
 
-    var subscribed: [ObjectIdentifier: Set<WeakBox>] = [:]
-    var chained: Set<WeakBox> = []
+    fileprivate var subscribed: [ObjectIdentifier: Set<WeakBox>] = [:]
+    fileprivate var chained: Set<WeakBox> = []
 
-    private let serialQueue: DispatchQueue = DispatchQueue(label: "com.regexident.eventbus")
-    private let queue: DispatchQueue
+    fileprivate let serialQueue: DispatchQueue = DispatchQueue(label: "com.regexident.eventbus")
+    fileprivate let queue: DispatchQueue
 
     public init(queue: DispatchQueue = DispatchQueue.global()) {
         self.queue = queue
     }
+}
+
+extension EventBus : EventSubscribable {
 
     public func add<T>(subscriber: T, for eventType: T.Type) {
         self.serialQueue.sync {

            self.subscribed = [:]
        }
    }

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

            }
        }
    }
}

extension EventBus : EventChainable {

    public func attach(chain: EventNotifyable) {
        self.serialQueue.sync {
