ApplyDescription() only applies a single accessory and not other ones

Hello! I am currently making a Character Creation System with HumanoidDescription. The problem is that when I change an id, let’s say the HairAccessory, and keep the FaceAccessory at the default value then load the game again, it doesn’t keep the default FaceAccessory yet it deletes the previous one, like its supposed to do. The fact is that it works if I change both HairAccessory and FaceAccessory at the same time, it keeps the new IDs and accessories and removes the previous ones. I even tried making a constant default table for the default IDs. Also one thing to note is that the default IDs are also in the default HumanoidDescription. Underneath is the code for my DataStore which I use for both data values and character data.

local dataStoreService = game:GetService("DataStoreService")
local dataStore = dataStoreService:GetDataStore("UltimateLevelingData")
local RunService = game:GetService("RunService")
local Players = game:GetService("Players")
local HttpService = game:GetService("HttpService")

if RunService:IsStudio() then
	dataStore = dataStoreService:GetDataStore("TestData145")
	print("Loaded Test Database")
else
	print("Loaded Production Database")
end

local PlayerCache = game.ReplicatedStorage:WaitForChild("PlayerCache")

local DEFAULT_ACCESSORIES = {
	hair = "122928544683214",
	face = "108408358816244"
}

local function charLoad()
	for _, plr in ipairs(Players:GetPlayers()) do
		local char = plr.Character or plr.CharacterAdded:Wait()
		local hum = char:WaitForChild("Humanoid")
		local desc = hum:GetAppliedDescription(hum)
		local key = plr.UserId .. "_charData"

		local success, err

		local getData = dataStore:GetAsync(key)

		if getData then
			local decodedData = HttpService:JSONDecode(getData)

			if decodedData then
				for i, hairInChar in pairs(char:GetChildren()) do
					if hairInChar:IsA("Accessory") then
						if hairInChar.AccessoryType == Enum.AccessoryType.Hair then
							hairInChar:Destroy()
						end
					end
				end
				
				for i, faceInChar in pairs(char:GetChildren()) do
					if faceInChar:IsA("Accessory") then
						if faceInChar.AccessoryType == Enum.AccessoryType.Face then
							faceInChar:Destroy()
						end
					end
				end
				
				task.wait(0.1)
				
				desc.HairAccessory = decodedData[1][1]
				desc.FaceAccessory = decodedData[1][2]
				desc.Shirt = decodedData[1][3]
				desc.Pants = decodedData[1][4]
				desc.HeadColor = Color3.fromRGB(255, 204, 153)
				desc.TorsoColor = Color3.fromRGB(255, 204, 153)
				desc.RightArmColor = Color3.fromRGB(255, 204, 153)
				desc.LeftArmColor = Color3.fromRGB(255, 204, 153)
				desc.RightArmColor = Color3.fromRGB(255, 204, 153)
				desc.RightLegColor = Color3.fromRGB(255, 204, 153)
				desc.LeftLegColor = Color3.fromRGB(255, 204, 153)
				
				task.wait(0.5)
				
				hum:ApplyDescription(desc)
				
				for i, hair in pairs(char:GetChildren()) do
					if hair:IsA("Accessory") then
						if hair.AccessoryType == Enum.AccessoryType.Hair then
							hair.Name = "Hair"
							hair.AccessoryType = Enum.AccessoryType.Hair
						end
					end
				end
				
				for i, face in pairs(char:GetChildren()) do
					if face:IsA("Accessory") then
						if face.AccessoryType == Enum.AccessoryType.Face then
							face.Name = "Face"
							face.AccessoryType = Enum.AccessoryType.Face
						end
					end
				end
			end
		end
	end
end

