     }
     
     public func execute(task:SafeTask) {
-        if RunLoop.current.isEqualTo(self) {
+        if let appartment = _appartment where appartment == Thread.current {
             //here we are safe to be lock-less
             _personalQueue.content.append(task)
         } else {
-            do {
-                _semaphore.wait()
-                _commonQueue.content.append(task)
-                defer {
-                    _semaphore.signal()
-                }
+            _semaphore.wait()
+            defer {
+                _semaphore.signal()
+                _wake.send()
             }
-            _wake.send()
+            _commonQueue.content.append(task)
         }
     }
     

    
    /// returns true if timed out, false otherwise
    public func run(until:NSDate, once:Bool) -> Bool {
        defer {
            self._stop.content = false
        }

        //same with async
        self._wake = try! Async(loop: _loop) { _ in
            sema.wait()
            defer {
                sema.signal()
            }
            personalQueue.content.appendContentsOf(commonQueue.content)
            commonQueue.content.removeAll()
        }
    }
    
