 	}
 	
 	private func streamMissingPrimitive(for regionHash: RegionHash) {
-		guard Thread.isMainThread else { fatalError("Stream requests must only be placed from the main thread")	}
-		
 		guard let regionId = regionIdLookup[regionHash] else {
 			print("RegionId lookup failed for hash \(regionHash)")
 			return

	
	func tessellation(for regionHash: RegionHash, atLod lod: Int, streamIfMissing: Bool = false) -> GeoTessellation? {
		let key = regionHashLodKey(regionHash, atLod: lod)
		if let found = tessellationCache[key] {
			return found
		} else if streamIfMissing {
			streamMissingPrimitive(for: regionHash)

		// Start streaming failed requests from the current frame
		for regionId in frameChunkRequests {
			let chunkName = chunkLodName(regionId, atLod: streamedLodLevel)
			let request = ChunkRequest(regionId, atLod: streamedLodLevel)
			pendingChunks.insert(request)
			
			streamQueue.async {																				// OK to load data concurrently...
				if let tessellation = self.loadGeometry(chunkName) {
					DispatchQueue.main.sync {	// $ Idiotic
						os_unfair_lock_lock(&self.readTessellationLock)				// But inserting must be done exclusively
						self.deliveredChunks.append((request, tessellation))
						os_unfair_lock_unlock(&self.readTessellationLock)			// $ Could this be barrier blocks now that loading doesn't block as bad?
					}
				} else {
					print("No geometry chunk available for \(chunkName)")
