 			let request = ChunkRequest(regionId, atLod: streamedLodLevel)
 			pendingChunks.insert(request)
 			
-			streamQueue.async {																				// OK to load data concurrently...
+			streamQueue.async {
 				if let tessellation = self.loadGeometry(chunkName) {
-					DispatchQueue.main.sync {	// $ Idiotic
-						os_unfair_lock_lock(&self.readTessellationLock)				// But inserting must be done exclusively
+					self.publishQueue.async(flags: .barrier) {							// Don't allow reads while publishing finished chunk
 						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)")

	let fileData: Data	// fileData is memory-mapped so no need to attach a FileHandle here
	let fileHeader: WorldHeader
	let chunkTable: ChunkTable
	let streamQueue: DispatchQueue						// Async stream data from archive
	var readTessellationLock: os_unfair_lock	// Read-write lock for accessing tessellation cache
	
	var wantedLodLevel: Int
	var actualLodLevel: Int = 10

		
		streamQueue = DispatchQueue(label: "Geometry streaming", qos: .userInitiated, attributes: .concurrent)
		print("  - empty streaming op-queue setup")
		publishQueue = DispatchQueue(label: "Chunk delivery", qos: .userInitiated, attributes: .init())
		
		GeometryStreamer._shared = self
		
