Script arm binder makes arms stiff all of a sudden

I was moving a script over to a module and all of a sudden its not working as intended

the script just moves arms onto a part which is constantly moved under the camera.

this was the original script in a local script

local Player = game:GetService("Players").LocalPlayer
local Character = Player.Character or Player.CharacterAdded:Wait()
local RunService = game:GetService("RunService")
repeat task.wait() until game:IsLoaded()
repeat task.wait() until Character:IsDescendantOf(workspace)

-- Variables --
local Binded = false
local FTorso
local DebugMovementDelay = false
local DebugMovementDelayNum = 1
local BindRenderStep
local BindCoroutine
--           --

local RightUpperArm = Character:WaitForChild("RightUpperArm")
local LeftUpperArm = Character:WaitForChild("LeftUpperArm")
local RightArmMotor = Character:WaitForChild("RightUpperArm"):WaitForChild("RightShoulder")
local LeftArmMotor = Character:WaitForChild("LeftUpperArm"):WaitForChild("LeftShoulder")
local UpperTorso = Character:WaitForChild("UpperTorso")

local function BindArms()
	if not Binded then
		Binded = true
		FTorso = Instance.new("Part")
		FTorso.Anchored = true
		FTorso.CanCollide = false
		FTorso.CanQuery = false
		FTorso.CanTouch = false
		FTorso.Transparency = .7
		FTorso.CastShadow = false

		FTorso.Size = Vector3.new(
			Character.UpperTorso.Size.X,
			math.floor((Character.UpperTorso.Size.Y + Character.LowerTorso.Size.Y)),
			Character.UpperTorso.Size.Z
		)

		FTorso.Parent = workspace.Camera
		FTorso.Name = "UpperTorso"

		RightArmMotor.Part0 = FTorso
		LeftArmMotor.Part0 = FTorso
		RightArmMotor.C0 = CFrame.new(RightArmMotor.C0.Position)-- * CFrame.Angles(math.rad(90),0,0)
		RightArmMotor.C1 = CFrame.new(RightArmMotor.C1.Position)
		LeftArmMotor.C0 = CFrame.new(LeftArmMotor.C0.Position)-- * CFrame.Angles(math.rad(90),0,0)
		LeftArmMotor.C1 = CFrame.new(LeftArmMotor.C1.Position)


		if DebugMovementDelay then
			BindCoroutine = coroutine.create(function()
				while task.wait(DebugMovementDelayNum) do
					FTorso.CFrame = workspace.CurrentCamera.CFrame * CFrame.new(0,-1.8,-.5)
					--FTorso.CFrame = CFrame.new(0,10,0)
				end
			end)
			coroutine.resume(BindCoroutine)
		else
			BindCoroutine = coroutine.create(function()
				BindRenderStep = RunService.RenderStepped:Connect(function()
					FTorso.CFrame = workspace.CurrentCamera.CFrame * CFrame.new(0,-1.8,-.5)
					--FTorso.CFrame = CFrame.new(0,10,0)
				end)
			end)
			coroutine.resume(BindCoroutine)
		end
	else
		warn("Arms already binded")
	end
end

local function UnbindArms()
	if Binded then
		if FTorso then FTorso:Destroy() end
		
		BindRenderStep:Disconnect()
		coroutine.close(BindCoroutine)
		
		RightArmMotor.Part0 = UpperTorso
		LeftArmMotor.Part0 = UpperTorso
		
		RightArmMotor.C0 = CFrame.new(RightArmMotor.C0.Position)
		RightArmMotor.C1 = CFrame.new(RightArmMotor.C1.Position)
		
		LeftArmMotor.C0 = CFrame.new(LeftArmMotor.C0.Position)
		LeftArmMotor.C1 = CFrame.new(LeftArmMotor.C1.Position)
	end
end

BindArms()

and i tried moving it into a module and local script to move it into a different script and its working, but the arms no longer “move” (kinda like when you pull out a tool it moves you arm 90 degrees to show you holding it)

Heres the local script

local Player = game:GetService("Players")["LocalPlayer"]
local Character
local BindModule = require(script.ViewmodelModule)
local BaseTable
local LastTool = nil
local IsBinded = false

local function CheckToBind(Tool)
	if Tool:FindFirstChild("GunTool") then
		if IsBinded then
			return true, "UnBind"	
		else
			return true, "Bind"	
		end
	else
		return false
	end
