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

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

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