   /// - parameter error: the Error to be transformed for the new `Deferred`
 
   public func recover(queue: DispatchQueue? = nil,
-                      transform: @escaping (_ error: Error) throws -> Deferred<Success>) -> Deferred<Success>
+                      transform: @escaping (_ error: Error) throws -> Deferred<Success, Error>) -> Deferred<Success, Error>
   {
     return TBD(queue: queue ?? self.queue) {
       resolver in

  /// - parameter task: the computation to be performed

  public static func Retrying(_ attempts: Int, qos: DispatchQoS = .current,
                              task: @escaping () throws -> Deferred) -> Deferred
  {
    let queue = DispatchQueue(label: "retrying", qos: qos)
    return Deferred.Retrying(attempts, queue: queue, task: task)

  /// - parameter task: the computation to be performed

  public static func Retrying(_ attempts: Int, queue: DispatchQueue,
                              task: @escaping () throws -> Deferred<Success, Error>) -> Deferred<Success, Error>
  {
    let error = Invalidation.invalid("task was not allowed a single attempt in \(#function)")
    let deferred = Deferred<Success, Error>(queue: queue, error: error)

    if attempts < 1 { return deferred }

    return Deferred.Retrying(attempts, deferred, task: task)
  }

  private static func Retrying(_ attempts: Int, _ deferred: Deferred<Success, Error>, task: @escaping () throws -> Deferred<Success, Error>) -> Deferred<Success, Error>
  {
    return (0..<attempts).reduce(deferred) {
      (deferred, _) in
