IK/FK Blend System Creator - Crash To Desktop On Delete Variable After Rotating Object. Help!

I've created a rollout script that can collect bones then create an IK/FK Blend system around the bones and has an undo button to delete all created objects.

The Undo button works fine... until I select all of the FK control objects and rotate them. There fine if I rotate them 1 by 1 but if I rotate all, it forgets there in an array and max gets upset =( It returns this error message:

-- Error occurred in UndoButton.pressed(); filename: C:\Users\Ben Styles\Desktop\IKFKScript\maxscriptIKFK2edited4.ms; position: 15865; line: 427
--  Frame:
>> MAXScript Rollout Handler Exception:
-- Unknown system exception <<

delete FKControlObject << line 427

Then if I delete the rest of the object remaining in the scene, max crashes. It does this 100% of the time.

In the create button block I create all the objects and add them to there own arrays, such as IKBones, FKBones and FKControlObjects. On the Undo Button block I delete those arrays along with the reference I set for the IKGoal and IKControlObject.

Here is a cut down version of the script:
Full script can be downloaded Here:

Sorry if it's messy or hard to read.

--IK FK Setup Script 1.0 by Ben Styles
--Creates an IK FK blend setup around set bones.
--Designed for 3ds max 2014
--Email: [email protected]
rollout IKFKBoneSetupTool "Create Ik / FK Setup"
	local SortedBoneCollectionList=#()
	local IKBoneColor = color 255 0 0
	local FKBoneColor = color 0 255 0
	local IKBone=#()
	local FKBone=#()
	local FKControlObject=#()
	local IKGoal
	local IKControlObject
	local IKXformModifier= XForm()
	local FKXformModifier= XForm()
	on Create Pressed do
		if SortedBoneCollectionList.count<3 then
			messagebox( "Needs more then 2 bones.")
			--Loop Through Bone Collection
			for i=1 to SortedBoneCollectionList.count do
				--Create IK Bones
				append IKBone (copy SortedBoneCollectionList[i])
				if i < 10 then BoneName=SortedBoneCollectionList[i].name as string+"IK0"+i as string
				else BoneName=SortedBoneCollectionList[i].name as string+"IK"+i as string
				IKBone[i].width= IKBoneSize.value
				IKBone[i].ShowLinksOnly = SortedBoneCollectionList[i].showlinksOnly
				IKBone[i].ShowLinks = SortedBoneCollectionList[i].showlinks
				--Parent IK Bones
				if i > 1 do IKBone[i].parent=IKBone[i-1]
				--Create FK Bones
				append FKBone(copy SortedBoneCollectionList[i])
				if i < 10 then BoneName=SortedBoneCollectionList[i].name as string+"FK0"+i as string
				else BoneName=SortedBoneCollectionList[i].name as string+"FK"+i as string
				FKBone[i].width= FKBoneSize.value
				FKBone[i].ShowLinksOnly = SortedBoneCollectionList[i].showlinksOnly
				FKBone[i].ShowLinks = SortedBoneCollectionList[i].showlinks
				--Parent FK Bones
				if i > 1 do FKBone[i].parent=FKBone[i-1]
				--Create FK Control Objects
				FKControlObjectName=SortedBoneCollectionList[i].name as string+"FK_Control_Object"+i as string
				if i != 1 and i!=SortedBoneCollectionList.count then
					append FKControlObject(CreateCircleControlObject FKControlObjectName FKBoneColor FKControlObjectRadius.value FKControlObjectThickness.value EnableRenderInViewportFK.checked)
					append FKControlObject(CreateAxialControlObject FKControlObjectName FKBoneColor FKControlObjectRadius.value FKControlObjectThickness.value EnableRenderInViewportFK.checked)
				--Parent FK Control Objects
				if i > 1 do FKControlObject[i].parent=FKControlObject[i-1]
				if i == SortedBoneCollectionList.count do
					--Create IK Goal
					IKGoal = IKSys.ikChain IKBone[1] IKBone[IKBone.count] "IKHISolver"
					--Create IK Control Object 
					IKControlObject = (CreateAxialControlObject "IK Control Object" IKBoneColor IKControlObjectRadius.value IKControlObjectThickness.value EnableRenderInViewportIK.checked)
					IKControlObject.transform=IKBone[IKBone.count] .transform
				--Create IK/FK Custom Attribute Spinner on First FK Control Object
				if i==1 do
					addModifier FKControlObject[i] FKXformModifier
					AddIKFKAttribute FKControlObject[i]
				--Setup Orientation Constraints
				OrientationConstrain SortedBoneCollectionList[i] IKBone[i] 50
				OrientationConstrain SortedBoneCollectionList[i] FKBone[i] 50
				OrientationConstrain FKBone[i] FKControlObject[i] 100
				--Wire IK/FK Attribute Spinner to Bone Orientation Weights
				paramWire.connect FKControlObject[1].modifiers[#Attribute_Holder].IKFKcontrols[#iKfK] SortedBoneCollectionList[i].rotation.controller[#Orientation_Weight_0] "100-iKfK"
				paramWire.connect FKControlObject[1].modifiers[#Attribute_Holder].IKFKcontrols[#iKfK] SortedBoneCollectionList[i].rotation.controller[#Orientation_Weight_1] "iKfK"
				--Wire Bone and Control Object Visibility
				if VisibilityCheckBox.checked==true do
					FKBone[i].visibility = bezier_float()
					IKBone[i].visibility = bezier_float()
					FKControlObject[i].visibility = bezier_float()
					paramWire.connect FKControlObject[1].modifiers[#Attribute_Holder].IKFKcontrols[#iKfK] FKBone[i][#Visibility] "iKfK"
					paramWire.connect FKControlObject[1].modifiers[#Attribute_Holder].IKFKcontrols[#iKfK] FKControlObject[i][#Visibility] "iKfK"
					paramWire.connect FKControlObject[1].modifiers[#Attribute_Holder].IKFKcontrols[#iKfK] IKBone[i][#Visibility] "100-iKfK"
				--Add Xform Modifier to IK/FK Bones
				addModifier IKBone[i] IKXformModifier
				addModifier FKBone[i] FKXformModifier
			--Copy IK/FK Attribute Modifier to FK Control Objects
			AttributeModifier=FKControlObject[1].modifiers [1] -- Instance of IK/FK Attribute
			addModifier IKControlObject IKXformModifier
			addModifier IKControlObject AttributeModifier
			for i=2 to FKControlObject.count do
				addModifier FKControlObject[i] FKXformModifier
				addModifier FKControlObject[i] AttributeModifier
			--OrientationConstrain IK Nub
			OrientationConstrain IKBone[IKBone.count] IKControlObject 100
			--Wire Xform Modifiers to IK/FK Attribute
			if ScaleCheckBox.checked == true do
				paramWire.connect FKControlObject[1].modifiers[#Attribute_Holder].IKFKcontrols[#iKfK] FKBone[1].modifiers[#XForm].Gizmo.controller[#Scale] "[iKfK/100,iKfK/100,iKfK/100]"
				paramWire.connect FKControlObject[1].modifiers[#Attribute_Holder].IKFKcontrols[#iKfK] IKBone[1].modifiers[#XForm].Gizmo.controller[#Scale] "[(100-iKfK)/100,(100-iKfK)/100,(100-iKfK)/100]"
			--Lock Transforms
			setTransformLockFlags IKGoal #all
			setTransformLockFlags IKControlObject #{7..9}
	on UndoButton pressed do
		for i=1 to IKBone.count do delete IKBone[i]
		for i=1 to FKBone.count do delete FKBone[i]
		for i=1 to FKControlObject.count do delete FKControlObject[i]
		if IKGoal != undefined do delete IKGoal
		if IKControlObject !=undefined do (delete IKControlObject)
		delete IKBone
		delete FKBone
		delete FKControlObject
		delete IKGoal
		delete IKControlObject
		for i=1 to SortedBoneCollectionList.count do
			SortedBoneCollectionList[i].rotation.controller = Euler_XYZ()
createDialog IKFKBoneSetupTool width:300 height:400

Array Variables are first declared inside the rollout block at line 9.
Objects are created in the CreateButton Pressed block at line 250.
Objects are deleted in the UndoButton Pressed block at line 404.

If anyone could please explain why and/or fix this I will be very grateful. Thanks for listening!