I was making a custom camera, and I got everything to work fine, though when I moved, my character started to rapidly change positions...Any way I can fix this?

Code:

local Player=game.Players.LocalPlayer
repeat wait() until workspace:FindFirstChild(Player.Name.."_Body")
local Body=workspace:FindFirstChild(Player.Name.."_Body")
local Character=Player.Character
local Camera=workspace.CurrentCamera
local Mouse=Player:GetMouse()
Character:WaitForChild("Humanoid").AutoRotate=false
Character:WaitForChild("HumanoidRootPart")
local Settings={
	InvertMouse=false,
	Sensitivity=.1, --0 to 2
}
local Prev={X=Mouse.X,Y=Mouse.Y}

function Update()
	local NewX=Mouse.X
	local NewY=Mouse.Y
	local NewCF=Camera.CoordinateFrame
	if NewX>Prev.X then --Turn Right
		NewCF=NewCF*CFrame.Angles(0,(math.rad(-math.min(5,math.abs(NewX-Prev.X))))*Settings.Sensitivity,0)
	elseif NewX<Prev.X then --Turn Left
		NewCF=NewCF*CFrame.Angles(0,math.rad(math.min(5,math.abs(NewX-Prev.X)))*Settings.Sensitivity,0)
	end
	if NewY<Prev.Y then --Look Up
		NewCF=NewCF*CFrame.Angles(math.rad(math.min(5,math.abs(NewY-Prev.Y)))*Settings.Sensitivity,0,0)
	elseif NewY>Prev.Y then --Look Down
		NewCF=NewCF*CFrame.Angles(math.rad(-math.min(5,math.abs(NewY-Prev.Y)))*Settings.Sensitivity,0,0)
	end
	local a,b,c,d,e,f,g,h,i,j,k,l=NewCF:components()
	a,b,c=0,0,0
	Camera.CoordinateFrame=Body.Head.CFrame*CFrame.new(a,b,c,d,e,f,g,h,i,j,k,l)
	Prev.X=NewX
	Prev.Y=NewY
end
coroutine.wrap(function()
	while true do
		game:GetService("RunService").RenderStepped:wait()
		Camera.CameraType="Scriptable"
		Update()
	end
end)()