             }
             s.open(chan.calleeContext) {
                 base = $0
-                return { chan.emitIfOpen($0 >>| { $0 }) }
+                base!.subscribe {
+                     chan.emitIfOpen($0 >>| { $0 })
+                }
             }
         }
     }

            }
            f(chan).open(chan.calleeContext) {
                base = $0
                return { chan.emitIfOpen($0) }
            }
        }
    }

        let count = self.count
        next = { e in
            if let x = e.value {
                block(x).open(chan.calleeContext) { inner in
                    alive.append(inner)
                    inner.subscribe { e in
                        switch e {
                        case let .Next(_): chan.emitIfOpen(e)
                        case let .Fail(x): chan.emitIfOpen(.Fail(x))
                            fallthrough
                        default:
                            for i in 0 ..< alive.count {
                                if (alive[i] === inner) {
                                    alive.removeAtIndex(i)
                                    break
                                }
