Several labels being made for each player

I’m having a problem where each player gets several labels each. How can I get it to only create 1 for each player

-- Create the Player label
local function CreateLabel(player)
	-- Create a label for this player
	local PlayerLabel = PlayerTemplate:Clone()
	PlayerLabel.Name = player.Name
	PlayerLabel.Icon.Image = Players:GetUserThumbnailAsync(player.UserId, Enum.ThumbnailType.HeadShot, Enum.ThumbnailSize.Size420x420)
	PlayerLabel.Parent = PlayerList
	
	return PlayerLabel
end

-- Update the PlayerLabel positions
local function Update()
	if TotalSize <= 0 then return end
	
	for _, player in pairs(Players:GetPlayers()) do
		if player.Character and player.Character:FindFirstChild('HumanoidRootPart') then
			local PlayerLabel = PlayerList:FindFirstChild(player.Name)
			if not PlayerLabel then
				-- Create label
				PlayerLabel = CreateLabel(player)
			end
			
			-- Calculate players distance
			local Distance = player.Character.HumanoidRootPart.Position.Y - Start.Floor.Position.Y - 2
			
			-- Set position
			PlayerLabel.Position = UDim2.new(0, 0, 1 - (Distance / TotalSize), 0)
			
			if Highest > Distance then return end
			
			Highest = Distance
			
			-- Set player's highest progress
			local ProgressLine = Frame:FindFirstChild('Progress')
			if not ProgressLine then return end
			
			ProgressLine.Visible = true
			
			-- Set progress line position
			ProgressLine.Position = UDim2.new(0, 0, 1 - (Highest / TotalSize), 0)
		end
	end
end

RunService.Heartbeat:Connect(Update)

I believe it’s because GetUserThumbnailAsync pauses the thread where the label is created before than the label is parented to playerList and the next Heartbeat fires before than that yield ends. This would mean that many labels could be created before than the first one is parented. After a while, all those labels would be parented to playerList. If this is the problem, maybe you could fix it by changing

PlayerLabel.Icon.Image = Players:GetUserThumbnailAsync(player.UserId, Enum.ThumbnailType.HeadShot, Enum.ThumbnailSize.Size420x420)

to

coroutine.wrap(function()
	PlayerLabel.Icon.Image = Players:GetUserThumbnailAsync(player.UserId, Enum.ThumbnailType.HeadShot, Enum.ThumbnailSize.Size420x420)
end)()