     }
 }
 
-// MARK: private helpers
-fileprivate extension Swen {
+// 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)

        instance().post(event)
    }

    static func unregister(_ observer: AnyObject) {
        instance().unregister(observer)
    }

}

// MARK: public sticky events interface
public extension Swen where EventType: StickyEvent {

    static var sticky: EventType? {
        return instance().sticky
    }
    
}

}

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

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