 
 		switch action {
 		case let .Block(thread):
-			if case let (v?, _) = thread.waitForSender() {
+			if case let .Completed(v) = thread.waitForSender() {
 				return v
 			}
 
 		case let .FromSender(thread):
-			if case let (v?, _) = thread.recv() {
+			if case let .Completed(v) = thread.recv() {
 				return v
 			}
 		}

	}

	public func start(onReady: CommReadyCallback) -> Comm {
		dispatch_group_enter(receivedValue)
		v = nil

		func haveValue(v: V?) {
			self.v = v
			dispatch_group_leave(self.receivedValue)
			onReady()
		}

		switch ch.recv(onReady) {
		case let .Block(thread):
			go {
				let (v, _) = thread.waitForSender()
				haveValue(v)
			}

			return thread.comm

		case let .FromSender(thread):
			go {
				let (v, _) = thread.recv()
				haveValue(v)
			}

			return thread.comm
		}
	}

	public func wasSelected() {
		dispatch_group_wait(receivedValue, DISPATCH_TIME_FOREVER)

		// Calls into the block that is associated with the Select Case
		received(v!)
	}
}


		comm = syncedComm
	}

	private func recv() -> HandoffReceiveResult<V> {
		return comm.receiverEnter()
	}

	private func waitForRecv(v: V) -> HandoffResult {
		return comm.senderEnter(v)
	}
}
