diff --git a/Assets/Models/Lightsabers/Blade Small.fbx b/Assets/Models/Lightsabers/Blade Small.fbx
deleted file mode 100644
index 40bdd0248f77e315860ac9c2c9c4a81468d5faea..0000000000000000000000000000000000000000
--- a/Assets/Models/Lightsabers/Blade Small.fbx	
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:28eeadbead66d2fb9c9f6aa73c78f6f608d6d5998dc3f115252c3f8afe2d422b
-size 17164
diff --git a/Assets/Models/Lightsabers/Blade Small.fbx.meta b/Assets/Models/Lightsabers/Blade Small.fbx.meta
deleted file mode 100644
index c6e5182ec58ac7e31fa73089509f94e4b4c0abc6..0000000000000000000000000000000000000000
--- a/Assets/Models/Lightsabers/Blade Small.fbx.meta	
+++ /dev/null
@@ -1,102 +0,0 @@
-fileFormatVersion: 2
-guid: d679aa440e3e8284bbf5bc6daa496b7f
-ModelImporter:
-  serializedVersion: 20200
-  internalIDToNameTable: []
-  externalObjects: {}
-  materials:
-    materialImportMode: 2
-    materialName: 0
-    materialSearch: 1
-    materialLocation: 1
-  animations:
-    legacyGenerateAnimations: 4
-    bakeSimulation: 0
-    resampleCurves: 1
-    optimizeGameObjects: 0
-    motionNodeName: 
-    rigImportErrors: 
-    rigImportWarnings: 
-    animationImportErrors: 
-    animationImportWarnings: 
-    animationRetargetingWarnings: 
-    animationDoRetargetingWarnings: 0
-    importAnimatedCustomProperties: 0
-    importConstraints: 0
-    animationCompression: 1
-    animationRotationError: 0.5
-    animationPositionError: 0.5
-    animationScaleError: 0.5
-    animationWrapMode: 0
-    extraExposedTransformPaths: []
-    extraUserProperties: []
-    clipAnimations: []
-    isReadable: 0
-  meshes:
-    lODScreenPercentages: []
-    globalScale: 1
-    meshCompression: 0
-    addColliders: 0
-    useSRGBMaterialColor: 1
-    sortHierarchyByName: 1
-    importVisibility: 1
-    importBlendShapes: 1
-    importCameras: 1
-    importLights: 1
-    fileIdsGeneration: 2
-    swapUVChannels: 0
-    generateSecondaryUV: 0
-    useFileUnits: 1
-    keepQuads: 0
-    weldVertices: 1
-    bakeAxisConversion: 0
-    preserveHierarchy: 0
-    skinWeightsMode: 0
-    maxBonesPerVertex: 4
-    minBoneWeight: 0.001
-    meshOptimizationFlags: -1
-    indexFormat: 0
-    secondaryUVAngleDistortion: 8
-    secondaryUVAreaDistortion: 15.000001
-    secondaryUVHardAngle: 88
-    secondaryUVMarginMethod: 1
-    secondaryUVMinLightmapResolution: 40
-    secondaryUVMinObjectScale: 1
-    secondaryUVPackMargin: 4
-    useFileScale: 1
-  tangentSpace:
-    normalSmoothAngle: 60
-    normalImportMode: 0
-    tangentImportMode: 3
-    normalCalculationMode: 4
-    legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0
-    blendShapeNormalImportMode: 1
-    normalSmoothingSource: 0
-  referencedClips: []
-  importAnimation: 1
-  humanDescription:
-    serializedVersion: 3
-    human: []
-    skeleton: []
-    armTwist: 0.5
-    foreArmTwist: 0.5
-    upperLegTwist: 0.5
-    legTwist: 0.5
-    armStretch: 0.05
-    legStretch: 0.05
-    feetSpacing: 0
-    globalScale: 1
-    rootMotionBoneName: 
-    hasTranslationDoF: 0
-    hasExtraRoot: 0
-    skeletonHasParents: 1
-  lastHumanDescriptionAvatarSource: {instanceID: 0}
-  autoGenerateAvatarMappingIfUnspecified: 1
-  animationType: 2
-  humanoidOversampling: 1
-  avatarSetup: 0
-  addHumanoidExtraRootOnlyWhenUsingAvatar: 1
-  additionalBone: 0
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 
diff --git a/Assets/Models/Lightsabers/Lightsabers(s).blend b/Assets/Models/Lightsabers/Lightsabers(s).blend
deleted file mode 100644
index 5ce26ae4a2c8fe3f8b9b8365ec4b91a4892e6cf4..0000000000000000000000000000000000000000
--- a/Assets/Models/Lightsabers/Lightsabers(s).blend
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:ddbc9e30b1b602c1938345b61d37d560b387cbc52de6743819fb76242d6a9486
-size 1233992
diff --git a/Assets/Models/Lightsabers/Lightsabers(s).blend.meta b/Assets/Models/Lightsabers/Lightsabers(s).blend.meta
deleted file mode 100644
index 5ad0e7a8a53c4db6ac7f78d8a89eea20d1999a8b..0000000000000000000000000000000000000000
--- a/Assets/Models/Lightsabers/Lightsabers(s).blend.meta
+++ /dev/null
@@ -1,102 +0,0 @@
-fileFormatVersion: 2
-guid: 4f57d85ae8604454ab2b4e4aacb4a098
-ModelImporter:
-  serializedVersion: 20200
-  internalIDToNameTable: []
-  externalObjects: {}
-  materials:
-    materialImportMode: 2
-    materialName: 0
-    materialSearch: 1
-    materialLocation: 1
-  animations:
-    legacyGenerateAnimations: 4
-    bakeSimulation: 0
-    resampleCurves: 1
-    optimizeGameObjects: 0
-    motionNodeName: 
-    rigImportErrors: 
-    rigImportWarnings: 
-    animationImportErrors: 
-    animationImportWarnings: 
-    animationRetargetingWarnings: 
-    animationDoRetargetingWarnings: 0
-    importAnimatedCustomProperties: 0
-    importConstraints: 0
-    animationCompression: 1
-    animationRotationError: 0.5
-    animationPositionError: 0.5
-    animationScaleError: 0.5
-    animationWrapMode: 0
-    extraExposedTransformPaths: []
-    extraUserProperties: []
-    clipAnimations: []
-    isReadable: 0
-  meshes:
-    lODScreenPercentages: []
-    globalScale: 1
-    meshCompression: 0
-    addColliders: 0
-    useSRGBMaterialColor: 1
-    sortHierarchyByName: 1
-    importVisibility: 1
-    importBlendShapes: 1
-    importCameras: 1
-    importLights: 1
-    fileIdsGeneration: 2
-    swapUVChannels: 0
-    generateSecondaryUV: 0
-    useFileUnits: 1
-    keepQuads: 0
-    weldVertices: 1
-    bakeAxisConversion: 0
-    preserveHierarchy: 0
-    skinWeightsMode: 0
-    maxBonesPerVertex: 4
-    minBoneWeight: 0.001
-    meshOptimizationFlags: -1
-    indexFormat: 0
-    secondaryUVAngleDistortion: 8
-    secondaryUVAreaDistortion: 15.000001
-    secondaryUVHardAngle: 88
-    secondaryUVMarginMethod: 1
-    secondaryUVMinLightmapResolution: 40
-    secondaryUVMinObjectScale: 1
-    secondaryUVPackMargin: 4
-    useFileScale: 1
-  tangentSpace:
-    normalSmoothAngle: 60
-    normalImportMode: 0
-    tangentImportMode: 3
-    normalCalculationMode: 4
-    legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0
-    blendShapeNormalImportMode: 1
-    normalSmoothingSource: 0
-  referencedClips: []
-  importAnimation: 1
-  humanDescription:
-    serializedVersion: 3
-    human: []
-    skeleton: []
-    armTwist: 0.5
-    foreArmTwist: 0.5
-    upperLegTwist: 0.5
-    legTwist: 0.5
-    armStretch: 0.05
-    legStretch: 0.05
-    feetSpacing: 0
-    globalScale: 1
-    rootMotionBoneName: 
-    hasTranslationDoF: 0
-    hasExtraRoot: 0
-    skeletonHasParents: 1
-  lastHumanDescriptionAvatarSource: {instanceID: 0}
-  autoGenerateAvatarMappingIfUnspecified: 1
-  animationType: 2
-  humanoidOversampling: 1
-  avatarSetup: 0
-  addHumanoidExtraRootOnlyWhenUsingAvatar: 1
-  additionalBone: 0
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 
diff --git a/Assets/Models/Lightsabers/SaberBlue.prefab b/Assets/Models/Lightsabers/SaberBlue.prefab
index 4e0c7c394203d74d5c18840f6c35933b4e6fdf8c..d1bb07003782ef4a7e535781e8cc384435c74831 100644
--- a/Assets/Models/Lightsabers/SaberBlue.prefab
+++ b/Assets/Models/Lightsabers/SaberBlue.prefab
@@ -192,20 +192,57 @@ MeshCollider:
   m_Convex: 0
   m_CookingOptions: 30
   m_Mesh: {fileID: -7387706064836869012, guid: 2e0427b29f4946d499452abb5d082636, type: 3}
---- !u!136 &7695646964589331710
-CapsuleCollider:
+--- !u!54 &201148715
+Rigidbody:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 3359126146926893393}
+  serializedVersion: 2
+  m_Mass: 1
+  m_Drag: 0
+  m_AngularDrag: 0.05
+  m_UseGravity: 0
+  m_IsKinematic: 1
+  m_Interpolate: 0
+  m_Constraints: 0
+  m_CollisionDetection: 0
+--- !u!64 &6629517142980830489
+MeshCollider:
   m_ObjectHideFlags: 0
   m_CorrespondingSourceObject: {fileID: 0}
   m_PrefabInstance: {fileID: 0}
   m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 3359126146926893393}
   m_Material: {fileID: 0}
-  m_IsTrigger: 0
+  m_IsTrigger: 1
+  m_Enabled: 1
+  serializedVersion: 4
+  m_Convex: 1
+  m_CookingOptions: 30
+  m_Mesh: {fileID: 7401353886334607404, guid: d122b058ea637564b9937b70b0b60d86, type: 3}
+--- !u!114 &1327955950139578333
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 3359126146926893393}
   m_Enabled: 1
-  m_Radius: 0.015
-  m_Height: 0.9165672
-  m_Direction: 1
-  m_Center: {x: 0, y: 0.4582836, z: 0}
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 6b8f1d2e3f203774dbe049389e195160, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  _blade: {fileID: 3359126146926893393}
+  _tip: {fileID: 4660016671522463036}
+  _base: {fileID: 6681503832187716144}
+  _forceAppliedToCut: 3
+  extendSpeed: 0.1
+  maximumSwordSize: 7
+  activateBlade:
+    actionPath: 
+    needsReinit: 0
 --- !u!1 &3395298484381185767
 GameObject:
   m_ObjectHideFlags: 0
@@ -311,7 +348,6 @@ GameObject:
   serializedVersion: 6
   m_Component:
   - component: {fileID: 5247273969708224055}
-  - component: {fileID: 7905181437100026170}
   m_Layer: 0
   m_Name: SaberBlue
   m_TagString: Untagged
@@ -328,7 +364,7 @@ Transform:
   m_GameObject: {fileID: 3441095255025812787}
   m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
   m_LocalPosition: {x: 24.46069, y: 1, z: -35.64092}
-  m_LocalScale: {x: 0.1722259, y: 0.1722259, z: 0.1722259}
+  m_LocalScale: {x: 0.1722259, y: 0.17222594, z: 0.17222594}
   m_Children:
   - {fileID: 996865527394314579}
   - {fileID: 2726317981733585899}
@@ -336,24 +372,6 @@ Transform:
   m_Father: {fileID: 0}
   m_RootOrder: 0
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
---- !u!114 &7905181437100026170
-MonoBehaviour:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 3441095255025812787}
-  m_Enabled: 1
-  m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: 6b8f1d2e3f203774dbe049389e195160, type: 3}
-  m_Name: 
-  m_EditorClassIdentifier: 
-  bladeHolder: {fileID: 3359126146926893393}
-  maximumSwordSize: 6.5
-  extendSpeed: 0.1
-  activateBlade:
-    actionPath: 
-    needsReinit: 0
 --- !u!1 &3899787647720555611
 GameObject:
   m_ObjectHideFlags: 0
@@ -450,6 +468,36 @@ MeshCollider:
   m_Convex: 0
   m_CookingOptions: 30
   m_Mesh: {fileID: 3390558720134950976, guid: 2e0427b29f4946d499452abb5d082636, type: 3}
+--- !u!1 &4660016671522463036
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 6638661504809774059}
+  m_Layer: 0
+  m_Name: BladeTip
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &6638661504809774059
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 4660016671522463036}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0.9097, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 2726317981733585899}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
 --- !u!1 &5206598183120968814
 GameObject:
   m_ObjectHideFlags: 0
@@ -738,6 +786,36 @@ MeshCollider:
   m_Convex: 0
   m_CookingOptions: 30
   m_Mesh: {fileID: -125435165217083709, guid: 2e0427b29f4946d499452abb5d082636, type: 3}
+--- !u!1 &6681503832187716144
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 364959221412897637}
+  m_Layer: 0
+  m_Name: BladeBase
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &364959221412897637
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 6681503832187716144}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 2726317981733585899}
+  m_RootOrder: 1
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
 --- !u!1 &6761538402700238143
 GameObject:
   m_ObjectHideFlags: 0
@@ -1116,7 +1194,7 @@ PrefabInstance:
     - target: {fileID: -8679921383154817045, guid: d122b058ea637564b9937b70b0b60d86,
         type: 3}
       propertyPath: m_LocalScale.y
-      value: 6.5
+      value: 7
       objectReference: {fileID: 0}
     - target: {fileID: -8679921383154817045, guid: d122b058ea637564b9937b70b0b60d86,
         type: 3}
diff --git a/Assets/Models/Lightsabers/SaberGreen.prefab b/Assets/Models/Lightsabers/SaberGreen.prefab
index 066bc9422d22697730a3dd768ae5156d3bb8a452..24ff0977cbc607a6b21c9d4702d7597ec7d8f324 100644
--- a/Assets/Models/Lightsabers/SaberGreen.prefab
+++ b/Assets/Models/Lightsabers/SaberGreen.prefab
@@ -221,7 +221,7 @@ Transform:
   m_LocalScale: {x: 0.1722259, y: 0.1722259, z: 0.1722259}
   m_Children:
   - {fileID: 4601037317967204352}
