 		borderUniforms.width = glGetUniformLocation(borderProgram, "edgeWidth")
 		
 		borderPrimitives = [:]
+		
+		borderQueue = DispatchQueue(label: "Border construction", qos: .userInitiated, attributes: .concurrent)
 	}
 	
 	deinit {

	
	func prepareGeometry(for updateSet: Set<Int>) {
		let streamer = GeometryStreamer.shared
		for borderHash in updateSet {
			let loddedBorderHash = borderHashLodKey(borderHash, atLod: streamer.actualLodLevel)
			if borderPrimitives[loddedBorderHash] == nil {
				if let tessellation = streamer.tessellation(for: borderHash) {
					let borderOutline = { (outline: [Vertex]) in generateClosedOutlineGeometry(outline: outline, innerExtent: 1.0, outerExtent: 0.1) }
					let countourVertices = tessellation.contours.map({$0.vertices})
					let outlineGeometry: RegionContours = countourVertices.map(borderOutline)
					
					let outlinePrimitive = OutlineRenderPrimitive(contours: outlineGeometry,
																												ownerHash: 0,
																												debugName: "Border")
					borderPrimitives[loddedBorderHash] = outlinePrimitive
				}
			}
			
		}
	}
	

	let borderUniforms : (modelViewMatrix: GLint, color: GLint, width: GLint)
	var borderWidth: Float
	
	let borderQueue: DispatchQueue
	var pendingBorders: Set<Int> = []

	init?() {
		borderWidth = 0.0
		
