Changing players skin not working

this is my code however when the remoteevent runs it makesthe whole player fall down to the void and the character is not connected with the custom r15 character thats supposed to be the starterskin

local remote = game.ReplicatedStorage:WaitForChild("SwitchSkin")

remote.OnServerEvent:Connect(function(player)
	local cframe = game.Workspace:FindFirstChild(player.Name).HumanoidRootPart.CFrame
	local oldcharacter = player.Character
	local skin = game.ReplicatedStorage:FindFirstChild("StarterSkin")
	local newSkin = skin:Clone()
	newSkin.Name = player.Name
	player.Character = newSkin
	newSkin.Parent = workspace
	newSkin.HumanoidRootPart.CFrame = CFrame.new(cframe)
	
end)

Try this instead:

local remote = game.ReplicatedStorage:WaitForChild("SwitchSkin")

remote.OnServerEvent:Connect(function(player)
    local oldCharacter = player.Character
    local skinModel = game.ReplicatedStorage:FindFirstChild("StarterSkin")

    if oldCharacter then
        local newCharacter = skinModel:Clone()
		
		newCharacter.HumanoidRootPart.Anchored = false
		newCharacter:SetPrimaryPartCFrame(oldCharacter.PrimaryPart.CFrame)
        newCharacter.Name = player.Name

        player.Character = newCharacter
        newCharacter.Parent = game.Workspace
    end
end)

still facing the same issue i fall odwn into the void

then teleport your humanoid root part to 0,0,0 or higher or somewhere else u want it after spawning