-  - {fileID: 6347709206645337944}
+  - {fileID: 8841570493264984474}
   - {fileID: 1517365877800091929}
   m_Father: {fileID: 0}
   m_RootOrder: 0
@@ -238,9 +238,12 @@ MonoBehaviour:
   m_Script: {fileID: 11500000, guid: 6b8f1d2e3f203774dbe049389e195160, type: 3}
   m_Name: 
   m_EditorClassIdentifier: 
-  bladeHolder: {fileID: 6006754381144405474}
-  maximumSwordSize: 6.5
+  _blade: {fileID: 0}
+  _tip: {fileID: 0}
+  _base: {fileID: 0}
+  _forceAppliedToCut: 3
   extendSpeed: 0.1
+  maximumSwordSize: 6.5
   activateBlade:
     actionPath: 
     needsReinit: 0
@@ -698,20 +701,6 @@ MeshCollider:
   m_Convex: 0
   m_CookingOptions: 30
   m_Mesh: {fileID: 3390558720134950976, guid: 2e0427b29f4946d499452abb5d082636, type: 3}
---- !u!136 &6611807667370853356
-CapsuleCollider:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6006754381144405474}
-  m_Material: {fileID: 0}
-  m_IsTrigger: 0
-  m_Enabled: 1
-  m_Radius: 0.015
-  m_Height: 0.9165672
-  m_Direction: 1
-  m_Center: {x: 0, y: 0.4582836, z: 0}
 --- !u!1 &6617440006656488907
 GameObject:
   m_ObjectHideFlags: 0
@@ -1000,6 +989,36 @@ MeshCollider:
   m_Convex: 0
   m_CookingOptions: 30
   m_Mesh: {fileID: -125435165217083709, guid: 2e0427b29f4946d499452abb5d082636, type: 3}
+--- !u!1 &7756561401392750041
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 3054777223326895886}
+  m_Layer: 0
+  m_Name: BladeTip
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &3054777223326895886
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 7756561401392750041}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0.9097, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 8841570493264984474}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
 --- !u!1 &7849543655793136600
 GameObject:
   m_ObjectHideFlags: 0
@@ -1096,7 +1115,88 @@ MeshCollider:
   m_Convex: 0
   m_CookingOptions: 30
   m_Mesh: {fileID: 8691780276856062721, guid: 2e0427b29f4946d499452abb5d082636, type: 3}
---- !u!1001 &6889714240436766899
+--- !u!1 &7892764322448365736
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 7529995285836671535}
+  m_Layer: 0
+  m_Name: BladeBase
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &7529995285836671535
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 7892764322448365736}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 8841570493264984474}
+  m_RootOrder: 1
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!54 &5922758895058057032
+Rigidbody:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8212385561656304416}
+  serializedVersion: 2
+  m_Mass: 1
+  m_Drag: 0
+  m_AngularDrag: 0.05
+  m_UseGravity: 0
+  m_IsKinematic: 1
+  m_Interpolate: 0
+  m_Constraints: 0
+  m_CollisionDetection: 0
+--- !u!64 &788972806405850415
+MeshCollider:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8212385561656304416}
+  m_Material: {fileID: 0}
+  m_IsTrigger: 1
+  m_Enabled: 1
+  serializedVersion: 4
+  m_Convex: 1
+  m_CookingOptions: 30
+  m_Mesh: {fileID: 7401353886334607404, guid: d122b058ea637564b9937b70b0b60d86, type: 3}
+--- !u!114 &846717856241389920
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8212385561656304416}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 6b8f1d2e3f203774dbe049389e195160, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  _blade: {fileID: 8212385561656304416}
+  _tip: {fileID: 7756561401392750041}
+  _base: {fileID: 7892764322448365736}
+  _forceAppliedToCut: 3
+  extendSpeed: 0.1
+  maximumSwordSize: 7
+  activateBlade:
+    actionPath: 
+    needsReinit: 0
+--- !u!1001 &9023288381095747185
 PrefabInstance:
   m_ObjectHideFlags: 0
   serializedVersion: 2
@@ -1111,27 +1211,27 @@ PrefabInstance:
     - target: {fileID: -8679921383154817045, guid: d122b058ea637564b9937b70b0b60d86,
         type: 3}
       propertyPath: m_LocalScale.x
-      value: 8.1288595
+      value: 8.12886
       objectReference: {fileID: 0}
     - target: {fileID: -8679921383154817045, guid: d122b058ea637564b9937b70b0b60d86,
         type: 3}
       propertyPath: m_LocalScale.y
-      value: 6.5
+      value: 7
       objectReference: {fileID: 0}
     - target: {fileID: -8679921383154817045, guid: d122b058ea637564b9937b70b0b60d86,
         type: 3}
       propertyPath: m_LocalScale.z
-      value: 8.1288595
+      value: 8.12886
       objectReference: {fileID: 0}
     - target: {fileID: -8679921383154817045, guid: d122b058ea637564b9937b70b0b60d86,
         type: 3}
       propertyPath: m_LocalPosition.x
-      value: -0
+      value: 0
       objectReference: {fileID: 0}
     - target: {fileID: -8679921383154817045, guid: d122b058ea637564b9937b70b0b60d86,
         type: 3}
       propertyPath: m_LocalPosition.y
-      value: 2.430001
+      value: 2.4300005
       objectReference: {fileID: 0}
     - target: {fileID: -8679921383154817045, guid: d122b058ea637564b9937b70b0b60d86,
         type: 3}
@@ -1146,7 +1246,7 @@ PrefabInstance:
     - target: {fileID: -8679921383154817045, guid: d122b058ea637564b9937b70b0b60d86,
         type: 3}
       propertyPath: m_LocalRotation.x
-      value: 0
+      value: -0
       objectReference: {fileID: 0}
     - target: {fileID: -8679921383154817045, guid: d122b058ea637564b9937b70b0b60d86,
         type: 3}
@@ -1185,15 +1285,15 @@ PrefabInstance:
       objectReference: {fileID: 0}
     m_RemovedComponents: []
   m_SourcePrefab: {fileID: 100100000, guid: d122b058ea637564b9937b70b0b60d86, type: 3}
---- !u!1 &6006754381144405474 stripped
+--- !u!1 &8212385561656304416 stripped
 GameObject:
   m_CorrespondingSourceObject: {fileID: 919132149155446097, guid: d122b058ea637564b9937b70b0b60d86,
     type: 3}
-  m_PrefabInstance: {fileID: 6889714240436766899}
+  m_PrefabInstance: {fileID: 9023288381095747185}
   m_PrefabAsset: {fileID: 0}
---- !u!4 &6347709206645337944 stripped
+--- !u!4 &8841570493264984474 stripped
 Transform:
   m_CorrespondingSourceObject: {fileID: -8679921383154817045, guid: d122b058ea637564b9937b70b0b60d86,
     type: 3}
-  m_PrefabInstance: {fileID: 6889714240436766899}
+  m_PrefabInstance: {fileID: 9023288381095747185}
   m_PrefabAsset: {fileID: 0}
diff --git a/Assets/Models/Lightsabers/SaberPurple.prefab b/Assets/Models/Lightsabers/SaberPurple.prefab
index fffce44c50677abd3d795773ac8c572935bf3cd9..783e86f2aecff9af97fefcbe2d563c700f6501e0 100644
--- a/Assets/Models/Lightsabers/SaberPurple.prefab
+++ b/Assets/Models/Lightsabers/SaberPurple.prefab
@@ -1,5 +1,56 @@
 %YAML 1.1
 %TAG !u! tag:unity3d.com,2011:
+--- !u!54 &3038571134312424703
+Rigidbody:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 688427628865633301}
+  serializedVersion: 2
+  m_Mass: 1
+  m_Drag: 0
+  m_AngularDrag: 0.05
+  m_UseGravity: 0
+  m_IsKinematic: 1
+  m_Interpolate: 0
+  m_Constraints: 0
+  m_CollisionDetection: 0
+--- !u!64 &2151282287490391945
+MeshCollider:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 688427628865633301}
+  m_Material: {fileID: 0}
+  m_IsTrigger: 1
+  m_Enabled: 1
+  serializedVersion: 4
+  m_Convex: 1
+  m_CookingOptions: 30
+  m_Mesh: {fileID: 7401353886334607404, guid: d122b058ea637564b9937b70b0b60d86, type: 3}
+--- !u!114 &6831661100328807913
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 688427628865633301}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 6b8f1d2e3f203774dbe049389e195160, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  _blade: {fileID: 688427628865633301}
+  _tip: {fileID: 9006483180403487930}
+  _base: {fileID: 7249659932052553793}
+  _forceAppliedToCut: 3
+  extendSpeed: 0.1
+  maximumSwordSize: 7
+  activateBlade:
+    actionPath: 
+    needsReinit: 0
 --- !u!1 &2113930384389249603
 GameObject:
   m_ObjectHideFlags: 0
@@ -192,20 +243,6 @@ MeshCollider:
   m_Convex: 0
   m_CookingOptions: 30
   m_Mesh: {fileID: -7387706064836869012, guid: 2e0427b29f4946d499452abb5d082636, type: 3}
---- !u!136 &8638861390797501157
-CapsuleCollider:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 3225311681837171379}
-  m_Material: {fileID: 0}
-  m_IsTrigger: 0
-  m_Enabled: 1
-  m_Radius: 0.015
-  m_Height: 0.9165672
-  m_Direction: 1
-  m_Center: {x: 0, y: 0.4582836, z: 0}
 --- !u!1 &3408129264393719073
 GameObject:
   m_ObjectHideFlags: 0
@@ -948,6 +985,36 @@ MeshCollider:
   m_Convex: 0
   m_CookingOptions: 30
   m_Mesh: {fileID: -125435165217083709, guid: 2e0427b29f4946d499452abb5d082636, type: 3}
+--- !u!1 &7249659932052553793
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 1381259125534858650}
+  m_Layer: 0
+  m_Name: BladeBase
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &1381259125534858650
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 7249659932052553793}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 199875732362094255}
+  m_RootOrder: 1
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
 --- !u!1 &7769661174558955510
 GameObject:
   m_ObjectHideFlags: 0
@@ -1073,7 +1140,7 @@ Transform:
   m_LocalScale: {x: 0.1722259, y: 0.1722259, z: 0.1722259}
   m_Children:
   - {fileID: 1346793771699192155}
-  - {fileID: 2848891038865741833}
+  - {fileID: 199875732362094255}
   - {fileID: 1390914449952353266}
   m_Father: {fileID: 0}
   m_RootOrder: 0
@@ -1090,13 +1157,46 @@ MonoBehaviour:
   m_Script: {fileID: 11500000, guid: 6b8f1d2e3f203774dbe049389e195160, type: 3}
   m_Name: 
   m_EditorClassIdentifier: 
-  bladeHolder: {fileID: 3225311681837171379}
-  maximumSwordSize: 6.5
+  _blade: {fileID: 0}
+  _tip: {fileID: 0}
+  _base: {fileID: 0}
+  _forceAppliedToCut: 3
   extendSpeed: 0.1
+  maximumSwordSize: 6.5
   activateBlade:
     actionPath: 
     needsReinit: 0
---- !u!1001 &2306953735972044770
+--- !u!1 &9006483180403487930
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 6548567222616591649}
+  m_Layer: 0
+  m_Name: BladeTip
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &6548567222616591649
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 9006483180403487930}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0.9097, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 199875732362094255}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1001 &381856634862076228
 PrefabInstance:
   m_ObjectHideFlags: 0
   serializedVersion: 2
@@ -1116,7 +1216,7 @@ PrefabInstance:
     - target: {fileID: -8679921383154817045, guid: d122b058ea637564b9937b70b0b60d86,
         type: 3}
       propertyPath: m_LocalScale.y
-      value: 6.5
+      value: 7
       objectReference: {fileID: 0}
     - target: {fileID: -8679921383154817045, guid: d122b058ea637564b9937b70b0b60d86,
         type: 3}
@@ -1126,12 +1226,12 @@ PrefabInstance:
     - target: {fileID: -8679921383154817045, guid: d122b058ea637564b9937b70b0b60d86,
         type: 3}
       propertyPath: m_LocalPosition.x
-      value: -0
+      value: 0
       objectReference: {fileID: 0}
     - target: {fileID: -8679921383154817045, guid: d122b058ea637564b9937b70b0b60d86,
         type: 3}
       propertyPath: m_LocalPosition.y
-      value: 2.430001
+      value: 2.4300005
       objectReference: {fileID: 0}
     - target: {fileID: -8679921383154817045, guid: d122b058ea637564b9937b70b0b60d86,
         type: 3}
@@ -1146,7 +1246,7 @@ PrefabInstance:
     - target: {fileID: -8679921383154817045, guid: d122b058ea637564b9937b70b0b60d86,
         type: 3}
       propertyPath: m_LocalRotation.x
-      value: 0
+      value: -0
       objectReference: {fileID: 0}
     - target: {fileID: -8679921383154817045, guid: d122b058ea637564b9937b70b0b60d86,
         type: 3}
@@ -1185,15 +1285,15 @@ PrefabInstance:
       objectReference: {fileID: 0}
     m_RemovedComponents: []
   m_SourcePrefab: {fileID: 100100000, guid: d122b058ea637564b9937b70b0b60d86, type: 3}
---- !u!1 &3225311681837171379 stripped
-GameObject:
-  m_CorrespondingSourceObject: {fileID: 919132149155446097, guid: d122b058ea637564b9937b70b0b60d86,
-    type: 3}
-  m_PrefabInstance: {fileID: 2306953735972044770}
-  m_PrefabAsset: {fileID: 0}
---- !u!4 &2848891038865741833 stripped
+--- !u!4 &199875732362094255 stripped
 Transform:
   m_CorrespondingSourceObject: {fileID: -8679921383154817045, guid: d122b058ea637564b9937b70b0b60d86,
     type: 3}
