 	/// of those dependencies (chosen from among the versions that actually
 	/// exist for each).
 	private func nodePermutationsForCartfile(cartfile: Cartfile) -> SignalProducer<[DependencyNode], CarthageError> {
+		let scheduler = QueueScheduler(name: "org.carthage.CarthageKit.Resolver.nodePermutationsForCartfile")
+
 		return SignalProducer(values: cartfile.dependencies)
 			|> map { dependency -> SignalProducer<DependencyNode, CarthageError> in
 				let allowedVersions = SignalProducer<String?, CarthageError>.try {

	/// possible permutation of the dependencies for the given node (chosen from
	/// among the verisons that actually exist for each).
	private func graphPermutationsForDependenciesOfNode(node: DependencyNode, basedOnGraph inputGraph: DependencyGraph) -> SignalProducer<DependencyGraph, CarthageError> {
		return cartfileForDependency(node.dependencyVersion)
			|> concat(SignalProducer(value: Cartfile(dependencies: [])))
			|> take(1)
			|> flatMap(.Merge) { self.nodePermutationsForCartfile($0) }
			|> flatMap(.Concat) { dependencyNodes in
				return self.graphPermutationsForEachNode(dependencyNodes, dependencyOf: node, basedOnGraph: inputGraph)

					}
			}
			|> collect
			|> observeOn(scheduler)
			|> flatMap(.Concat) { nodeProducers in permutations(nodeProducers) }
	}