local function charSave()
	for _, plr in ipairs(Players:GetPlayers()) do
		local char = plr.Character or plr.CharacterRemoving:Wait()
		local hum = char:WaitForChild("Humanoid")
		local desc = hum:WaitForChild("HumanoidDescription")
		local key = plr.UserId .. "_charData"
		local data = {}

		local success, err

		table.insert(data, {
			desc.HairAccessory or DEFAULT_ACCESSORIES.hair,
			desc.FaceAccessory or DEFAULT_ACCESSORIES.face,
			desc.Shirt,
			desc.Pants
		})

		local Encoded = HttpService:JSONEncode(data)

		repeat
			success, err = pcall(function()
				return data
			end)
		until success

		if success then
			dataStore:SetAsync(key, Encoded)
			task.wait(0.1)
		else
			warn("Failed to save data: " .. tostring(err))
		end
	end
	task.wait()
end

game.Players.PlayerAdded:Connect(function(plr)
	local leaderstats = Instance.new("Folder")
	leaderstats.Name = "leaderstats"
	leaderstats.Parent = plr

	local rank = Instance.new("StringValue")
	rank.Name = "Rank"
	rank.Value = "E"
	rank.Parent = leaderstats

	local level = Instance.new("IntValue")
	level.Name = "Level"
	level.Value = 1
	level.Parent = leaderstats

	local statistics = Instance.new("Folder")
	statistics.Name = "Stats"
	statistics.Parent = plr

	local strenght = Instance.new("IntValue")
	strenght.Name = "Strenght"
	strenght.Value = 1
	strenght.Parent = statistics
	
	local agility = Instance.new("IntValue")
	agility.Name = "Agility"
	agility.Value = 1
	agility.Parent = statistics
	
	local vitality = Instance.new("IntValue")
	vitality.Name = "Vitality"
	vitality.Value = 1
	vitality.Parent = statistics
	
	local perception = Instance.new("IntValue")
	perception.Name = "Perception"
	perception.Value = 1
	perception.Parent = statistics
	
	local intelligence = Instance.new("IntValue")
	intelligence.Name = "Intelligence"
	intelligence.Value = 1
	intelligence.Parent = statistics
	
	local plrStatsData = Instance.new("Folder")
	plrStatsData.Name = "Data"
	plrStatsData.Parent = plr

	local hp = Instance.new("IntValue")
	hp.Name = "HP"
	hp.Value = 100
	hp.Parent = plrStatsData

	local maxHP = Instance.new("IntValue")
	maxHP.Name = "MaxHP"
	maxHP.Value = 100
	maxHP.Parent = plrStatsData
	
	local mp = Instance.new("IntValue")
	mp.Name = "MP"
	mp.Value = 100
	mp.Parent = plrStatsData
	
	local maxMP = Instance.new("IntValue")
	maxMP.Name = "MaxMP"
	maxMP.Value = 100
	maxMP.Parent = plrStatsData

	local characterCreated = Instance.new("BoolValue")
	characterCreated.Name = "CharacterCreated"
	characterCreated.Value = false
	characterCreated.Parent = plrStatsData

	local joinedFirstTime = Instance.new("BoolValue")
	joinedFirstTime.Name = "JoinedFirstTime"
	joinedFirstTime.Value = false
	joinedFirstTime.Parent = plrStatsData

	local hairName = Instance.new("StringValue")
	hairName.Name = "HairName"
	hairName.Value = ""
	hairName.Parent = plrStatsData

	local faceName = Instance.new("StringValue")
	faceName.Name = "FaceName"
	faceName.Value = ""
	faceName.Parent = plrStatsData

	charLoad()

	task.wait(0.1)
	
	local success, errorMessage = pcall(function()
		local savedData = dataStore:GetAsync(plr.UserId .. "_data")
		
		if savedData then
			print(`Successfully loaded data for {plr.Name}({plr.UserId})`)
			rank.Value = savedData.rank
			level.Value = savedData.level
			strenght.Value = savedData.strenght
			agility.Value = savedData.agility
			vitality.Value = savedData.vitality
			perception.Value = savedData.perception
			intelligence.Value = savedData.intelligence
			hp.Value = savedData.hp
			maxHP.Value = savedData.maxhp
			mp.Value = savedData.mp
			maxMP.Value = savedData.maxmp
			characterCreated.Value = savedData.charactercreated
			joinedFirstTime.Value = savedData.joinedfirsttime
			hairName.Value = savedData.hairname
			faceName.Value = savedData.facename
		end
	end)
	
	if not success then
		print(`Error when loading data for {plr.Name}({plr.UserId})`)
	end
end)