-  m_PrefabInstance: {fileID: 2306953735972044770}
+  m_PrefabInstance: {fileID: 381856634862076228}
+  m_PrefabAsset: {fileID: 0}
+--- !u!1 &688427628865633301 stripped
+GameObject:
+  m_CorrespondingSourceObject: {fileID: 919132149155446097, guid: d122b058ea637564b9937b70b0b60d86,
+    type: 3}
+  m_PrefabInstance: {fileID: 381856634862076228}
   m_PrefabAsset: {fileID: 0}
diff --git a/Assets/Models/Lightsabers/SaberRed.prefab b/Assets/Models/Lightsabers/SaberRed.prefab
index 0f7bb0ab8e3f2087d6eb5880497bf442716e5ab6..0321cb6bd57b59a119da83a179227ae024bd5e9c 100644
--- a/Assets/Models/Lightsabers/SaberRed.prefab
+++ b/Assets/Models/Lightsabers/SaberRed.prefab
@@ -40,20 +40,6 @@ Transform:
   m_Father: {fileID: 2631477764915917491}
   m_RootOrder: 0
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
---- !u!136 &6138242976932105645
-CapsuleCollider:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 746625454528537934}
-  m_Material: {fileID: 0}
-  m_IsTrigger: 0
-  m_Enabled: 1
-  m_Radius: 0.015
-  m_Height: 0.9165672
-  m_Direction: 1
-  m_Center: {x: 0, y: 0.4582836, z: 0}
 --- !u!1 &775822491111855997
 GameObject:
   m_ObjectHideFlags: 0
@@ -785,7 +771,7 @@ Transform:
   m_LocalScale: {x: 0.1722259, y: 0.1722259, z: 0.1722259}
   m_Children:
   - {fileID: 7026599620898821591}
-  - {fileID: 78631890810077172}
+  - {fileID: 7931919499572317613}
   - {fileID: 1936758862765474806}
   m_Father: {fileID: 0}
   m_RootOrder: 0
@@ -802,9 +788,12 @@ MonoBehaviour:
   m_Script: {fileID: 11500000, guid: 6b8f1d2e3f203774dbe049389e195160, type: 3}
   m_Name: 
   m_EditorClassIdentifier: 
-  bladeHolder: {fileID: 746625454528537934}
-  maximumSwordSize: 6.5
+  _blade: {fileID: 0}
+  _tip: {fileID: 0}
+  _base: {fileID: 0}
+  _forceAppliedToCut: 3
   extendSpeed: 0.1
+  maximumSwordSize: 6.5
   activateBlade:
     actionPath: 
     needsReinit: 0
@@ -1096,7 +1085,118 @@ MeshCollider:
   m_Convex: 0
   m_CookingOptions: 30
   m_Mesh: {fileID: 3390558720134950976, guid: 2e0427b29f4946d499452abb5d082636, type: 3}
---- !u!1001 &476785851783518239
+--- !u!54 &6365243369612149457
+Rigidbody:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 7302593869151000343}
+  serializedVersion: 2
+  m_Mass: 1
+  m_Drag: 0
+  m_AngularDrag: 0.05
+  m_UseGravity: 0
+  m_IsKinematic: 1
+  m_Interpolate: 0
+  m_Constraints: 0
+  m_CollisionDetection: 0
+--- !u!64 &6945370504838758461
+MeshCollider:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 7302593869151000343}
+  m_Material: {fileID: 0}
+  m_IsTrigger: 1
+  m_Enabled: 1
+  serializedVersion: 4
+  m_Convex: 1
+  m_CookingOptions: 30
+  m_Mesh: {fileID: 7401353886334607404, guid: d122b058ea637564b9937b70b0b60d86, type: 3}
+--- !u!114 &8744196058865543180
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 7302593869151000343}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 6b8f1d2e3f203774dbe049389e195160, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  _blade: {fileID: 7302593869151000343}
+  _tip: {fileID: 7554108608169366222}
+  _base: {fileID: 9201128464475190540}
+  _forceAppliedToCut: 3
+  extendSpeed: 0.1
+  maximumSwordSize: 7
+  activateBlade:
+    actionPath: 
+    needsReinit: 0
+--- !u!1 &7554108608169366222
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 5599105018017814699}
+  m_Layer: 0
+  m_Name: BladeTip
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &5599105018017814699
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 7554108608169366222}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0.9097, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 7931919499572317613}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &9201128464475190540
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 6069788664474740941}
+  m_Layer: 0
+  m_Name: BladeBase
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &6069788664474740941
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 9201128464475190540}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 7931919499572317613}
+  m_RootOrder: 1
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1001 &7609235911577823814
 PrefabInstance:
   m_ObjectHideFlags: 0
   serializedVersion: 2
@@ -1116,7 +1216,7 @@ PrefabInstance:
     - target: {fileID: -8679921383154817045, guid: d122b058ea637564b9937b70b0b60d86,
         type: 3}
       propertyPath: m_LocalScale.y
-      value: 6.5
+      value: 7
       objectReference: {fileID: 0}
     - target: {fileID: -8679921383154817045, guid: d122b058ea637564b9937b70b0b60d86,
         type: 3}
@@ -1131,7 +1231,7 @@ PrefabInstance:
     - target: {fileID: -8679921383154817045, guid: d122b058ea637564b9937b70b0b60d86,
         type: 3}
       propertyPath: m_LocalPosition.y
-      value: 2.430001
+      value: 2.4300005
       objectReference: {fileID: 0}
     - target: {fileID: -8679921383154817045, guid: d122b058ea637564b9937b70b0b60d86,
         type: 3}
@@ -1146,7 +1246,7 @@ PrefabInstance:
     - target: {fileID: -8679921383154817045, guid: d122b058ea637564b9937b70b0b60d86,
         type: 3}
       propertyPath: m_LocalRotation.x
-      value: 0
+      value: -0
       objectReference: {fileID: 0}
     - target: {fileID: -8679921383154817045, guid: d122b058ea637564b9937b70b0b60d86,
         type: 3}
@@ -1185,15 +1285,15 @@ PrefabInstance:
       objectReference: {fileID: 0}
     m_RemovedComponents: []
   m_SourcePrefab: {fileID: 100100000, guid: d122b058ea637564b9937b70b0b60d86, type: 3}
---- !u!1 &746625454528537934 stripped
+--- !u!1 &7302593869151000343 stripped
 GameObject:
   m_CorrespondingSourceObject: {fileID: 919132149155446097, guid: d122b058ea637564b9937b70b0b60d86,
     type: 3}
-  m_PrefabInstance: {fileID: 476785851783518239}
+  m_PrefabInstance: {fileID: 7609235911577823814}
   m_PrefabAsset: {fileID: 0}
---- !u!4 &78631890810077172 stripped
+--- !u!4 &7931919499572317613 stripped
 Transform:
   m_CorrespondingSourceObject: {fileID: -8679921383154817045, guid: d122b058ea637564b9937b70b0b60d86,
     type: 3}
-  m_PrefabInstance: {fileID: 476785851783518239}
+  m_PrefabInstance: {fileID: 7609235911577823814}
   m_PrefabAsset: {fileID: 0}
diff --git a/Assets/Models/barrel_WIP.fbx.meta b/Assets/Models/barrel_WIP.fbx.meta
index 8539909a05742f66f0f888036a8f581c500874a6..be3ec0558092af426840d12783f16a2384dd0334 100644
--- a/Assets/Models/barrel_WIP.fbx.meta
+++ b/Assets/Models/barrel_WIP.fbx.meta
@@ -31,7 +31,7 @@ ModelImporter:
     extraExposedTransformPaths: []
     extraUserProperties: []
     clipAnimations: []
-    isReadable: 0
+    isReadable: 1
   meshes:
     lODScreenPercentages: []
     globalScale: 1
diff --git a/Assets/Scenes/SampleScene.unity b/Assets/Scenes/SampleScene.unity
index 6e9023ce431ec1ba35db674acc9c3f90e6b892a9..c57b7d04be43786877f4c2d4f057b3343ff9a530 100644
--- a/Assets/Scenes/SampleScene.unity
+++ b/Assets/Scenes/SampleScene.unity
@@ -192,7 +192,7 @@ PrefabInstance:
     - target: {fileID: -8679921383154817045, guid: b3eab5198c7b27a4284f286f025afcec,
         type: 3}
       propertyPath: m_RootOrder
-      value: 11
+      value: 13
       objectReference: {fileID: 0}
     - target: {fileID: -8679921383154817045, guid: b3eab5198c7b27a4284f286f025afcec,
         type: 3}
@@ -447,7 +447,7 @@ PrefabInstance:
     - target: {fileID: -8679921383154817045, guid: a4455556c88b6bd4fb0379b366d0b1be,
         type: 3}
       propertyPath: m_RootOrder
-      value: 8
+      value: 10
       objectReference: {fileID: 0}
     - target: {fileID: -8679921383154817045, guid: a4455556c88b6bd4fb0379b366d0b1be,
         type: 3}
@@ -907,7 +907,7 @@ Mesh:
   m_CorrespondingSourceObject: {fileID: 0}
   m_PrefabInstance: {fileID: 0}
   m_PrefabAsset: {fileID: 0}
-  m_Name: pb_Mesh40220
+  m_Name: pb_Mesh44052
   serializedVersion: 10
   m_SubMeshes:
   - serializedVersion: 2
@@ -1259,7 +1259,7 @@ Transform:
   - {fileID: 979253159}
   - {fileID: 567635848}
   m_Father: {fileID: 0}
-  m_RootOrder: 21
+  m_RootOrder: 23
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
 --- !u!4 &103212238 stripped
 Transform:
@@ -1604,7 +1604,7 @@ PrefabInstance:
       objectReference: {fileID: 0}
     - target: {fileID: 4368652640090004, guid: f662bb257bdbe4b4098d75c944baa81f, type: 3}
       propertyPath: m_RootOrder
-      value: 6
+      value: 8
       objectReference: {fileID: 0}
     - target: {fileID: 4368652640090004, guid: f662bb257bdbe4b4098d75c944baa81f, type: 3}
       propertyPath: m_LocalPosition.x
@@ -2589,7 +2589,7 @@ Mesh:
   m_CorrespondingSourceObject: {fileID: 0}
   m_PrefabInstance: {fileID: 0}
   m_PrefabAsset: {fileID: 0}
-  m_Name: pb_Mesh40602
+  m_Name: pb_Mesh44438
   serializedVersion: 10
   m_SubMeshes:
   - serializedVersion: 2
@@ -3546,7 +3546,7 @@ PrefabInstance:
       objectReference: {fileID: 0}
     - target: {fileID: 447954, guid: dc06161b6d97feb419f45f03b62e14b9, type: 3}
       propertyPath: m_RootOrder
-      value: 0
+      value: 3
       objectReference: {fileID: 0}
     - target: {fileID: 447954, guid: dc06161b6d97feb419f45f03b62e14b9, type: 3}
       propertyPath: m_LocalPosition.x
@@ -3713,7 +3713,7 @@ Transform:
   - {fileID: 618853050}
   - {fileID: 1795159564}
   m_Father: {fileID: 0}
-  m_RootOrder: 14
+  m_RootOrder: 16
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
 --- !u!1001 &336075329
 PrefabInstance:
@@ -4119,7 +4119,7 @@ PrefabInstance:
       objectReference: {fileID: 0}
     - target: {fileID: 4008618577427338, guid: f60a68fd009415d44bee80b63a157895, type: 3}
       propertyPath: m_RootOrder
-      value: 36
+      value: 38
       objectReference: {fileID: 0}
     - target: {fileID: 4008618577427338, guid: f60a68fd009415d44bee80b63a157895, type: 3}
       propertyPath: m_LocalPosition.x
@@ -4585,7 +4585,7 @@ Transform:
   m_LocalScale: {x: 1, y: 1, z: 1}
   m_Children: []
   m_Father: {fileID: 0}
-  m_RootOrder: 24
+  m_RootOrder: 27
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
 --- !u!1001 &400311175
 PrefabInstance:
@@ -4950,7 +4950,7 @@ PrefabInstance:
       objectReference: {fileID: 0}
     - target: {fileID: 4008618577427338, guid: f60a68fd009415d44bee80b63a157895, type: 3}
       propertyPath: m_RootOrder
-      value: 35
+      value: 37
       objectReference: {fileID: 0}
     - target: {fileID: 4008618577427338, guid: f60a68fd009415d44bee80b63a157895, type: 3}
       propertyPath: m_LocalPosition.x
@@ -5340,7 +5340,7 @@ Mesh:
   m_CorrespondingSourceObject: {fileID: 0}
   m_PrefabInstance: {fileID: 0}
   m_PrefabAsset: {fileID: 0}
-  m_Name: pb_Mesh40356
+  m_Name: pb_Mesh44188
   serializedVersion: 10
   m_SubMeshes:
   - serializedVersion: 2
@@ -5798,7 +5798,7 @@ PrefabInstance:
       objectReference: {fileID: 0}
     - target: {fileID: 4052385530168264, guid: 3f2079bea2fbaae40a0d35e362897421, type: 3}
       propertyPath: m_RootOrder
-      value: 7
+      value: 9
       objectReference: {fileID: 0}
     - target: {fileID: 4052385530168264, guid: 3f2079bea2fbaae40a0d35e362897421, type: 3}
       propertyPath: m_LocalPosition.x
@@ -6219,7 +6219,7 @@ Mesh:
   m_CorrespondingSourceObject: {fileID: 0}
   m_PrefabInstance: {fileID: 0}
   m_PrefabAsset: {fileID: 0}
-  m_Name: pb_Mesh40772
+  m_Name: pb_Mesh44610
   serializedVersion: 10
   m_SubMeshes:
   - serializedVersion: 2
@@ -6469,7 +6469,7 @@ PrefabInstance:
     - target: {fileID: -8679921383154817045, guid: 3402a939aeed1964cb422d698db9c248,
         type: 3}
       propertyPath: m_LocalPosition.y
-      value: 0.5
+      value: 1.314
       objectReference: {fileID: 0}
     - target: {fileID: -8679921383154817045, guid: 3402a939aeed1964cb422d698db9c248,
         type: 3}
@@ -6535,8 +6535,8 @@ GameObject:
     type: 3}
   m_PrefabInstance: {fileID: 538163532}
   m_PrefabAsset: {fileID: 0}
---- !u!65 &538163535
-BoxCollider:
+--- !u!64 &538163535
+MeshCollider:
   m_ObjectHideFlags: 0
   m_CorrespondingSourceObject: {fileID: 0}
   m_PrefabInstance: {fileID: 0}
