Accessory Randomizer Positioning Issue

Hey guys, so I am trying to achieve a NPC randomizer script which randomizes hair, skin, shirts & pants but however the hair/beard function of the script is working… but is a little bugged. When the attachment is put onto the player it is slightly in the wrong position,
image
And the beard is nowhere close to the mouth, so how would I make this so that it sets the hair onto the right position?

Here’s my script if you want to see.

local hair = {6311258677,5197532662,5163770064,6690010241,6505843734,6278356315,5153072488,5233587854,6712905660,4584980640}
local facial = {4995497755,5231327743}
local shirts = {6458559087,6459300969,6020174474,6749472345,6569221915,6163724986,5303417776,1904878492,5882464478,797247620}
local pants = {6262908283,6187407276,6689378801,6176292040,6774552508,5859067086,5866341536,6205584381,5905702738}
local skinColors = {"Bronze", "Rust", "Pastel brown", "Dirt brown", "Dark orange", "Cork", "Burlap"}

local NPC = script.Parent

local function LoadHair ()
	local hairValue = math.random(1,#hair)
	local pickedValue = hair[hairValue]
	local hair = game:GetService("InsertService"):LoadAsset(pickedValue)
	local children = hair:GetChildren()
	local accessory = children[1]
	accessory.Parent = NPC
	hair:Destroy()
end

Assuming the hats have SpecialMeshes, have you tried modifying the specialmesh’s offset property slightly up or down for each hat?

image