 		producer.startWithSignal { signal, signalDisposable in
 			let outerSignalDisposable = signal.observe(next: { innerSignalProducer in
 				var shouldSubscribe: Bool = true
-				state.modify { oldState in
-					if oldState.activeDisposables.count >= 1 {
-						var newState = oldState
-						newState.queuedSignalProducers.append(innerSignalProducer)
+				state.modify { (var state) in
+					if state.activeDisposables.count >= 1 {
+						state.queuedSignalProducers.append(innerSignalProducer)
 						shouldSubscribe = false
-						return newState
+						return state
 					} else {
-						return oldState
+						return state
 					}
 				}
 				

				var nextSignalProducer: SignalProducer<T, E>?
				
				serialDisposableCompositeHandle.remove()
				state.modify { oldState in
					var newState = oldState
					newState.activeDisposables.filter { $0 !== serialDisposable }
					if newState.queuedSignalProducers.count == 0 {
						completeIfAllowed(newState)
					} else {
						nextSignalProducer = newState.queuedSignalProducers[0]
						newState.queuedSignalProducers.removeAtIndex(0)
					}
					return newState
				}
				
				if let nextSignalProducer = nextSignalProducer {

		subscribeToSignalProducer = Z { recur, signalProducer in
			let serialDisposable = SerialDisposable()
			let serialDisposableCompositeHandle = disposable.addDisposable(serialDisposable)
			state.modify { (var state) in
				state.activeDisposables.append(serialDisposable)
				return state
			}
			
			serialDisposable.innerDisposable = signalProducer.start(next: { value in
