   case InvalidState
 }
 
-public class DeferredURLSessionTask<Value>: Transfer<Value>
+class DeferredURLSessionTask<Value>: Transfer<Value>
 {
   public let urlSessionTask: URLSessionTask
 

  }

  public func deferredDataTask(qos: DispatchQoS = .current,
                               with request: URLRequest) -> DeferredURLSessionTask<(Data, HTTPURLResponse)>
  {
    let tbd = TBD<(Data, HTTPURLResponse)>(qos: qos)
    let task = dataTask(with: request, completionHandler: dataCompletion(tbd))
    return DeferredURLSessionTask(source: tbd, task: task)
  }

  public func deferredDataTask(qos: DispatchQoS = .current,
                               with url: URL) -> DeferredURLSessionTask<(Data, HTTPURLResponse)>
  {
    return deferredDataTask(qos: qos, with: URLRequest(url: url))
  }

  public func deferredUploadTask(qos: DispatchQoS = .current,
                                 with request: URLRequest, fromData bodyData: Data) -> DeferredURLSessionTask<(Data, HTTPURLResponse)>
  {
    let tbd = TBD<(Data, HTTPURLResponse)>(qos: qos)
    let task = uploadTask(with: request, from: bodyData, completionHandler: dataCompletion(tbd))
    return DeferredURLSessionTask(source: tbd, task: task)
  }

  public func deferredUploadTask(qos: DispatchQoS = .current,
                                 with request: URLRequest, fromFile fileURL: URL) -> DeferredURLSessionTask<(Data, HTTPURLResponse)>
  {
    let tbd = TBD<(Data, HTTPURLResponse)>(qos: qos)
    let task = uploadTask(with: request, fromFile: fileURL, completionHandler: dataCompletion(tbd))
    return DeferredURLSessionTask(source: tbd, task: task)

  }

  public func deferredDownloadTask(qos: DispatchQoS = .current,
                                   with request: URLRequest) -> Deferred<(URL, FileHandle, HTTPURLResponse)>
  {
    guard let scheme = request.url?.scheme, scheme == "http" || scheme == "https"
      else {
        let e = DeferredError.invalid(
          "deferred does not support url scheme \"\(request.url?.scheme! ?? "unknown")\""
        )
        return Deferred(error: e)
    }

    let tbd = TBD<(URL, FileHandle, HTTPURLResponse)>(qos: qos)
    let task = downloadTask(with: request, completionHandler: downloadCompletion(tbd))
    return DeferredDownloadTask(source: tbd, task: task)
  }

  public func deferredDownloadTask(qos: DispatchQoS = .current,
                                   with url: URL) -> Deferred<(URL, FileHandle, HTTPURLResponse)>
  {
    return deferredDownloadTask(qos: qos, with: URLRequest(url: url))
  }

  public func deferredDownloadTask(qos: DispatchQoS = .current,
                                   withResumeData data: Data) -> Deferred<(URL, FileHandle, HTTPURLResponse)>
  {
    let tbd = TBD<(URL, FileHandle, HTTPURLResponse)>(qos: qos)