@@ -6545,23 +6545,27 @@ BoxCollider:
   m_Material: {fileID: 0}
   m_IsTrigger: 0
   m_Enabled: 1
-  serializedVersion: 2
-  m_Size: {x: 0.01, y: 0.01, z: 0.001}
-  m_Center: {x: 0.000000014901161, y: -4.6566118e-10, z: -0.01}
---- !u!136 &538163536
-CapsuleCollider:
+  serializedVersion: 4
+  m_Convex: 0
+  m_CookingOptions: 30
+  m_Mesh: {fileID: 2534964839176971238, guid: 3402a939aeed1964cb422d698db9c248, type: 3}
+--- !u!114 &538163536
+MonoBehaviour:
   m_ObjectHideFlags: 0
   m_CorrespondingSourceObject: {fileID: 0}
   m_PrefabInstance: {fileID: 0}
   m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 538163534}
-  m_Material: {fileID: 0}
-  m_IsTrigger: 0
   m_Enabled: 1
-  m_Radius: 0.010644982
-  m_Height: 0.021289958
-  m_Direction: 2
-  m_Center: {x: 0.000000014901161, y: -4.6566118e-10, z: 0.000036322508}
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 7df4eb6bebdaf4548b4746999af2a2ef, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  _isSolid: 1
+  _reverseWindTriangles: 0
+  _useGravity: 1
+  _shareVertices: 0
+  _smoothVertices: 0
 --- !u!54 &538163537
 Rigidbody:
   m_ObjectHideFlags: 0
@@ -6574,7 +6578,7 @@ Rigidbody:
   m_Drag: 0
   m_AngularDrag: 0.05
   m_UseGravity: 1
-  m_IsKinematic: 0
+  m_IsKinematic: 1
   m_Interpolate: 0
   m_Constraints: 0
   m_CollisionDetection: 0
@@ -7976,7 +7980,7 @@ Mesh:
   m_CorrespondingSourceObject: {fileID: 0}
   m_PrefabInstance: {fileID: 0}
   m_PrefabAsset: {fileID: 0}
-  m_Name: pb_Mesh39886
+  m_Name: pb_Mesh43716
   serializedVersion: 10
   m_SubMeshes:
   - serializedVersion: 2
@@ -8339,7 +8343,7 @@ PrefabInstance:
     - target: {fileID: -8679921383154817045, guid: b9a9009d4c96ae249a1f532f94089974,
         type: 3}
       propertyPath: m_RootOrder
-      value: 23
+      value: 24
       objectReference: {fileID: 0}
     - target: {fileID: -8679921383154817045, guid: b9a9009d4c96ae249a1f532f94089974,
         type: 3}
@@ -8797,7 +8801,7 @@ Transform:
   m_LocalScale: {x: 1, y: 1, z: 1}
   m_Children: []
   m_Father: {fileID: 0}
-  m_RootOrder: 13
+  m_RootOrder: 15
   m_LocalEulerAnglesHint: {x: 114.10199, y: -136.245, z: -87.15799}
 --- !u!114 &705507996
 MonoBehaviour:
@@ -9135,7 +9139,7 @@ PrefabInstance:
       objectReference: {fileID: 0}
     - target: {fileID: 4214997939682252, guid: 6f6bf2b372bf5ea43977fb96a1b11e88, type: 3}
       propertyPath: m_RootOrder
-      value: 9
+      value: 11
       objectReference: {fileID: 0}
     - target: {fileID: 4214997939682252, guid: 6f6bf2b372bf5ea43977fb96a1b11e88, type: 3}
       propertyPath: m_LocalPosition.x
@@ -10494,7 +10498,7 @@ PrefabInstance:
       objectReference: {fileID: 0}
     - target: {fileID: 4030702537426336, guid: defc1954bd6bc1347aa94a45192f58db, type: 3}
       propertyPath: m_RootOrder
-      value: 3
+      value: 5
       objectReference: {fileID: 0}
     - target: {fileID: 4030702537426336, guid: defc1954bd6bc1347aa94a45192f58db, type: 3}
       propertyPath: m_LocalPosition.x
@@ -11403,7 +11407,7 @@ PrefabInstance:
     - target: {fileID: -8679921383154817045, guid: f2779c59847ee594788a122ee1f03195,
         type: 3}
       propertyPath: m_RootOrder
-      value: 29
+      value: 31
       objectReference: {fileID: 0}
     - target: {fileID: -8679921383154817045, guid: f2779c59847ee594788a122ee1f03195,
         type: 3}
@@ -13056,7 +13060,7 @@ PrefabInstance:
     - target: {fileID: -8679921383154817045, guid: b9a9009d4c96ae249a1f532f94089974,
         type: 3}
       propertyPath: m_RootOrder
-      value: 25
+      value: 26
       objectReference: {fileID: 0}
     - target: {fileID: -8679921383154817045, guid: b9a9009d4c96ae249a1f532f94089974,
         type: 3}
@@ -13547,7 +13551,7 @@ Transform:
   - {fileID: 1426559845}
   - {fileID: 325786952}
   m_Father: {fileID: 0}
-  m_RootOrder: 19
+  m_RootOrder: 21
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
 --- !u!1001 &925733554
 PrefabInstance:
@@ -38272,7 +38276,7 @@ PrefabInstance:
       objectReference: {fileID: 0}
     - target: {fileID: 4008618577427338, guid: f60a68fd009415d44bee80b63a157895, type: 3}
       propertyPath: m_RootOrder
-      value: 1
+      value: 4
       objectReference: {fileID: 0}
     - target: {fileID: 4008618577427338, guid: f60a68fd009415d44bee80b63a157895, type: 3}
       propertyPath: m_LocalPosition.x
@@ -43325,7 +43329,7 @@ Transform:
   - {fileID: 440575160}
   - {fileID: 177675886}
   m_Father: {fileID: 0}
-  m_RootOrder: 16
+  m_RootOrder: 18
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
 --- !u!1001 &1032276778
 PrefabInstance:
@@ -43698,7 +43702,7 @@ Transform:
   - {fileID: 868096425}
   - {fileID: 1882430989}
   m_Father: {fileID: 0}
-  m_RootOrder: 18
+  m_RootOrder: 20
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
 --- !u!4 &1059569740 stripped
 Transform:
@@ -44065,6 +44069,75 @@ Transform:
     type: 3}
   m_PrefabInstance: {fileID: 1097986361}
   m_PrefabAsset: {fileID: 0}
+--- !u!1001 &1099240587
+PrefabInstance:
+  m_ObjectHideFlags: 0
+  serializedVersion: 2
+  m_Modification:
+    m_TransformParent: {fileID: 0}
+    m_Modifications:
+    - target: {fileID: 3441095255025812787, guid: 79f30c7baf59f68468ea82a38473449d,
+        type: 3}
+      propertyPath: m_Name
+      value: SaberBlue
+      objectReference: {fileID: 0}
+    - target: {fileID: 5247273969708224055, guid: 79f30c7baf59f68468ea82a38473449d,
+        type: 3}
+      propertyPath: m_RootOrder
+      value: 2
+      objectReference: {fileID: 0}
+    - target: {fileID: 5247273969708224055, guid: 79f30c7baf59f68468ea82a38473449d,
+        type: 3}
+      propertyPath: m_LocalPosition.x
+      value: 7.313
+      objectReference: {fileID: 0}
+    - target: {fileID: 5247273969708224055, guid: 79f30c7baf59f68468ea82a38473449d,
+        type: 3}
+      propertyPath: m_LocalPosition.y
+      value: 1.47
+      objectReference: {fileID: 0}
+    - target: {fileID: 5247273969708224055, guid: 79f30c7baf59f68468ea82a38473449d,
+        type: 3}
+      propertyPath: m_LocalPosition.z
+      value: -15.404
+      objectReference: {fileID: 0}
+    - target: {fileID: 5247273969708224055, guid: 79f30c7baf59f68468ea82a38473449d,
+        type: 3}
+      propertyPath: m_LocalRotation.w
+      value: 0.7067334
+      objectReference: {fileID: 0}
+    - target: {fileID: 5247273969708224055, guid: 79f30c7baf59f68468ea82a38473449d,
+        type: 3}
+      propertyPath: m_LocalRotation.x
+      value: 0.70748
+      objectReference: {fileID: 0}
+    - target: {fileID: 5247273969708224055, guid: 79f30c7baf59f68468ea82a38473449d,
+        type: 3}
+      propertyPath: m_LocalRotation.y
+      value: -0
+      objectReference: {fileID: 0}
+    - target: {fileID: 5247273969708224055, guid: 79f30c7baf59f68468ea82a38473449d,
+        type: 3}
+      propertyPath: m_LocalRotation.z
+      value: -0
+      objectReference: {fileID: 0}
+    - target: {fileID: 5247273969708224055, guid: 79f30c7baf59f68468ea82a38473449d,
+        type: 3}
+      propertyPath: m_LocalEulerAnglesHint.x
+      value: 89.944
+      objectReference: {fileID: 0}
+    - target: {fileID: 5247273969708224055, guid: 79f30c7baf59f68468ea82a38473449d,
+        type: 3}
+      propertyPath: m_LocalEulerAnglesHint.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 5247273969708224055, guid: 79f30c7baf59f68468ea82a38473449d,
+        type: 3}
+      propertyPath: m_LocalEulerAnglesHint.z
+      value: 0
+      objectReference: {fileID: 0}
+    m_RemovedComponents: []
+  m_SourcePrefab: {fileID: 100100000, guid: 79f30c7baf59f68468ea82a38473449d, type: 3}
 --- !u!1001 &1099371949
 PrefabInstance:
   m_ObjectHideFlags: 0
@@ -44240,7 +44313,7 @@ Transform:
   m_LocalScale: {x: 1, y: 1, z: 1}
   m_Children: []
   m_Father: {fileID: 0}
-  m_RootOrder: 22
+  m_RootOrder: 25
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
 --- !u!1001 &1117867616
 PrefabInstance:
@@ -44807,7 +44880,7 @@ PrefabInstance:
     - target: {fileID: -8679921383154817045, guid: b9a9009d4c96ae249a1f532f94089974,
         type: 3}
       propertyPath: m_RootOrder
-      value: 26
+      value: 28
       objectReference: {fileID: 0}
     - target: {fileID: -8679921383154817045, guid: b9a9009d4c96ae249a1f532f94089974,
         type: 3}
@@ -45034,7 +45107,7 @@ PrefabInstance:
       objectReference: {fileID: 0}
     - target: {fileID: 4008618577427338, guid: f60a68fd009415d44bee80b63a157895, type: 3}
       propertyPath: m_RootOrder
-      value: 38
+      value: 40
       objectReference: {fileID: 0}
     - target: {fileID: 4008618577427338, guid: f60a68fd009415d44bee80b63a157895, type: 3}
       propertyPath: m_LocalPosition.x
@@ -46251,7 +46324,7 @@ PrefabInstance:
       objectReference: {fileID: 0}
     - target: {fileID: 4264151941027994, guid: 92013a4fbb8606940991197d497f999d, type: 3}
       propertyPath: m_RootOrder
-      value: 4
+      value: 6
       objectReference: {fileID: 0}
     - target: {fileID: 4264151941027994, guid: 92013a4fbb8606940991197d497f999d, type: 3}
       propertyPath: m_LocalPosition.x
@@ -46464,7 +46537,7 @@ PrefabInstance:
       objectReference: {fileID: 0}
     - target: {fileID: 4432952677729790, guid: 47ec7938f499f9f4d8a61ca589432ee0, type: 3}
       propertyPath: m_RootOrder
-      value: 5
+      value: 7
       objectReference: {fileID: 0}
     - target: {fileID: 4432952677729790, guid: 47ec7938f499f9f4d8a61ca589432ee0, type: 3}
       propertyPath: m_LocalPosition.x
@@ -46521,7 +46594,7 @@ PrefabInstance:
       objectReference: {fileID: 0}
     - target: {fileID: 4008618577427338, guid: f60a68fd009415d44bee80b63a157895, type: 3}
       propertyPath: m_RootOrder
-      value: 37
+      value: 39
       objectReference: {fileID: 0}
     - target: {fileID: 4008618577427338, guid: f60a68fd009415d44bee80b63a157895, type: 3}
       propertyPath: m_LocalPosition.x
@@ -48388,7 +48461,7 @@ Transform:
   - {fileID: 1016733342}
   - {fileID: 596015964}
   m_Father: {fileID: 0}
-  m_RootOrder: 20
+  m_RootOrder: 22
   m_LocalEulerAnglesHint: {x: 0, y: -90, z: 0}
 --- !u!43 &1456550662
 Mesh:
@@ -48396,7 +48469,7 @@ Mesh:
   m_CorrespondingSourceObject: {fileID: 0}
   m_PrefabInstance: {fileID: 0}
   m_PrefabAsset: {fileID: 0}
-  m_Name: pb_Mesh41538
+  m_Name: pb_Mesh45394
   serializedVersion: 10
   m_SubMeshes:
   - serializedVersion: 2
@@ -48564,7 +48637,7 @@ PrefabInstance:
     - target: {fileID: -8679921383154817045, guid: b3eab5198c7b27a4284f286f025afcec,
         type: 3}
       propertyPath: m_RootOrder
-      value: 10
+      value: 12
       objectReference: {fileID: 0}
     - target: {fileID: -8679921383154817045, guid: b3eab5198c7b27a4284f286f025afcec,
         type: 3}
@@ -48666,7 +48739,7 @@ PrefabInstance:
       objectReference: {fileID: 0}
     - target: {fileID: 4008618577427338, guid: f60a68fd009415d44bee80b63a157895, type: 3}
       propertyPath: m_RootOrder
-      value: 30
+      value: 32
       objectReference: {fileID: 0}
     - target: {fileID: 4008618577427338, guid: f60a68fd009415d44bee80b63a157895, type: 3}
       propertyPath: m_LocalPosition.x
@@ -48755,7 +48828,7 @@ Mesh:
   m_CorrespondingSourceObject: {fileID: 0}
   m_PrefabInstance: {fileID: 0}
   m_PrefabAsset: {fileID: 0}
-  m_Name: pb_Mesh41290
+  m_Name: pb_Mesh45144
   serializedVersion: 10
   m_SubMeshes:
   - serializedVersion: 2
