     
     public init(capacity:Int?=nil) {
         self.capacity = capacity
-    }
-    
+        self.futureQueue = Queue.simpleFutureStreams
+    }
+
+    public init(queue:Queue, capacity:Int?=nil) {
+        self.capacity = capacity
+        self.futureQueue = queue
+    }
+
     // should be future mixin
     internal func complete(result:Try<T>) {
         let future = Future<T>()
         future.complete(result)
-        Queue.simpleFutureStreams.sync {
+        self.futureQueue.async {
             self.addFuture(future)
             for complete in self.saveCompletes {
                 complete(future)

    }
    
    public func onComplete(executionContext:ExecutionContext, complete:Try<T> -> Void) {
        Queue.simpleFutureStreams.sync {
            let futureComplete : InFuture = {future in
                future.onComplete(executionContext, complete:complete)
            }

    public func success(value:T) {
        self.future.success(value)
    }

    public func failure(error:NSError)  {
        self.future.failure(error)
    }

}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Future
public class Future<T> {
    
    internal let defaultExecutionContext: ExecutionContext  = QueueContext.main

    private var result:Try<T>?

    typealias OnComplete                                    = Try<T> -> Void
    private var saveCompletes                               = [OnComplete]()
    private let futureQueue : Queue
    
    public var completed : Bool {
        return self.result != nil
    }
    
    public init() {
        self.futureQueue = Queue.simpleFutures
    }
    
    public init(queue:Queue) {
        self.futureQueue = queue
    }

    // should be future mixin
    internal func complete(result:Try<T>) {
        self.futureQueue.async {
            if self.result != nil {
                SimpleFuturesException.futureCompleted.raise()
            }
