     public func onComplete(ec: ExecutionContextType, _ c: Callback) -> Deferred {
         
         let callbackInContext: T -> Void = { result in
-            dispatch_sync(self.callbacksExecutingQueue) {
+            dispatch_async(self.callbacksExecutingQueue) {
                 ec.execute {
                     c(result)
                 }

            }
        }
        
        dispatch_sync(callbacksManagingQueue) {
            if let result = self.value {
                callbackInContext(result)
            } else {

        assert(self.value == nil, "Cannot complete Deferred more than once")
        assert(value != nil, "Result can't be nil")
        
        dispatch_async(callbacksManagingQueue) {
            
            self.value = value
            