game.Players.PlayerRemoving:Connect(function(plr)
	charSave()
	
	local dataToSave = {
		rank = plr.leaderstats.Rank.Value,
		level = plr.leaderstats.Level.Value,
		strenght = plr.Stats.Strenght.Value,
		agility = plr.Stats.Agility.Value,
		vitality = plr.Stats.Vitality.Value,
		perception = plr.Stats.Perception.Value,
		intelligence = plr.Stats.Intelligence.Value,
		hp = plr.Data.HP.Value,
		maxhp = plr.Data.MaxHP.Value,
		mp = plr.Data.MP.Value,
		maxmp = plr.Data.MaxMP.Value,
		charactercreated = plr.Data.CharacterCreated.Value,
		joinedfirsttime = plr.Data.JoinedFirstTime.Value,
		hairname = plr.Data.HairName.Value,
		facename = plr.Data.FaceName.Value
	}
	
	local tries = 3
	while tries > 0 do
		local success, errorMessage = pcall(function()
			dataStore:SetAsync(plr.UserId .. "_data", dataToSave)
		end)

		if success then
			print(`Successfully saved data for {plr.Name}({plr.UserId})`)
			break
		else
			tries -= 1
			print(`Error when saving data for {plr.Name}({plr.UserId})`)
			task.wait(1)
		end
	end
end)

game:BindToClose(function()
	charSave()
	
	for _, player in ipairs(Players:GetPlayers()) do
		if player.leaderstats then
			local dataToSave = {
				rank = player.leaderstats.Rank.Value,
				level = player.leaderstats.Level.Value,
				strenght = player.Stats.Strenght.Value,
				agility = player.Stats.Agility.Value,
				vitality = player.Stats.Vitality.Value,
				perception = player.Stats.Perception.Value,
				intelligence = player.Stats.Intelligence.Value,
				hp = player.Data.HP.Value,
				maxhp = player.Data.MaxHP.Value,
				mp = player.Data.MP.Value,
				maxmp = player.Data.MaxMP.Value,
				charactercreated = player.Data.CharacterCreated.Value,
				joinedfirsttime = player.Data.JoinedFirstTime.Value,
				hairname = player.Data.HairName.Value,
				facename = player.Data.FaceName.Value
			}
			dataStore:SetAsync(player.UserId .. "_data", dataToSave)
		end
	end
end)

while true do
	task.wait(0.1)
	charSave()
	
	for _, player in ipairs(Players:GetPlayers()) do
		if player.leaderstats then
			local dataToSave = {
				rank = player.leaderstats.Rank.Value,
				level = player.leaderstats.Level.Value,
				strenght = player.Stats.Strenght.Value,
				agility = player.Stats.Agility.Value,
				vitality = player.Stats.Vitality.Value,
				perception = player.Stats.Perception.Value,
				intelligence = player.Stats.Intelligence.Value,
				hp = player.Data.HP.Value,
				maxhp = player.Data.MaxHP.Value,
				mp = player.Data.MP.Value,
				maxmp = player.Data.MaxMP.Value,
				charactercreated = player.Data.CharacterCreated.Value,
				joinedfirsttime = player.Data.JoinedFirstTime.Value,
				hairname = player.Data.HairName.Value,
				facename = player.Data.FaceName.Value
			}
			dataStore:SetAsync(player.UserId .. "_data", dataToSave)
		end
	end
end