 fileprivate extension Swen where EventType: StickyEvent {
 
     func register(_ observer: AnyObject, onQueue queue: OperationQueue, handler: @escaping EventListenerClosure) {
-        _ = editListenersSemaphore.wait(timeout: DispatchTime.distantFuture)
-        defer { editListenersSemaphore.signal() }
+        editListenersMutex.wait()
+        defer { editListenersMutex.signal() }
 
         let listener = EventListener<EventType>(observer, queue, handler)
         listeners.append(listener)
         if let sticky = sticky {
             listener.queue.addOperation { [weak listener] in
-                listener?.post(sticky)
+                listener?.post(sticky, async: false)
             }
         }
     }
 
     func post(_ event: EventType) {
-        _ = stickySemaphore.wait(timeout: DispatchTime.distantFuture)
+        stickyMutex.wait()
+        defer { stickyMutex.signal() }
         sticky = event
-        stickySemaphore.signal()
-
         postToAll(event)
     }
 


    typealias EventListenerClosure = Swen<EventType>.EventListenerClosure
    weak var observer: AnyObject?
    var observerPointer: UnsafeRawPointer
    let queue: OperationQueue
    let handler: EventListenerClosure
    let eventClassName: String

        self.eventClassName = String(describing: observer)
    }

    func post(_ event: EventType, async: Bool) {
        guard let _ = observer else {
            assertionFailure("One of the observers did not unregister, but already dealocated, observer info: " + eventClassName)
            return
        }

        if !async && OperationQueue.current == queue {
            handler(event)
        } else {
            queue.addOperation { [weak self] in
