     }
 
     override func run<O: ObserverType where O.E == S.E>(observer: O) -> Disposable {
-        let sink = FlatMapFirstSink(source: _source, selector: _selector, observer: observer)
-        sink.disposable = sink.run()
+        let sink = FlatMapFirstSink<SourceType, S, O>(selector: _selector, observer: observer)
+        sink.disposable = sink.run(_source)
         return sink
     }
 }

    private let _sourceSubscription = SingleAssignmentDisposable()

    private var _stopped = false
    
    init(source: Observable<SourceType>, observer: O) {
        _source = source
        super.init(observer: observer)
    }
    
    func performMap(element: SourceType) throws -> S {
        abstractMethod()
    }

    private var _index = 0
    private let _selector: Selector

    init(selector: Selector, observer: O) {
        _selector = selector
        super.init(observer: observer)
    }

    override func performMap(element: SourceType) throws -> S {
