 	let fileData: Data	// fileData is memory-mapped so no need to attach a FileHandle here
 	let fileHeader: WorldHeader
 	let chunkTable: ChunkTable
-	let streamQueue: DispatchQueue
+	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
 	var lodCacheMiss: Bool = true
-	var frameChunkRequests: [RegionId] = []
-	var pendingChunks: Set<ChunkRequest> = []
+	var frameChunkRequests: [RegionId] = []							// Collects new requests for this frame
+	var pendingChunks: Set<ChunkRequest> = []						// Tracks outstanding stream requests
+	var deliveredChunks: [(ChunkRequest, GeoTessellation)] = []	// Chunks that finished streaming in this frame
+	
 	var tessellationCache: [Int : GeoTessellation] = [:]
 	var primitiveCache: [Int : IndexedRenderPrimitive<Vertex>] = [:]
 	var regionIdLookup: [RegionHash : RegionId] = [:]	// To avoid dependency on RuntimeWorld

		chunkTable.chunkData = fileData.subdata(in: fileHeader.dataOffset..<fileHeader.dataOffset + fileHeader.dataSize)
		print("  - chunk data attached with \(ByteCountFormatter.string(fromByteCount: Int64(chunkTable.chunkData.count), countStyle: .memory))")
		
		streamQueue = DispatchQueue(label: "Geometry streaming", qos: .userInitiated, attributes: .concurrent)
		print("  - empty streaming op-queue setup")
		
		GeometryStreamer._shared = self
		

	}
	
	private func streamMissingPrimitive(for regionHash: RegionHash) {
		guard let regionId = regionIdLookup[regionHash] else {
			print("RegionId lookup failed for hash \(regionHash)")
			return