@@ -50883,75 +50956,6 @@ Transform:
   m_Father: {fileID: 333071810}
   m_RootOrder: 1
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
---- !u!1001 &1486644277
-PrefabInstance:
-  m_ObjectHideFlags: 0
-  serializedVersion: 2
-  m_Modification:
-    m_TransformParent: {fileID: 0}
-    m_Modifications:
-    - target: {fileID: 3441095255025812787, guid: 79f30c7baf59f68468ea82a38473449d,
-        type: 3}
-      propertyPath: m_Name
-      value: SaberBlue
-      objectReference: {fileID: 0}
-    - target: {fileID: 5247273969708224055, guid: 79f30c7baf59f68468ea82a38473449d,
-        type: 3}
-      propertyPath: m_RootOrder
-      value: 2
-      objectReference: {fileID: 0}
-    - target: {fileID: 5247273969708224055, guid: 79f30c7baf59f68468ea82a38473449d,
-        type: 3}
-      propertyPath: m_LocalPosition.x
-      value: -7.625
-      objectReference: {fileID: 0}
-    - target: {fileID: 5247273969708224055, guid: 79f30c7baf59f68468ea82a38473449d,
-        type: 3}
-      propertyPath: m_LocalPosition.y
-      value: 1.0025208
-      objectReference: {fileID: 0}
-    - target: {fileID: 5247273969708224055, guid: 79f30c7baf59f68468ea82a38473449d,
-        type: 3}
-      propertyPath: m_LocalPosition.z
-      value: -9.248041
-      objectReference: {fileID: 0}
-    - target: {fileID: 5247273969708224055, guid: 79f30c7baf59f68468ea82a38473449d,
-        type: 3}
-      propertyPath: m_LocalRotation.w
-      value: 1
-      objectReference: {fileID: 0}
-    - target: {fileID: 5247273969708224055, guid: 79f30c7baf59f68468ea82a38473449d,
-        type: 3}
-      propertyPath: m_LocalRotation.x
-      value: 0
-      objectReference: {fileID: 0}
-    - target: {fileID: 5247273969708224055, guid: 79f30c7baf59f68468ea82a38473449d,
-        type: 3}
-      propertyPath: m_LocalRotation.y
-      value: 0
-      objectReference: {fileID: 0}
-    - target: {fileID: 5247273969708224055, guid: 79f30c7baf59f68468ea82a38473449d,
-        type: 3}
-      propertyPath: m_LocalRotation.z
-      value: 0
-      objectReference: {fileID: 0}
-    - target: {fileID: 5247273969708224055, guid: 79f30c7baf59f68468ea82a38473449d,
-        type: 3}
-      propertyPath: m_LocalEulerAnglesHint.x
-      value: 0
-      objectReference: {fileID: 0}
-    - target: {fileID: 5247273969708224055, guid: 79f30c7baf59f68468ea82a38473449d,
-        type: 3}
-      propertyPath: m_LocalEulerAnglesHint.y
-      value: 0
-      objectReference: {fileID: 0}
-    - target: {fileID: 5247273969708224055, guid: 79f30c7baf59f68468ea82a38473449d,
-        type: 3}
-      propertyPath: m_LocalEulerAnglesHint.z
-      value: 0
-      objectReference: {fileID: 0}
-    m_RemovedComponents: []
-  m_SourcePrefab: {fileID: 100100000, guid: 79f30c7baf59f68468ea82a38473449d, type: 3}
 --- !u!1001 &1487455162
 PrefabInstance:
   m_ObjectHideFlags: 0
@@ -51437,7 +51441,7 @@ PrefabInstance:
       objectReference: {fileID: 0}
     - target: {fileID: 4008618577427338, guid: f60a68fd009415d44bee80b63a157895, type: 3}
       propertyPath: m_RootOrder
-      value: 34
+      value: 36
       objectReference: {fileID: 0}
     - target: {fileID: 4008618577427338, guid: f60a68fd009415d44bee80b63a157895, type: 3}
       propertyPath: m_LocalPosition.x
@@ -51531,7 +51535,7 @@ PrefabInstance:
     - target: {fileID: -8679921383154817045, guid: f2779c59847ee594788a122ee1f03195,
         type: 3}
       propertyPath: m_RootOrder
-      value: 28
+      value: 29
       objectReference: {fileID: 0}
     - target: {fileID: -8679921383154817045, guid: f2779c59847ee594788a122ee1f03195,
         type: 3}
@@ -51934,7 +51938,7 @@ PrefabInstance:
       objectReference: {fileID: 0}
     - target: {fileID: 4008618577427338, guid: f60a68fd009415d44bee80b63a157895, type: 3}
       propertyPath: m_RootOrder
-      value: 33
+      value: 35
       objectReference: {fileID: 0}
     - target: {fileID: 4008618577427338, guid: f60a68fd009415d44bee80b63a157895, type: 3}
       propertyPath: m_LocalPosition.x
@@ -51984,7 +51988,7 @@ Mesh:
   m_CorrespondingSourceObject: {fileID: 0}
   m_PrefabInstance: {fileID: 0}
   m_PrefabAsset: {fileID: 0}
-  m_Name: pb_Mesh41058
+  m_Name: pb_Mesh44912
   serializedVersion: 10
   m_SubMeshes:
   - serializedVersion: 2
@@ -52189,7 +52193,7 @@ PrefabInstance:
       objectReference: {fileID: 0}
     - target: {fileID: 4008618577427338, guid: f60a68fd009415d44bee80b63a157895, type: 3}
       propertyPath: m_RootOrder
-      value: 31
+      value: 33
       objectReference: {fileID: 0}
     - target: {fileID: 4008618577427338, guid: f60a68fd009415d44bee80b63a157895, type: 3}
       propertyPath: m_LocalPosition.x
@@ -58526,7 +58530,7 @@ Mesh:
   m_CorrespondingSourceObject: {fileID: 0}
   m_PrefabInstance: {fileID: 0}
   m_PrefabAsset: {fileID: 0}
-  m_Name: pb_Mesh41228
+  m_Name: pb_Mesh45082
   serializedVersion: 10
   m_SubMeshes:
   - serializedVersion: 2
@@ -59183,8 +59187,139 @@ Transform:
   - {fileID: 258474617}
   - {fileID: 593320218}
   m_Father: {fileID: 0}
-  m_RootOrder: 17
+  m_RootOrder: 19
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &1610002302
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 1610002306}
+  - component: {fileID: 1610002305}
+  - component: {fileID: 1610002304}
+  - component: {fileID: 1610002307}
+  - component: {fileID: 1610002303}
+  - component: {fileID: 1610002308}
+  m_Layer: 0
+  m_Name: Cube
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!64 &1610002303
+MeshCollider:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1610002302}
+  m_Material: {fileID: 0}
+  m_IsTrigger: 0
+  m_Enabled: 1
+  serializedVersion: 4
+  m_Convex: 0
+  m_CookingOptions: 30
+  m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
+--- !u!23 &1610002304
+MeshRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1610002302}
+  m_Enabled: 1
+  m_CastShadows: 1
+  m_ReceiveShadows: 1
+  m_DynamicOccludee: 1
+  m_MotionVectors: 1
+  m_LightProbeUsage: 1
+  m_ReflectionProbeUsage: 1
+  m_RayTracingMode: 2
+  m_RayTraceProcedural: 0
+  m_RenderingLayerMask: 257
+  m_RendererPriority: 0
+  m_Materials:
+  - {fileID: 2100000, guid: 73c176f402d2c2f4d929aa5da7585d17, type: 2}
+  m_StaticBatchInfo:
+    firstSubMesh: 0
+    subMeshCount: 0
+  m_StaticBatchRoot: {fileID: 0}
+  m_ProbeAnchor: {fileID: 0}
+  m_LightProbeVolumeOverride: {fileID: 0}
+  m_ScaleInLightmap: 1
+  m_ReceiveGI: 1
+  m_PreserveUVs: 0
+  m_IgnoreNormalsForChartDetection: 0
+  m_ImportantGI: 0
+  m_StitchLightmapSeams: 1
+  m_SelectedEditorRenderState: 3
+  m_MinimumChartSize: 4
+  m_AutoUVMaxDistance: 0.5
+  m_AutoUVMaxAngle: 89
+  m_LightmapParameters: {fileID: 0}
+  m_SortingLayerID: 0
+  m_SortingLayer: 0
+  m_SortingOrder: 0
+  m_AdditionalVertexStreams: {fileID: 0}
+--- !u!33 &1610002305
+MeshFilter:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1610002302}
+  m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
+--- !u!4 &1610002306
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1610002302}
+  m_LocalRotation: {x: 0.70748, y: -0, z: -0, w: 0.7067334}
+  m_LocalPosition: {x: 6.802, y: 1.425, z: -14.151}
+  m_LocalScale: {x: 0.51, y: 0.46, z: 0.79}
+  m_Children: []
+  m_Father: {fileID: 0}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!54 &1610002307
+Rigidbody:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1610002302}
+  serializedVersion: 2
+  m_Mass: 1
+  m_Drag: 0
+  m_AngularDrag: 0.05
+  m_UseGravity: 1
+  m_IsKinematic: 1
+  m_Interpolate: 0
+  m_Constraints: 0
+  m_CollisionDetection: 0
+--- !u!114 &1610002308
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1610002302}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 7df4eb6bebdaf4548b4746999af2a2ef, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  _isSolid: 1
+  _reverseWindTriangles: 0
+  _useGravity: 1
+  _shareVertices: 0
+  _smoothVertices: 0
 --- !u!1001 &1611375518
 PrefabInstance:
   m_ObjectHideFlags: 0
@@ -60211,7 +60346,7 @@ Transform:
   - {fileID: 180465191}
   - {fileID: 961477948}
   m_Father: {fileID: 0}
-  m_RootOrder: 15
+  m_RootOrder: 17
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
 --- !u!1001 &1715073592
 PrefabInstance:
@@ -60624,7 +60759,7 @@ Mesh:
   m_CorrespondingSourceObject: {fileID: 0}
   m_PrefabInstance: {fileID: 0}
   m_PrefabAsset: {fileID: 0}
-  m_Name: pb_Mesh40972
+  m_Name: pb_Mesh44814
   serializedVersion: 10
   m_SubMeshes:
   - serializedVersion: 2
@@ -62182,7 +62317,7 @@ Mesh:
   m_CorrespondingSourceObject: {fileID: 0}
   m_PrefabInstance: {fileID: 0}
   m_PrefabAsset: {fileID: 0}
-  m_Name: pb_Mesh40548
+  m_Name: pb_Mesh44382
   serializedVersion: 10
   m_SubMeshes:
   - serializedVersion: 2
@@ -63018,6 +63153,75 @@ BoxCollider:
   serializedVersion: 2
   m_Size: {x: 2.0000005, y: 0.5000001, z: 0.5}
   m_Center: {x: -1, y: 0, z: 0}
+--- !u!1001 &1870414369
+PrefabInstance:
+  m_ObjectHideFlags: 0
+  serializedVersion: 2
+  m_Modification:
+    m_TransformParent: {fileID: 0}
+    m_Modifications:
+    - target: {fileID: 947440725445985924, guid: be46f59e5e4dc3e4e826f9f443f8f770,
+        type: 3}
+      propertyPath: m_RootOrder
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 947440725445985924, guid: be46f59e5e4dc3e4e826f9f443f8f770,
+        type: 3}
+      propertyPath: m_LocalPosition.x
+      value: 7.5923142
+      objectReference: {fileID: 0}
+    - target: {fileID: 947440725445985924, guid: be46f59e5e4dc3e4e826f9f443f8f770,
+        type: 3}
+      propertyPath: m_LocalPosition.y
+      value: 0.781
+      objectReference: {fileID: 0}
+    - target: {fileID: 947440725445985924, guid: be46f59e5e4dc3e4e826f9f443f8f770,
+        type: 3}
+      propertyPath: m_LocalPosition.z
+      value: -12.826
+      objectReference: {fileID: 0}
+    - target: {fileID: 947440725445985924, guid: be46f59e5e4dc3e4e826f9f443f8f770,
+        type: 3}
+      propertyPath: m_LocalRotation.w
+      value: 0.91096526
+      objectReference: {fileID: 0}
+    - target: {fileID: 947440725445985924, guid: be46f59e5e4dc3e4e826f9f443f8f770,
+        type: 3}
+      propertyPath: m_LocalRotation.x
+      value: 0.4124832
+      objectReference: {fileID: 0}
+    - target: {fileID: 947440725445985924, guid: be46f59e5e4dc3e4e826f9f443f8f770,
+        type: 3}
+      propertyPath: m_LocalRotation.y
+      value: -0
+      objectReference: {fileID: 0}
+    - target: {fileID: 947440725445985924, guid: be46f59e5e4dc3e4e826f9f443f8f770,
+        type: 3}
+      propertyPath: m_LocalRotation.z
+      value: -0
+      objectReference: {fileID: 0}
+    - target: {fileID: 947440725445985924, guid: be46f59e5e4dc3e4e826f9f443f8f770,
+        type: 3}
+      propertyPath: m_LocalEulerAnglesHint.x
+      value: 48.722
+      objectReference: {fileID: 0}
+    - target: {fileID: 947440725445985924, guid: be46f59e5e4dc3e4e826f9f443f8f770,
+        type: 3}
+      propertyPath: m_LocalEulerAnglesHint.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 947440725445985924, guid: be46f59e5e4dc3e4e826f9f443f8f770,
+        type: 3}
+      propertyPath: m_LocalEulerAnglesHint.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 8797196755077634865, guid: be46f59e5e4dc3e4e826f9f443f8f770,
+        type: 3}
+      propertyPath: m_Name
+      value: SaberPurple
+      objectReference: {fileID: 0}
+    m_RemovedComponents: []
+  m_SourcePrefab: {fileID: 100100000, guid: be46f59e5e4dc3e4e826f9f443f8f770, type: 3}
 --- !u!1 &1876004132
 GameObject:
   m_ObjectHideFlags: 0
@@ -66904,7 +67108,7 @@ Mesh:
   m_CorrespondingSourceObject: {fileID: 0}
   m_PrefabInstance: {fileID: 0}
   m_PrefabAsset: {fileID: 0}