end

local function CharacterToolStatusChanged(Tool)
	local ToBind, Bind = CheckToBind(Tool)
	print(ToBind, Bind)
	
	if not BaseTable then BaseTable = BindModule.Setup(Character) end
	
	if ToBind then
		if Bind == "Bind" then
			BaseTable:BindArms()
			IsBinded = true
		elseif Bind == "UnBind" then
			BaseTable:UnBindArms()
			IsBinded = false
		end
	end
end

repeat task.wait() until game:IsLoaded()
Character = Player.Character or Player.CharacterAdded:Wait()

Character.ChildAdded:Connect(function(Child)
	if Child:IsA("Tool") then
		LastTool = Child
		CharacterToolStatusChanged(Child)
	end
end)

Character.ChildRemoved:Connect(function(Child)
	print(Child, LastTool)
	if Child:IsA("Tool") and LastTool == Child then
		CharacterToolStatusChanged(Child)
	end
end)

And the module

local RunService = game:GetService('RunService')

local GenericModule = {}

local Binded = false
local FTorso
local DebugMovementDelay = false
local DebugMovementDelayNum = 10
local BindRenderStep
local BindCoroutine

local OffsetCFrame = CFrame.new(0, -1.8, -.5)

GenericModule.Setup = function(Character)
	local Table = setmetatable({}, GenericModule)
	
	Table.Character = Character
	Table.RightUpperArm = Character:WaitForChild("RightUpperArm")
	Table.LeftUpperArm = Character:WaitForChild("LeftUpperArm")
	Table.RightArmMotor = Table.RightUpperArm:WaitForChild("RightShoulder")
	Table.LeftArmMotor = Table.LeftUpperArm:WaitForChild("LeftShoulder")
	Table.UpperTorso = Character:WaitForChild("UpperTorso")
	Table.LowerTorso = Character:WaitForChild("LowerTorso")
	
	return Table
end

function GenericModule:BindArms()
	print(self)
	if Binded then warn("Arms Already Binded") return end
	Binded = true
	
	FTorso = script.BasePart:Clone()
	FTorso.Size = Vector3.new(
		self.UpperTorso.Size.X,
		math.floor((self.UpperTorso.Size.Y + self.LowerTorso.Size.Y)),
		self.UpperTorso.Size.Z
	)
	FTorso.Parent = workspace.CurrentCamera
	FTorso.Name = "DuplicatedTorso" -- lies
	
	local RAM = self.RightArmMotor
	local LAM = self.LeftArmMotor
	RAM.Part0 = FTorso
	LAM.Part0 = FTorso
	
	if DebugMovementDelay then
		BindCoroutine = coroutine.create(function()
			while task.wait(DebugMovementDelayNum) do
				FTorso.CFrame = workspace.CurrentCamera.CFrame * OffsetCFrame
			end
		end)
		coroutine.resume(BindCoroutine)
	elseif not DebugMovementDelay then
		BindCoroutine = coroutine.create(function()
			BindRenderStep = RunService.RenderStepped:Connect(function()
				FTorso.CFrame = workspace.CurrentCamera.CFrame * OffsetCFrame
			end)
		end)
		coroutine.resume(BindCoroutine)
	end
end

function GenericModule:UnBindArms()
	if not Binded then warn("Arms Already Unbinded") return end
	Binded = false
	
	if FTorso and FTorso:IsA("Part") then FTorso:Destroy() end
	if BindRenderStep then BindRenderStep:Disconnect() end
	
	coroutine.close(BindCoroutine)
	
	local RAM = self.RightArmMotor
	local LAM = self.LeftArmMotor
	local UpperTorso = self.UpperTorso
	
	RAM.Part0 = UpperTorso
	LAM.Part0 = UpperTorso
end


GenericModule.__index = GenericModule
return GenericModule

Also this segment

RightArmMotor.C0 = CFrame.new(RightArmMotor.C0.Position)-- * CFrame.Angles(math.rad(90),0,0)
RightArmMotor.C1 = CFrame.new(RightArmMotor.C1.Position)
LeftArmMotor.C0 = CFrame.new(LeftArmMotor.C0.Position)-- * CFrame.Angles(math.rad(90),0,0)
LeftArmMotor.C1 = CFrame.new(LeftArmMotor.C1.Position)

is missing from the module, but even with this segment added it didnt change anything.