 }
 
 // Concrete future wrapper given an instance of a `FutureProtocol`.
-private final class ForwardedTo<Future: FutureProtocol>: FutureBox<Future.Value> {
+private final class ForwardedTo<Future: FutureProtocol>: Box<Future.Value> {
     let base: Future
     init(base: Future) {
         self.base = base
     }
 
-    override func upon(_ executor: DispatchQueue, execute body: @escaping(Future.Value) -> Void) {
+    override func upon(_ executor: Future.PreferredExecutor, execute body: @escaping(Future.Value) -> Void) {
         return base.upon(executor, execute: body)
     }
 

}

// Concrete future wrapper that will never get filled.
private final class Never<Value>: FutureBox<Value> {
    override init() {}

    override func upon(_: DispatchQueue, execute _: @escaping(Value) -> Void) {}

    override func upon(_: Executor, execute _: @escaping(Value) -> Void) {}


///   ensuring that only your implementation can fill the deferred value
///   using the `PromiseProtocol` aspect.
public struct Future<Value>: FutureProtocol {
    private let box: Box<Value>

    /// Create a future whose `upon(_:execute:)` methods forward to `base`.
    public init<OtherFuture: FutureProtocol>(_ base: OtherFuture)