-  m_Name: pb_Mesh40464
+  m_Name: pb_Mesh44298
   serializedVersion: 10
   m_SubMeshes:
   - serializedVersion: 2
@@ -67458,7 +67662,7 @@ PrefabInstance:
       objectReference: {fileID: 0}
     - target: {fileID: 4008618577427338, guid: f60a68fd009415d44bee80b63a157895, type: 3}
       propertyPath: m_RootOrder
-      value: 32
+      value: 34
       objectReference: {fileID: 0}
     - target: {fileID: 4008618577427338, guid: f60a68fd009415d44bee80b63a157895, type: 3}
       propertyPath: m_LocalPosition.x
@@ -68173,7 +68377,7 @@ Transform:
   - {fileID: 40040395}
   - {fileID: 538163533}
   m_Father: {fileID: 0}
-  m_RootOrder: 12
+  m_RootOrder: 14
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
 --- !u!1001 &2091149495
 PrefabInstance:
@@ -68472,7 +68676,7 @@ Transform:
   - {fileID: 1746854949}
   - {fileID: 1862324717}
   m_Father: {fileID: 0}
-  m_RootOrder: 27
+  m_RootOrder: 30
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
 --- !u!4 &2101105017 stripped
 Transform:
diff --git a/Assets/Scripts/LightSaberScripts.meta b/Assets/Scripts/LightSaberScripts.meta
new file mode 100644
index 0000000000000000000000000000000000000000..3f233a17b89f3b17d4de3e8214b6790b6a7531e5
--- /dev/null
+++ b/Assets/Scripts/LightSaberScripts.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: f618e8e87c614af4c997a62140551cb7
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Scripts/LightSaberScripts/Sliceable.cs b/Assets/Scripts/LightSaberScripts/Sliceable.cs
new file mode 100644
index 0000000000000000000000000000000000000000..c40ba16af11cfa9fada069febfa52d03f8822afe
--- /dev/null
+++ b/Assets/Scripts/LightSaberScripts/Sliceable.cs
@@ -0,0 +1,83 @@
+using System.Collections;
+using System.Collections.Generic;
+using System.Security.AccessControl;
+using UnityEngine;
+
+public class Sliceable : MonoBehaviour
+{
+    [SerializeField]
+    private bool _isSolid = true;
+
+    [SerializeField]
+    private bool _reverseWindTriangles = false;
+
+    [SerializeField]
+    private bool _useGravity = false;
+
+    [SerializeField]
+    private bool _shareVertices = false;
+
+    [SerializeField]
+    private bool _smoothVertices = false;
+
+    public bool IsSolid
+    {
+        get
+        {
+            return _isSolid;
+        }
+        set
+        {
+            _isSolid = value;
+        }
+    }
+
+    public bool ReverseWireTriangles
+    {
+        get
+        {
+            return _reverseWindTriangles;
+        }
+        set
+        {
+            _reverseWindTriangles = value;
+        }
+    }
+
+    public bool UseGravity 
+    {
+        get
+        {
+            return _useGravity;
+        }
+        set
+        {
+            _useGravity = value;
+        }
+    }
+
+    public bool ShareVertices 
+    {
+        get
+        {
+            return _shareVertices;
+        }
+        set
+        {
+            _shareVertices = value;
+        }
+    }
+
+    public bool SmoothVertices 
+    {
+        get
+        {
+            return _smoothVertices;
+        }
+        set
+        {
+            _smoothVertices = value;
+        }
+    }
+
+}
diff --git a/Assets/Scripts/LightSaberScripts/Sliceable.cs.meta b/Assets/Scripts/LightSaberScripts/Sliceable.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..8fab3d4c789fe452fad5e958b2e1b1e312f60f99
--- /dev/null
+++ b/Assets/Scripts/LightSaberScripts/Sliceable.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 7df4eb6bebdaf4548b4746999af2a2ef
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Scripts/LightSaberScripts/Slicer.cs b/Assets/Scripts/LightSaberScripts/Slicer.cs
new file mode 100644
index 0000000000000000000000000000000000000000..0560bae55e95e7dc6cf3a3824b65c443be4a3c56
--- /dev/null
+++ b/Assets/Scripts/LightSaberScripts/Slicer.cs
@@ -0,0 +1,92 @@
+using System;
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEngine.Rendering;
+
+class Slicer
+{
+    /// <summary>
+    /// Slice the object by the plane 
+    /// </summary>
+    /// <param name="plane"></param>
+    /// <param name="objectToCut"></param>
+    /// <returns></returns>
+    public static GameObject[] Slice(Plane plane, GameObject objectToCut)
+    {            
+        //Get the current mesh and its verts and tris
+        Mesh mesh = objectToCut.GetComponent<MeshFilter>().mesh;
+        var a = mesh.GetSubMesh(0);
+        Sliceable sliceable = objectToCut.GetComponent<Sliceable>();
+        if(sliceable == null)
+        {
+            throw new NotSupportedException("Cannot slice non sliceable object, add the sliceable script to the object or inherit from sliceable to support slicing");
+        }
+            
+        //Create left and right slice of hollow object
+        SlicesMetadata slicesMeta = new SlicesMetadata(plane, mesh, sliceable.IsSolid, sliceable.ReverseWireTriangles, sliceable.ShareVertices, sliceable.SmoothVertices);            
+
+        GameObject positiveObject = CreateMeshGameObject(objectToCut);
+        positiveObject.name = string.Format("{0}_positive", objectToCut.name);
+
+        GameObject negativeObject = CreateMeshGameObject(objectToCut);
+        negativeObject.name = string.Format("{0}_negative", objectToCut.name);
+
+        var positiveSideMeshData = slicesMeta.PositiveSideMesh;
+        var negativeSideMeshData = slicesMeta.NegativeSideMesh;
+
+        positiveObject.GetComponent<MeshFilter>().mesh = positiveSideMeshData;
+        negativeObject.GetComponent<MeshFilter>().mesh = negativeSideMeshData;
+
+        SetupCollidersAndRigidBodys(ref positiveObject, positiveSideMeshData, sliceable.UseGravity);
+        SetupCollidersAndRigidBodys(ref negativeObject, negativeSideMeshData, sliceable.UseGravity);
+
+        return new GameObject[] { positiveObject, negativeObject};
+    }        
+
+    /// <summary>
+    /// Creates the default mesh game object.
+    /// </summary>
+    /// <param name="originalObject">The original object.</param>
+    /// <returns></returns>
+    private static GameObject CreateMeshGameObject(GameObject originalObject)
+    {
+        var originalMaterial = originalObject.GetComponent<MeshRenderer>().materials;
+
+        GameObject meshGameObject = new GameObject();
+        Sliceable originalSliceable = originalObject.GetComponent<Sliceable>();
+
+        meshGameObject.AddComponent<MeshFilter>();
+        meshGameObject.AddComponent<MeshRenderer>();
+        Sliceable sliceable = meshGameObject.AddComponent<Sliceable>();
+
+        sliceable.IsSolid = originalSliceable.IsSolid;
+        sliceable.ReverseWireTriangles = originalSliceable.ReverseWireTriangles;
+        sliceable.UseGravity = originalSliceable.UseGravity;
+
+        meshGameObject.GetComponent<MeshRenderer>().materials = originalMaterial;
+
+        meshGameObject.transform.localScale = originalObject.transform.localScale;
+        meshGameObject.transform.rotation = originalObject.transform.rotation;
+        meshGameObject.transform.position = originalObject.transform.position;
+
+        meshGameObject.tag = originalObject.tag;
+
+        return meshGameObject;
+    }
+
+    /// <summary>
+    /// Add mesh collider and rigid body to game object
+    /// </summary>
+    /// <param name="gameObject"></param>
+    /// <param name="mesh"></param>
+    private static void SetupCollidersAndRigidBodys(ref GameObject gameObject, Mesh mesh, bool useGravity)
+    {                     
+        MeshCollider meshCollider = gameObject.AddComponent<MeshCollider>();
+        meshCollider.sharedMesh = mesh;
+        meshCollider.convex = true;
+
+        var rb = gameObject.AddComponent<Rigidbody>();
+        rb.useGravity = useGravity;
+    }
+}
+
diff --git a/Assets/Scripts/LightSaberScripts/Slicer.cs.meta b/Assets/Scripts/LightSaberScripts/Slicer.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..320fa9db3c979b483fb0c915733011467d6ce41b
--- /dev/null
+++ b/Assets/Scripts/LightSaberScripts/Slicer.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 67c09b18144166948afb3c87aee03bde
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Scripts/LightSaberScripts/SlicesMetadata.cs b/Assets/Scripts/LightSaberScripts/SlicesMetadata.cs
new file mode 100644
index 0000000000000000000000000000000000000000..d8fd723ad2911bece37efe7400ad7dbc03171db8
--- /dev/null
+++ b/Assets/Scripts/LightSaberScripts/SlicesMetadata.cs
@@ -0,0 +1,607 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using UnityEngine;
+using System.Text;
+using System.Threading.Tasks;
+using System.Runtime.InteropServices;
+using UnityEngine.UIElements;
+
+
+/// <summary>
+/// The side of the mesh
+/// </summary>
+public enum MeshSide
+{
+    Positive = 0,
+    Negative = 1
+}
+
+/// <summary>
+/// An object used to manage the positive and negative side mesh data for a sliced object
+/// </summary>
+class SlicesMetadata
+{
+    private Mesh _positiveSideMesh;
+    private List<Vector3> _positiveSideVertices;
+    private List<int> _positiveSideTriangles;
+    private List<Vector2> _positiveSideUvs;
+    private List<Vector3> _positiveSideNormals;
+
+    private Mesh _negativeSideMesh;
+    private List<Vector3> _negativeSideVertices;
+    private List<int> _negativeSideTriangles;
+    private List<Vector2> _negativeSideUvs;
+    private List<Vector3> _negativeSideNormals;
+
+    private readonly List<Vector3> _pointsAlongPlane;
+    private Plane _plane;
+    private Mesh _mesh;
+    private bool _isSolid;
+    private bool _useSharedVertices = false;
+    private bool _smoothVertices = false;
+    private bool _createReverseTriangleWindings = false;
+
+    public bool IsSolid
+    {
+        get
+        {
+            return _isSolid;
+        }
+        set
+        {
+            _isSolid = value;
+        }
+    }
+
+    public Mesh PositiveSideMesh
+    {
+        get
+        {
+            if (_positiveSideMesh == null)
+            {
+                _positiveSideMesh = new Mesh();
+            }
+
+            SetMeshData(MeshSide.Positive);
+            return _positiveSideMesh;
+        }
+    }
+
+    public Mesh NegativeSideMesh
+    {
+        get
+        {
+            if (_negativeSideMesh == null)
+            {
+                _negativeSideMesh = new Mesh();
+            }
+
+            SetMeshData(MeshSide.Negative);
+
+            return _negativeSideMesh;
+        }
+    }
+
+    public SlicesMetadata(Plane plane, Mesh mesh, bool isSolid, bool createReverseTriangleWindings, bool shareVertices, bool smoothVertices)
+    {
+        _positiveSideTriangles = new List<int>();
+        _positiveSideVertices = new List<Vector3>();
+        _negativeSideTriangles = new List<int>();
+        _negativeSideVertices = new List<Vector3>();
+        _positiveSideUvs = new List<Vector2>();
+        _negativeSideUvs = new List<Vector2>();
+        _positiveSideNormals = new List<Vector3>();
+        _negativeSideNormals = new List<Vector3>();
+        _pointsAlongPlane = new List<Vector3>();
+        _plane = plane;
+        _mesh = mesh;
+        _isSolid = isSolid;
+        _createReverseTriangleWindings = createReverseTriangleWindings;
+        _useSharedVertices = shareVertices;
+        _smoothVertices = smoothVertices;
+
+        ComputeNewMeshes();
+    }
+
+    /// <summary>
+    /// Add the mesh data to the correct side and calulate normals
+    /// </summary>
+    /// <param name="side"></param>
+    /// <param name="vertex1"></param>
+    /// <param name="vertex1Uv"></param>
+    /// <param name="vertex2"></param>
+    /// <param name="vertex2Uv"></param>
+    /// <param name="vertex3"></param>
+    /// <param name="vertex3Uv"></param>
+    /// <param name="shareVertices"></param>
+    private void AddTrianglesNormalAndUvs(MeshSide side, Vector3 vertex1, Vector3? normal1, Vector2 uv1, Vector3 vertex2, Vector3? normal2, Vector2 uv2, Vector3 vertex3, Vector3? normal3, Vector2 uv3, bool shareVertices, bool addFirst)
+    {
+        if (side == MeshSide.Positive)
+        {
+            AddTrianglesNormalsAndUvs(ref _positiveSideVertices, ref _positiveSideTriangles, ref _positiveSideNormals, ref _positiveSideUvs, vertex1, normal1, uv1, vertex2, normal2, uv2, vertex3, normal3, uv3, shareVertices, addFirst);
+        }
+        else
+        {
+            AddTrianglesNormalsAndUvs(ref _negativeSideVertices, ref _negativeSideTriangles, ref _negativeSideNormals, ref _negativeSideUvs, vertex1, normal1, uv1, vertex2, normal2, uv2, vertex3, normal3, uv3, shareVertices, addFirst);
+        }
+    }
+
+
+    /// <summary>
+    /// Adds the vertices to the mesh sets the triangles in the order that the vertices are provided.
+    /// If shared vertices is false vertices will be added to the list even if a matching vertex already exists
+    /// Does not compute normals
+    /// </summary>
+    /// <param name="vertices"></param>
+    /// <param name="triangles"></param>
+    /// <param name="uvs"></param>
+    /// <param name="normals"></param>
+    /// <param name="vertex1"></param>
+    /// <param name="vertex1Uv"></param>
+    /// <param name="normal1"></param>
+    /// <param name="vertex2"></param>
+    /// <param name="vertex2Uv"></param>
+    /// <param name="normal2"></param>
+    /// <param name="vertex3"></param>
+    /// <param name="vertex3Uv"></param>
+    /// <param name="normal3"></param>
+    /// <param name="shareVertices"></param>
+    private void AddTrianglesNormalsAndUvs(ref List<Vector3> vertices, ref List<int> triangles, ref List<Vector3> normals, ref List<Vector2> uvs, Vector3 vertex1, Vector3? normal1, Vector2 uv1, Vector3 vertex2, Vector3? normal2, Vector2 uv2, Vector3 vertex3, Vector3? normal3, Vector2 uv3, bool shareVertices, bool addFirst)
+    {
+        int tri1Index = vertices.IndexOf(vertex1);
+
+        if (addFirst)
+        {
+            ShiftTriangleIndeces(ref triangles);
+        }
+
+        //If a the vertex already exists we just add a triangle reference to it, if not add the vert to the list and then add the tri index
+        if (tri1Index > -1 && shareVertices)
+        {
+            triangles.Add(tri1Index);
+        }
+        else
+        {
+            if (normal1 == null)
+            {
+                normal1 = ComputeNormal(vertex1, vertex2, vertex3);
+            }
+
+            int? i = null;
+            if (addFirst)
+            {
+                i = 0;
+            }
+
+            AddVertNormalUv(ref vertices, ref normals, ref uvs, ref triangles, vertex1, (Vector3)normal1, uv1, i);
+        }
+
+        int tri2Index = vertices.IndexOf(vertex2);
+
+        if (tri2Index > -1 && shareVertices)
+        {
+            triangles.Add(tri2Index);
+        }
+        else
+        {
+            if (normal2 == null)
+            {
+                normal2 = ComputeNormal(vertex2, vertex3, vertex1);
+            }
+
+            int? i = null;
+
+            if (addFirst)
+            {
+                i = 1;
+            }
+
+            AddVertNormalUv(ref vertices, ref normals, ref uvs, ref triangles, vertex2, (Vector3)normal2, uv2, i);
+        }
+
+        int tri3Index = vertices.IndexOf(vertex3);
+
+        if (tri3Index > -1 && shareVertices)
+        {
+            triangles.Add(tri3Index);
+        }
+        else
+        {
+            if (normal3 == null)
+            {
+                normal3 = ComputeNormal(vertex3, vertex1, vertex2);
+            }
+
+            int? i = null;
+            if (addFirst)
+            {
+                i = 2;
+            }
+
+            AddVertNormalUv(ref vertices, ref normals, ref uvs, ref triangles, vertex3, (Vector3)normal3, uv3, i);
+        }
+    }
+
+    private void AddVertNormalUv(ref List<Vector3> vertices, ref List<Vector3> normals, ref List<Vector2> uvs, ref List<int> triangles, Vector3 vertex, Vector3 normal, Vector2 uv, int? index)
+    {
+        if (index != null)
+        {
+            int i = (int)index;
+            vertices.Insert(i, vertex);
+            uvs.Insert(i, uv);
+            normals.Insert(i, normal);
+            triangles.Insert(i, i);
+        }
+        else
+        {
+            vertices.Add(vertex);
+            normals.Add(normal);
+            uvs.Add(uv);
+            triangles.Add(vertices.IndexOf(vertex));
+        }
+    }
+
+    private void ShiftTriangleIndeces(ref List<int> triangles)
+    {
+        for (int j = 0; j < triangles.Count; j += 3)
+        {
+            triangles[j] += +3;
+            triangles[j + 1] += 3;
+            triangles[j + 2] += 3;
+        }
+    }
+
+    /// <summary>
+    /// Will render the inside of an object
+    /// This is heavy as it duplicates all the vertices and creates opposite winding direction
+    /// </summary>
+    private void AddReverseTriangleWinding()
+    {
+        int positiveVertsStartIndex = _positiveSideVertices.Count;
+        //Duplicate the original vertices
+        _positiveSideVertices.AddRange(_positiveSideVertices);
+        _positiveSideUvs.AddRange(_positiveSideUvs);
+        _positiveSideNormals.AddRange(FlipNormals(_positiveSideNormals));
+
+        int numPositiveTriangles = _positiveSideTriangles.Count;
+
+        //Add reverse windings
+        for (int i = 0; i < numPositiveTriangles; i += 3)
+        {
+            _positiveSideTriangles.Add(positiveVertsStartIndex + _positiveSideTriangles[i]);
+            _positiveSideTriangles.Add(positiveVertsStartIndex + _positiveSideTriangles[i + 2]);
+            _positiveSideTriangles.Add(positiveVertsStartIndex + _positiveSideTriangles[i + 1]);
+        }
+
+        int negativeVertextStartIndex = _negativeSideVertices.Count;
+        //Duplicate the original vertices
+        _negativeSideVertices.AddRange(_negativeSideVertices);
+        _negativeSideUvs.AddRange(_negativeSideUvs);
+        _negativeSideNormals.AddRange(FlipNormals(_negativeSideNormals));
+
+        int numNegativeTriangles = _negativeSideTriangles.Count;
+
+        //Add reverse windings
+        for (int i = 0; i < numNegativeTriangles; i += 3)
+        {
+            _negativeSideTriangles.Add(negativeVertextStartIndex + _negativeSideTriangles[i]);
+            _negativeSideTriangles.Add(negativeVertextStartIndex + _negativeSideTriangles[i + 2]);
+            _negativeSideTriangles.Add(negativeVertextStartIndex + _negativeSideTriangles[i + 1]);
+        }
+    }
+
+    /// <summary>
+    /// Join the points along the plane to the halfway point
+    /// </summary>
+    private void JoinPointsAlongPlane()
+    {
+        Vector3 halfway = GetHalfwayPoint(out float distance);
+
+        for (int i = 0; i < _pointsAlongPlane.Count; i += 2)
+        {
+            Vector3 firstVertex;
+            Vector3 secondVertex;
+
+            firstVertex = _pointsAlongPlane[i];
+            secondVertex = _pointsAlongPlane[i + 1];
+
+            Vector3 normal3 = ComputeNormal(halfway, secondVertex, firstVertex);
+            normal3.Normalize();
+
+            var direction = Vector3.Dot(normal3, _plane.normal);
+
+            if (direction > 0)
+            {
+                AddTrianglesNormalAndUvs(MeshSide.Positive, halfway, -normal3, Vector2.zero, firstVertex, -normal3, Vector2.zero, secondVertex, -normal3, Vector2.zero, false, true);
+                AddTrianglesNormalAndUvs(MeshSide.Negative, halfway, normal3, Vector2.zero, secondVertex, normal3, Vector2.zero, firstVertex, normal3, Vector2.zero, false, true);
+            }
+            else
+            {
+                AddTrianglesNormalAndUvs(MeshSide.Positive, halfway, normal3, Vector2.zero, secondVertex, normal3, Vector2.zero, firstVertex, normal3, Vector2.zero, false, true);
+                AddTrianglesNormalAndUvs(MeshSide.Negative, halfway, -normal3, Vector2.zero, firstVertex, -normal3, Vector2.zero, secondVertex, -normal3, Vector2.zero, false, true);
+            }
+        }
+    }
+
+    /// <summary>
+    /// For all the points added along the plane cut, get the half way between the first and furthest point
+    /// </summary>
+    /// <returns></returns>
+    private Vector3 GetHalfwayPoint(out float distance)
+    {
+        if (_pointsAlongPlane.Count > 0)
+        {
+            Vector3 firstPoint = _pointsAlongPlane[0];
+            Vector3 furthestPoint = Vector3.zero;
+            distance = 0f;
+
+            foreach (Vector3 point in _pointsAlongPlane)
+            {
+                float currentDistance = 0f;
+                currentDistance = Vector3.Distance(firstPoint, point);
+
+                if (currentDistance > distance)
+                {
+                    distance = currentDistance;
+                    furthestPoint = point;
+                }
+            }
+
+            return Vector3.Lerp(firstPoint, furthestPoint, 0.5f);
+        }
+        else
+        {
+            distance = 0;
+            return Vector3.zero;
+        }
+    }
+
+    /// <summary>
+    /// Setup the mesh object for the specified side
+    /// </summary>
+    /// <param name="side"></param>
+    private void SetMeshData(MeshSide side)
+    {
+        if (side == MeshSide.Positive)
+        {
+            _positiveSideMesh.vertices = _positiveSideVertices.ToArray();
+            _positiveSideMesh.triangles = _positiveSideTriangles.ToArray();
+            _positiveSideMesh.normals = _positiveSideNormals.ToArray();
+            _positiveSideMesh.uv = _positiveSideUvs.ToArray();
+        }
+        else
+        {
+            _negativeSideMesh.vertices = _negativeSideVertices.ToArray();
+            _negativeSideMesh.triangles = _negativeSideTriangles.ToArray();
+            _negativeSideMesh.normals = _negativeSideNormals.ToArray();
+            _negativeSideMesh.uv = _negativeSideUvs.ToArray();
+        }
+    }
+
+    /// <summary>
+    /// Compute the positive and negative meshes based on the plane and mesh
+    /// </summary>
+    private void ComputeNewMeshes()
+    {
+        int[] meshTriangles = _mesh.triangles;
+        Vector3[] meshVerts = _mesh.vertices;
+        Vector3[] meshNormals = _mesh.normals;
+        Vector2[] meshUvs = _mesh.uv;
+
+        for (int i = 0; i < meshTriangles.Length; i += 3)
+        {
+            //We need the verts in order so that we know which way to wind our new mesh triangles.
+            Vector3 vert1 = meshVerts[meshTriangles[i]];
+            int vert1Index = Array.IndexOf(meshVerts, vert1);
+            Vector2 uv1 = meshUvs[vert1Index];
+            Vector3 normal1 = meshNormals[vert1Index];
+            bool vert1Side = _plane.GetSide(vert1);
+
+            Vector3 vert2 = meshVerts[meshTriangles[i + 1]];
+            int vert2Index = Array.IndexOf(meshVerts, vert2);
+            Vector2 uv2 = meshUvs[vert2Index];
+            Vector3 normal2 = meshNormals[vert2Index];
+            bool vert2Side = _plane.GetSide(vert2);
+
+            Vector3 vert3 = meshVerts[meshTriangles[i + 2]];
+            bool vert3Side = _plane.GetSide(vert3);
+            int vert3Index = Array.IndexOf(meshVerts, vert3);
+            Vector3 normal3 = meshNormals[vert3Index];
+            Vector2 uv3 = meshUvs[vert3Index];
+
+            //All verts are on the same side
+            if (vert1Side == vert2Side && vert2Side == vert3Side)
+            {
+                //Add the relevant triangle
+                MeshSide side = (vert1Side) ? MeshSide.Positive : MeshSide.Negative;
+                AddTrianglesNormalAndUvs(side, vert1, normal1, uv1, vert2, normal2, uv2, vert3, normal3, uv3, true, false);
+            }
+            else
+            {
+                //we need the two points where the plane intersects the triangle.
+                Vector3 intersection1;
+                Vector3 intersection2;
+
+                Vector2 intersection1Uv;
+                Vector2 intersection2Uv;
+
+                MeshSide side1 = (vert1Side) ? MeshSide.Positive : MeshSide.Negative;
+                MeshSide side2 = (vert1Side) ? MeshSide.Negative : MeshSide.Positive;
+
+                //vert 1 and 2 are on the same side
+                if (vert1Side == vert2Side)
+                {
+                    //Cast a ray from v2 to v3 and from v3 to v1 to get the intersections                       
+                    intersection1 = GetRayPlaneIntersectionPointAndUv(vert2, uv2, vert3, uv3, out intersection1Uv);
+                    intersection2 = GetRayPlaneIntersectionPointAndUv(vert3, uv3, vert1, uv1, out intersection2Uv);
+
+                    //Add the positive or negative triangles
+                    AddTrianglesNormalAndUvs(side1, vert1, null, uv1, vert2, null, uv2, intersection1, null, intersection1Uv, _useSharedVertices, false);
+                    AddTrianglesNormalAndUvs(side1, vert1, null, uv1, intersection1, null, intersection1Uv, intersection2, null, intersection2Uv, _useSharedVertices, false);
+
+                    AddTrianglesNormalAndUvs(side2, intersection1, null, intersection1Uv, vert3, null, uv3, intersection2, null, intersection2Uv, _useSharedVertices, false);
+
+                }
+                //vert 1 and 3 are on the same side
+                else if (vert1Side == vert3Side)
+                {
+                    //Cast a ray from v1 to v2 and from v2 to v3 to get the intersections                       
+                    intersection1 = GetRayPlaneIntersectionPointAndUv(vert1, uv1, vert2, uv2, out intersection1Uv);
+                    intersection2 = GetRayPlaneIntersectionPointAndUv(vert2, uv2, vert3, uv3, out intersection2Uv);
+
+                    //Add the positive triangles
+                    AddTrianglesNormalAndUvs(side1, vert1, null, uv1, intersection1, null, intersection1Uv, vert3, null, uv3, _useSharedVertices, false);
+                    AddTrianglesNormalAndUvs(side1, intersection1, null, intersection1Uv, intersection2, null, intersection2Uv, vert3, null, uv3, _useSharedVertices, false);
+
+                    AddTrianglesNormalAndUvs(side2, intersection1, null, intersection1Uv, vert2, null, uv2, intersection2, null, intersection2Uv, _useSharedVertices, false);
+                }
+                //Vert1 is alone
+                else
+                {
+                    //Cast a ray from v1 to v2 and from v1 to v3 to get the intersections                       
+                    intersection1 = GetRayPlaneIntersectionPointAndUv(vert1, uv1, vert2, uv2, out intersection1Uv);
+                    intersection2 = GetRayPlaneIntersectionPointAndUv(vert1, uv1, vert3, uv3, out intersection2Uv);
+
+                    AddTrianglesNormalAndUvs(side1, vert1, null, uv1, intersection1, null, intersection1Uv, intersection2, null, intersection2Uv, _useSharedVertices, false);
+
+                    AddTrianglesNormalAndUvs(side2, intersection1, null, intersection1Uv, vert2, null, uv2, vert3, null, uv3, _useSharedVertices, false);
+                    AddTrianglesNormalAndUvs(side2, intersection1, null, intersection1Uv, vert3, null, uv3, intersection2, null, intersection2Uv, _useSharedVertices, false);
+                }
+
+                //Add the newly created points on the plane.
+                _pointsAlongPlane.Add(intersection1);
+                _pointsAlongPlane.Add(intersection2);
+            }
+        }
+
+        //If the object is solid, join the new points along the plane otherwise do the reverse winding
+        if (_isSolid)
+        {
+            JoinPointsAlongPlane();
+        }
+        else if (_createReverseTriangleWindings)
+        {
+            AddReverseTriangleWinding();
+        }
+
+        if (_smoothVertices)
+        {
+            SmoothVertices();
+        }
+
+    }
+
+    /// <summary>
+    /// Casts a reay from vertex1 to vertex2 and gets the point of intersection with the plan, calculates the new uv as well.
+    /// </summary>
+    /// <param name="plane">The plane.</param>
+    /// <param name="vertex1">The vertex1.</param>
+    /// <param name="vertex1Uv">The vertex1 uv.</param>
+    /// <param name="vertex2">The vertex2.</param>
+    /// <param name="vertex2Uv">The vertex2 uv.</param>
+    /// <param name="uv">The uv.</param>
+    /// <returns>Point of intersection</returns>
+    private Vector3 GetRayPlaneIntersectionPointAndUv(Vector3 vertex1, Vector2 vertex1Uv, Vector3 vertex2, Vector2 vertex2Uv, out Vector2 uv)
+    {
+        float distance = GetDistanceRelativeToPlane(vertex1, vertex2, out Vector3 pointOfIntersection);
+        uv = InterpolateUvs(vertex1Uv, vertex2Uv, distance);
+        return pointOfIntersection;
+    }
+
+    /// <summary>
+    /// Computes the distance based on the plane.
+    /// </summary>
+    /// <param name="vertex1">The vertex1.</param>
+    /// <param name="vertex2">The vertex2.</param>
+    /// <param name="pointOfintersection">The point ofintersection.</param>
+    /// <returns></returns>
+    private float GetDistanceRelativeToPlane(Vector3 vertex1, Vector3 vertex2, out Vector3 pointOfintersection)
+    {
+        Ray ray = new Ray(vertex1, (vertex2 - vertex1));
+        _plane.Raycast(ray, out float distance);
+        pointOfintersection = ray.GetPoint(distance);
+        return distance;
+    }
+
+    /// <summary>
+    /// Get a uv between the two provided uvs by the distance.
+    /// </summary>
+    /// <param name="uv1">The uv1.</param>
+    /// <param name="uv2">The uv2.</param>
+    /// <param name="distance">The distance.</param>
+    /// <returns></returns>
+    private Vector2 InterpolateUvs(Vector2 uv1, Vector2 uv2, float distance)
+    {
+        Vector2 uv = Vector2.Lerp(uv1, uv2, distance);
+        return uv;
+    }
+
+    /// <summary>
+    /// Gets the point perpendicular to the face defined by the provided vertices        
+    //https://docs.unity3d.com/Manual/ComputingNormalPerpendicularVector.html
+    /// </summary>
+    /// <param name="vertex1"></param>
+    /// <param name="vertex2"></param>
+    /// <param name="vertex3"></param>
+    /// <returns></returns>
+    private Vector3 ComputeNormal(Vector3 vertex1, Vector3 vertex2, Vector3 vertex3)
+    {
+        Vector3 side1 = vertex2 - vertex1;
+        Vector3 side2 = vertex3 - vertex1;
+
+        Vector3 normal = Vector3.Cross(side1, side2);
+
+        return normal;
+    }
+
+    /// <summary>
+    /// Reverese the normals in a given list
+    /// </summary>
+    /// <param name="currentNormals"></param>
+    /// <returns></returns>
+    private List<Vector3> FlipNormals(List<Vector3> currentNormals)
+    {
+        List<Vector3> flippedNormals = new List<Vector3>();
+
+        foreach (Vector3 normal in currentNormals)
+        {
+            flippedNormals.Add(-normal);
+        }
+
+        return flippedNormals;
+    }
+
+    //
+    private void SmoothVertices()
+    {
+        DoSmoothing(ref _positiveSideVertices, ref _positiveSideNormals, ref _positiveSideTriangles);
+        DoSmoothing(ref _negativeSideVertices, ref _negativeSideNormals, ref _negativeSideTriangles);
+    }
+
+    private void DoSmoothing(ref List<Vector3> vertices, ref List<Vector3> normals, ref List<int> triangles)
+    {
+        normals.ForEach(x =>
+        {
+            x = Vector3.zero;
+        });
+
+        for (int i = 0; i < triangles.Count; i += 3)
+        {
+            int vertIndex1 = triangles[i];
+            int vertIndex2 = triangles[i + 1];
+            int vertIndex3 = triangles[i + 2];
+
+            Vector3 triangleNormal = ComputeNormal(vertices[vertIndex1], vertices[vertIndex2], vertices[vertIndex3]);
+
+            normals[vertIndex1] += triangleNormal;
+            normals[vertIndex2] += triangleNormal;
+            normals[vertIndex3] += triangleNormal;
+        }
+
+        normals.ForEach(x =>
+        {
+            x.Normalize();
+        });
+    }
+}
\ No newline at end of file
diff --git a/Assets/Scripts/LightSaberScripts/SlicesMetadata.cs.meta b/Assets/Scripts/LightSaberScripts/SlicesMetadata.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..614ab1b14c4691138dd44cf4a5342c9bc34e7d61
--- /dev/null
+++ b/Assets/Scripts/LightSaberScripts/SlicesMetadata.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: b199fecb57864584b8ef0c7dc18044a2
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Scripts/LightSaberScripts/WeaponManager.cs b/Assets/Scripts/LightSaberScripts/WeaponManager.cs
new file mode 100644
index 0000000000000000000000000000000000000000..05b099abfd22f28ae5e3487125e8d50eec251461
--- /dev/null
+++ b/Assets/Scripts/LightSaberScripts/WeaponManager.cs
@@ -0,0 +1,148 @@
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using Valve.VR;
+using Valve.VR.InteractionSystem;
+
+public class WeaponManager : MonoBehaviour
+{
+    [SerializeField]
+    [Tooltip("The blade object")]
+    private GameObject _blade;
+     
+    [SerializeField]
+    [Tooltip("The empty game object located at the tip of the blade")]
+    private GameObject _tip = null;
+
+    [SerializeField]
+    [Tooltip("The empty game object located at the base of the blade")]
+    private GameObject _base = null;
+    
+    [SerializeField]
+    [Tooltip("The amount of force applied to each side of a slice")]
+    private float _forceAppliedToCut = 3f;
+
+    [SerializeField]
+    [Tooltip("The extend speed in seconds.")]
+    private float extendSpeed = 0.1f ;
+
+    [SerializeField]
+    [Tooltip("The maximum extension of the Blade.")]
+    private float maximumSwordSize;
+
+    private float minimumSwordSize = 0.0f;
+    private bool weaponTurnedOn;
+    public SteamVR_Action_Boolean activateBlade;
+    private Interactable interactable;
+    private Vector3 _triggerEnterTipPosition;
+    private Vector3 _triggerEnterBasePosition;
+    private Vector3 _triggerExitTipPosition; 
+    
+    // Start is called before the first frame update   
+    void Start() 
+    {
+        interactable = GetComponent<Interactable>();
+    }
+
+    void Awake()
+    {
+        UpdateWeapon();
+    }
+
+//here are testing variables not to be used in the final produkt
+int i = 0;
+Vector3 vector = new Vector3(-1.0f,0f);
+    // Update is called once per frame
+    void Update()
+    {   
+        //if(i%120 == 0){weaponTurnedOn = !weaponTurnedOn;Debug.Log("Weapon state changed");}i++; //for blade function tests without input. 
+        // if (interactable.attachedToHand != null){
+        //     SteamVR_Input_Sources source = interactable.attachedToHand.handType;
+
+        //     Debug.Log(source.ToString());
+
+        //     if (activateBlade[source].stateDown){
+        //         weaponTurnedOn = !weaponTurnedOn;
+        //         Debug.Log("Weapon state changed");
+        //     }
+        // }
+        UpdateWeapon();
+        
+    }
+
+    private void OnTriggerEnter(Collider other)
+    {
+        Debug.Log("Enter Triggered");
+        Debug.Log(other);
+        _triggerEnterTipPosition = _tip.transform.position;
+        _triggerEnterBasePosition = _base.transform.position;
+    }
+
+    private void OnTriggerExit(Collider other)
+    {
+        Debug.Log("Exit Triggered");
+        _triggerExitTipPosition = _tip.transform.position;
+
+        //Create a triangle between the tip and base so that we can get the normal
+        Vector3 side1 = _triggerExitTipPosition - _triggerEnterTipPosition;
+        Vector3 side2 = _triggerExitTipPosition - _triggerEnterBasePosition;
+
+        //Get the point perpendicular to the triangle above which is the normal
+        //https://docs.unity3d.com/Manual/ComputingNormalPerpendicularVector.html
+        Vector3 normal = Vector3.Cross(side1, side2).normalized;
+
+        //Transform the normal so that it is aligned with the object we are slicing's transform.
+        Vector3 transformedNormal = ((Vector3)(other.gameObject.transform.localToWorldMatrix.transpose * normal)).normalized;
+
+        //Get the enter position relative to the object we're cutting's local transform
+        Vector3 transformedStartingPoint = other.gameObject.transform.InverseTransformPoint(_triggerEnterTipPosition);
+
+        Plane plane = new Plane();
+
+        plane.SetNormalAndPosition(
+                transformedNormal,
+                transformedStartingPoint);
+
+        var direction = Vector3.Dot(Vector3.up, transformedNormal);
+
+        //Flip the plane so that we always know which side the positive mesh is on
+        if (direction < 0)
+        {
+            plane = plane.flipped;
+        }
+
+        GameObject[] slices = Slicer.Slice(plane, other.gameObject);
+        Destroy(other.gameObject);
+
+        Rigidbody rigidbody = slices[1].GetComponent<Rigidbody>();
+        Vector3 newNormal = transformedNormal + Vector3.up * _forceAppliedToCut;
+        rigidbody.AddForce(newNormal, ForceMode.Impulse);
+    }
+
+    void UpdateWeapon()
+    {
+        float extendDelta = maximumSwordSize / extendSpeed;
+        float currentSize = _blade.transform.localScale.y;
+
+        if(weaponTurnedOn)
+        {
+            _blade.transform.localScale = new Vector3(_blade.transform.localScale.x, Mathf.Clamp(currentSize + (extendDelta * -Time.deltaTime), minimumSwordSize, maximumSwordSize), _blade.transform.localScale.z);
+        
+            if(_blade.transform.localScale.y <= 0.1)
+            {
+                _blade.SetActive(false);
+            }
+        }
+        else
+        {
+            if(_blade.activeSelf==false)
+            {
+                _blade.SetActive(true);
+            }
+            _blade.transform.localScale = new Vector3(_blade.transform.localScale.x, Mathf.Clamp(currentSize + (extendDelta * Time.deltaTime), minimumSwordSize, maximumSwordSize), _blade.transform.localScale.z);
+            
+            
+        }
+    }
+}
diff --git a/Assets/Scripts/WeaponManager.cs.meta b/Assets/Scripts/LightSaberScripts/WeaponManager.cs.meta
similarity index 100%
rename from Assets/Scripts/WeaponManager.cs.meta
rename to Assets/Scripts/LightSaberScripts/WeaponManager.cs.meta
diff --git a/Assets/Scripts/WeaponManager.cs b/Assets/Scripts/WeaponManager.cs
deleted file mode 100644
index f188d76c30cb835f6755b79e500593fbfabdb03f..0000000000000000000000000000000000000000
--- a/Assets/Scripts/WeaponManager.cs
+++ /dev/null
@@ -1,70 +0,0 @@
-using System;
-using System.Collections;
-using System.Collections.Generic;
-using UnityEngine;
-using Valve.VR;
-using Valve.VR.InteractionSystem;
-
-public class WeaponManager : MonoBehaviour
-{
-    [Tooltip("Hello I am a test Tooltip.")]
-    public GameObject bladeHolder;
-
-
-    // Blade is extended or not.
-    private bool weaponTurnedOn;
-
-    private float minimumSwordSize = 0.0f;
-    
-    [Tooltip("The maximum extension of the Blade.")]
-    public float maximumSwordSize;
-
-    [Tooltip("The extend speed in seconds.")]
-    public float extendSpeed = 0.1f ;
-
-    // Start is called before the first frame update
-    public SteamVR_Action_Boolean activateBlade;
-
-    private Interactable interactable;
-
-    void Start() {
-        interactable = GetComponent<Interactable>();
-    }
-    void Awake()
-    {
-        UpdateWeapon();
-    }
-
-    // Update is called once per frame
-    void Update()
-    {
-        if (interactable.attachedToHand != null){
-            SteamVR_Input_Sources source = interactable.attachedToHand.handType;
-
-            Debug.Log(source.ToString());
-
-            if (activateBlade[source].stateDown){
-                weaponTurnedOn = !weaponTurnedOn;
-                Debug.Log("Weapon state changed");
-            }
-        }
-        UpdateWeapon();
-        
-    }
-
-    void UpdateWeapon()
-    {
-        float extendDelta = maximumSwordSize / extendSpeed;
-        float currentSize = bladeHolder.transform.localScale.y;
-
-        if(weaponTurnedOn)
-        {
-            bladeHolder.transform.localScale = new Vector3(bladeHolder.transform.localScale.x, Mathf.Clamp(currentSize + (extendDelta * -Time.deltaTime), minimumSwordSize, maximumSwordSize), bladeHolder.transform.localScale.z);
-        }
-        else
-        {
-            bladeHolder.transform.localScale = new Vector3(bladeHolder.transform.localScale.x, Mathf.Clamp(currentSize + (extendDelta * Time.deltaTime), minimumSwordSize, maximumSwordSize), bladeHolder.transform.localScale.z);
-
-        }
-    }
-}
diff --git a/UserSettings/EditorUserSettings.asset b/UserSettings/EditorUserSettings.asset
index b54345594e5d390af4327c58381de0b89a9d5340..eab1ca9c09901ed414fca20d8b293b584c5fe58f 100644
--- a/UserSettings/EditorUserSettings.asset
+++ b/UserSettings/EditorUserSettings.asset
@@ -6,6 +6,9 @@ EditorUserSettings:
   serializedVersion: 4
   m_ConfigSettings:
     RecentlyUsedScenePath-0:
+      value: 22424703114646680e0b0227036c7c0502240c3f2a2e68252320092a
+      flags: 0
+    RecentlyUsedScenePath-1:
       value: 22424703114646680e0b0227036c6c111b07142f1f2b233e2867083debf42d
       flags: 0
     vcSharedLogLevel: