 
 import Foundation
 
-public protocol Event {
+public protocol EventBase {}
+public protocol Event: EventBase {}
+public protocol StickyEvent: EventBase {}
 
-}
-
-public protocol StickyEvent: Event {
-
-}
-
-public class Swen<EventType: Event> {
+public class Swen<EventType: EventBase> {
 
     fileprivate var listeners = [EventListener<EventType>]()
     public typealias EventListenerClosure = (_ event: EventType) -> Void

}

// MARK: subscriber holder
fileprivate class EventListener<EventType: Event> {

    typealias EventListenerClosure = Swen<EventType>.EventListenerClosure
    weak var observer: AnyObject?

    }
}

// MARK: private non sticky methods
fileprivate extension Swen where EventType: Event {

    func register(_ observer: AnyObject, onQueue queue: OperationQueue, handler: @escaping EventListenerClosure) {
        _ = editListenersSemaphore.wait(timeout: DispatchTime.distantFuture)
        defer { editListenersSemaphore.signal() }

        let listener = EventListener<EventType>(observer, queue, handler)
        listeners.append(listener)
    }

    func post(_ event: EventType) {
        postToAll(event)
    }

}

// MARK: private sticky methods
fileprivate extension Swen where EventType: StickyEvent {

    func register(_ observer: AnyObject, onQueue queue: OperationQueue, handler: @escaping EventListenerClosure) {
        _ = editListenersSemaphore.wait(timeout: DispatchTime.distantFuture)
