         }.name("\(self.name)-success")
     }
     
+    ///
+    /// failure (rejected or cancelled) + closure returning nothing
+    /// used as transpalent (i.e. it doesn't affect passed Task) handler.
+    ///
+    /// - e.g. task.failure { errorInfo -> Void in ... }
+    /// - e.g. task.failure { error, isCancelled -> Void in ... }
+    ///
+    
+    public func failure(failureClosure: ErrorInfo -> Void) -> Task
+    {
+        var dummyCanceller: Canceller? = nil
+        return self.failure(&dummyCanceller, failureClosure)
+    }
+    
+    public func failure<C: Canceller>(inout canceller: C?, _ failureClosure: ErrorInfo -> Void) -> Task
+    {
+        return self.failure(&canceller) { (errorInfo: ErrorInfo) -> Task in
+            return Task(errorInfo: errorInfo)
+        }
+    }
+
     ///
     /// failure (rejected or cancelled) + closure returning **value**
     ///

    }
    
    ///
    /// success (fulfilled) + closure returning **value**
    ///
    /// - e.g. task.success { value -> NextValueType in ... }

        self.init(initClosure: { progress, fulfill, reject, configure in
            promiseInitClosure(fulfill: fulfill, reject: { error in reject(error) })
        })
    }
    
    ///
    /// creates rejected task with ErrorInfo
    ///
    /// - e.g. Task<P, V, E>(errorInfo: someErrorInfo)
    ///
    internal convenience init(errorInfo: ErrorInfo)
    {
        self.init(_initClosure: { machine, progress, fulfill, _reject, configure in
            _reject(errorInfo)
        })
        
        self.name = "RejectedTask"
    }
    
    /// internal-init for accessing `machine` inside `_initClosure`
