 				}
 				
 				if shouldSubscribe {
-					subscribeToSignalProducer(innerSignalProducer, state, observer, disposable)
+					subscribeToSignalProducer(innerSignalProducer, state)
 				}
 			}, error: { error in
 				sendError(observer, error)

		}
		
		if let nextSignalProducer = nextSignalProducer {
			subscribeToSignalProducer(nextSignalProducer, state, observer, disposable)
		} else if isComplete {
			sendCompleted(observer)
		}
	})
}

private struct ConcatState<T, E: ErrorType> {
	/// Whether the signal-of-signals has completed yet.
	var selfCompleted = false
	

}

/// Subscribes to the given signal producer.
private func subscribeToSignalProducer<T, E>(signalProducer: SignalProducer<T, E>, state: Atomic<ConcatState<T, E>>) {
	let serialDisposable = SerialDisposable()
	let serialDisposableCompositeHandle = state.value.disposable.addDisposable(serialDisposable)
	state.modify { (var state) in
		state.latestSignalCompleted = false
		return state
	}
	
	serialDisposable.innerDisposable = signalProducer.start(next: { value in
		sendNext(state.value.observer, value)
	}, error: { error in
		sendError(state.value.observer, error)
	}, completed: {
		var nextSignalProducer: SignalProducer<T, E>?
		var isComplete = false
