   /// - parameter transform: the transform to be performed
   /// - returns: a `Deferred` reference representing the return value of the transform
 
-  public func map<U>(queue: dispatch_queue_t, qos: qos_class_t = QOS_CLASS_UNSPECIFIED, transform: (T) -> Result<U>) -> Deferred<U>
-  {
-    return Mapped<U>(queue: queue, qos: qos, source: self, transform: transform)
+  public func flatMap<U>(queue: dispatch_queue_t, qos: qos_class_t = QOS_CLASS_UNSPECIFIED, transform: (T) -> Deferred<U>) -> Deferred<U>
+  {
+    return Bind<U>(queue: queue, qos: qos, source: self, transform: transform)
+  }
+}
+
+// MARK: execute a transform when determined with an error -- flatMap for the ErrorType path.
+
+extension Deferred
+{
+  /// Enqueue a transform to be computed asynchronously if and when `self` becomes determined with an error.
+  /// The transforming closure will be enqueued on the global queue at the current quality of service class.
+  /// - parameter transform: the transform to be performed
+  /// - returns: a `Deferred` reference representing the return value of the transform
+
+  public final func recover(transform: (ErrorType) -> Deferred<T>) -> Deferred<T>
+  {
+    return recover(dispatch_get_global_queue(qos_class_self(), 0), transform: transform)
+  }
+
+  /// Enqueue a transform to be computed asynchronously if and when `self` becomes determined with an error.
+  /// The transforming closure will be enqueued on the global queue at the current quality of service class.
+  /// - parameter qos: the quality-of-service to associate with the closure
+  /// - parameter transform: the transform to be performed
+  /// - returns: a `Deferred` reference representing the return value of the transform
+
+  public final func recover(qos: qos_class_t, transform: (ErrorType) -> Deferred<T>) -> Deferred<T>
+  {
+    return recover(dispatch_get_global_queue(qos, 0), transform: transform)
+  }
+
+  /// Enqueue a transform to be computed asynchronously if and when `self` becomes determined with an error.
+  /// The transforming closure will be enqueued on the global queue at the current quality of service class.
+  /// - parameter queue: the `dispatch_queue_t` onto which the closure should be queued
+  /// - parameter qos: the quality-of-service to associate with the closure
+  /// - parameter transform: the transform to be performed
+  /// - returns: a `Deferred` reference representing the return value of the transform
+
+  public func recover(queue: dispatch_queue_t, qos: qos_class_t = QOS_CLASS_UNSPECIFIED, transform: (ErrorType) -> Deferred<T>) -> Deferred<T>
+  {
+    return Bind(queue: queue, qos: qos, source: self, transform: transform)
   }
 }
 

  }
}

// MARK: flatMap: asynchronously transform a `Deferred` into another

extension Deferred
{
  /// Enqueue a transform to be computed asynchronously after `self` becomes determined.
  /// The transforming closure will be enqueued on the global queue at the current quality of service class.
  /// - parameter transform: the transform to be performed
  /// - returns: a `Deferred` reference representing the return value of the transform

  public final func flatMap<U>(transform: (T) -> Deferred<U>) -> Deferred<U>
  {
    return flatMap(dispatch_get_global_queue(qos_class_self(), 0), transform: transform)
  }

  /// Enqueue a transform to be computed asynchronously after `self` becomes determined.

  /// - parameter transform: the transform to be performed
  /// - returns: a `Deferred` reference representing the return value of the transform

  public final func map<U>(qos: qos_class_t, transform: (T) -> Result<U>) -> Deferred<U>
  {
    return map(dispatch_get_global_queue(qos, 0), transform: transform)
  }

  /// Enqueue a transform to be computed asynchronously after `self` becomes determined.
