diff --git a/AVVR/Assets/_Scripts/MeshDimensionCalculator.cs b/AVVR/Assets/_Scripts/MeshDimensionCalculator.cs
index 67bbaad32fd62e8232415debcaec181dfc71adc1..ba15c24e2c29769ec3dabc4325d5da365fec7a9f 100644
--- a/AVVR/Assets/_Scripts/MeshDimensionCalculator.cs
+++ b/AVVR/Assets/_Scripts/MeshDimensionCalculator.cs
@@ -1,37 +1,36 @@
-using UnityEngine;
-using System.Collections.Generic;
 #if UNITY_EDITOR
+using UnityEngine;
 using UnityEditor;
-#endif
+using System.Collections.Generic;
 
-public class MeshDimensionCalculator : MonoBehaviour
+// Shared data structure for dimension results
+public class DimensionResults
 {
-    public GameObject targetObject;
-    private Vector3 totalMin = Vector3.positiveInfinity;
-    private Vector3 totalMax = Vector3.negativeInfinity;
-    private Vector3 dimensions;
-    private Vector3 center;
+    public Vector3 totalMin = Vector3.positiveInfinity;
+    public Vector3 totalMax = Vector3.negativeInfinity;
+    public Vector3 dimensions;
+    public Vector3 center;
+}
 
-    [SerializeField] private Vector3 scaleFactors = Vector3.one;
-    [SerializeField] private float uniformScaleFactor = 1f;
-    public void CalculateDimensions()
+// Shared logic class
+public static class MeshDimensionCalculatorLogic
+{
+    public static DimensionResults CalculateDimensions(GameObject targetObject)
     {
         if (targetObject == null)
         {
             Debug.LogError("Target object is not assigned!");
-            return;
+            return null;
         }
 
-        totalMin = Vector3.positiveInfinity;
-        totalMax = Vector3.negativeInfinity;
-
+        DimensionResults results = new DimensionResults();
         List<MeshFilter> meshFilters = new List<MeshFilter>();
         CollectMeshFilters(targetObject.transform, meshFilters);
 
         if (meshFilters.Count == 0)
         {
             Debug.LogError("No meshes found in the target object's hierarchy!");
-            return;
+            return null;
         }
 
         foreach (MeshFilter meshFilter in meshFilters)
@@ -43,20 +42,22 @@ public class MeshDimensionCalculator : MonoBehaviour
             for (int i = 0; i < vertices.Length; i++)
             {
                 Vector3 worldVertex = meshFilter.transform.TransformPoint(vertices[i]);
-                totalMin = Vector3.Min(totalMin, worldVertex);
-                totalMax = Vector3.Max(totalMax, worldVertex);
+                results.totalMin = Vector3.Min(results.totalMin, worldVertex);
+                results.totalMax = Vector3.Max(results.totalMax, worldVertex);
             }
         }
 
-        dimensions = totalMax - totalMin;
-        center = (totalMin + totalMax) / 2;
+        results.dimensions = results.totalMax - results.totalMin;
+        results.center = (results.totalMin + results.totalMax) / 2;
+
+        Debug.Log($"Total Dimensions: {results.dimensions}");
+        Debug.Log($"Center: {results.center}");
+        Debug.Log($"Floor Y position: {results.totalMin.y}");
 
-        Debug.Log($"Total Dimensions: {dimensions}");
-        Debug.Log($"Center: {center}");
-        Debug.Log($"Floor Y position: {totalMin.y}");
+        return results;
     }
 
-    private void CollectMeshFilters(Transform parent, List<MeshFilter> meshFilters)
+    private static void CollectMeshFilters(Transform parent, List<MeshFilter> meshFilters)
     {
         MeshFilter meshFilter = parent.GetComponent<MeshFilter>();
         if (meshFilter != null)
@@ -70,7 +71,7 @@ public class MeshDimensionCalculator : MonoBehaviour
         }
     }
 
-    public void ResetToOrigin()
+    public static void ResetToOrigin(GameObject targetObject)
     {
         if (targetObject == null)
         {
@@ -78,11 +79,12 @@ public class MeshDimensionCalculator : MonoBehaviour
             return;
         }
 
+        Undo.RecordObject(targetObject.transform, "Reset To Origin");
         targetObject.transform.position = Vector3.zero;
         Debug.Log("Target object has been reset to (0,0,0).");
     }
 
-    public void ResetFloorToZero()
+    public static void ResetFloorToZero(GameObject targetObject, float floorY)
     {
         if (targetObject == null)
         {
@@ -90,18 +92,14 @@ public class MeshDimensionCalculator : MonoBehaviour
             return;
         }
 
-        if (totalMin.y == Mathf.Infinity)
-        {
-            Debug.LogWarning("Please calculate dimensions first!");
-            return;
-        }
-
+        Undo.RecordObject(targetObject.transform, "Reset Floor To Zero");
         Vector3 currentPosition = targetObject.transform.position;
-        targetObject.transform.position = new Vector3(currentPosition.x, -totalMin.y, currentPosition.z);
-        Debug.Log($"Target object floor has been reset to Y = 0. New position: {targetObject.transform.position}");
+        Vector3 newPosition = new Vector3(currentPosition.x, -floorY, currentPosition.z);
+        targetObject.transform.position = newPosition;
+        Debug.Log($"Target object floor has been reset to Y = 0. New position: {newPosition}");
     }
 
-    public void ScaleObject()
+    public static void ScaleObject(GameObject targetObject, Vector3 scaleFactors)
     {
         if (targetObject == null)
         {
@@ -109,18 +107,14 @@ public class MeshDimensionCalculator : MonoBehaviour
             return;
         }
 
+        Undo.RecordObject(targetObject.transform, "Scale Object");
         Vector3 currentScale = targetObject.transform.localScale;
-        Vector3 newScale = new Vector3(
-            currentScale.x * scaleFactors.x,
-            currentScale.y * scaleFactors.y,
-            currentScale.z * scaleFactors.z
-        );
-
+        Vector3 newScale = Vector3.Scale(currentScale, scaleFactors);
         targetObject.transform.localScale = newScale;
         Debug.Log($"Target object scaled. New scale: {newScale}");
     }
 
-    public void ScaleObjectUniform()
+    public static void ScaleObjectUniform(GameObject targetObject, float uniformScaleFactor)
     {
         if (targetObject == null)
         {
@@ -128,14 +122,14 @@ public class MeshDimensionCalculator : MonoBehaviour
             return;
         }
 
+        Undo.RecordObject(targetObject.transform, "Scale Object Uniform");
         Vector3 currentScale = targetObject.transform.localScale;
         Vector3 newScale = currentScale * uniformScaleFactor;
-
         targetObject.transform.localScale = newScale;
         Debug.Log($"Target object scaled uniformly. New scale: {newScale}");
     }
 
-    public void ResetScale()
+    public static void ResetScale(GameObject targetObject)
     {
         if (targetObject == null)
         {
@@ -143,12 +137,58 @@ public class MeshDimensionCalculator : MonoBehaviour
             return;
         }
 
+        Undo.RecordObject(targetObject.transform, "Reset Scale");
         targetObject.transform.localScale = Vector3.one;
         Debug.Log("Target object scale has been reset to (1, 1, 1).");
     }
 }
 
-#if UNITY_EDITOR
+// MonoBehaviour Component
+public class MeshDimensionCalculator : MonoBehaviour
+{
+    public GameObject targetObject;
+    private DimensionResults results;
+
+    [SerializeField] private Vector3 scaleFactors = Vector3.one;
+    [SerializeField] private float uniformScaleFactor = 1f;
+
+    public void CalculateDimensions()
+    {
+        results = MeshDimensionCalculatorLogic.CalculateDimensions(targetObject);
+    }
+
+    public void ResetToOrigin()
+    {
+        MeshDimensionCalculatorLogic.ResetToOrigin(targetObject);
+    }
+
+    public void ResetFloorToZero()
+    {
+        if (results == null || results.totalMin.y == Mathf.Infinity)
+        {
+            Debug.LogWarning("Please calculate dimensions first!");
+            return;
+        }
+        MeshDimensionCalculatorLogic.ResetFloorToZero(targetObject, results.totalMin.y);
+    }
+
+    public void ScaleObject()
+    {
+        MeshDimensionCalculatorLogic.ScaleObject(targetObject, scaleFactors);
+    }
+
+    public void ScaleObjectUniform()
+    {
+        MeshDimensionCalculatorLogic.ScaleObjectUniform(targetObject, uniformScaleFactor);
+    }
+
+    public void ResetScale()
+    {
+        MeshDimensionCalculatorLogic.ResetScale(targetObject);
+    }
+}
+
+// Inspector UI for the MonoBehaviour component
 [CustomEditor(typeof(MeshDimensionCalculator))]
 public class MeshDimensionCalculatorEditor : Editor
 {
@@ -167,7 +207,7 @@ public class MeshDimensionCalculatorEditor : Editor
     {
         serializedObject.Update();
 
-        EditorGUILayout.PropertyField(targetObjectProperty);
+        EditorGUILayout.PropertyField(targetObjectProperty, new GUIContent("ModelWrapper"));
 
         MeshDimensionCalculator calculator = (MeshDimensionCalculator)target;
 
@@ -214,13 +254,11 @@ public class MeshDimensionCalculatorEditor : Editor
     }
 }
 
+// Editor Window
 public class MeshDimensionCalculatorWindow : EditorWindow
 {
     private GameObject targetObject;
-    private Vector3 dimensions;
-    private Vector3 center;
-    private Vector3 totalMin;
-    private Vector3 totalMax;
+    private DimensionResults results;
     private Vector3 scaleFactors = Vector3.one;
     private float uniformScaleFactor = 1f;
 
@@ -241,17 +279,25 @@ public class MeshDimensionCalculatorWindow : EditorWindow
 
         if (GUILayout.Button("Calculate Dimensions"))
         {
-            CalculateDimensions();
+            results = MeshDimensionCalculatorLogic.CalculateDimensions(targetObject);
+            Repaint();
         }
 
         if (GUILayout.Button("Reset to Origin (0,0,0)"))
         {
-            ResetToOrigin();
+            MeshDimensionCalculatorLogic.ResetToOrigin(targetObject);
         }
 
         if (GUILayout.Button("Reset Floor to Y = 0"))
         {
-            ResetFloorToZero();
+            if (results != null)
+            {
+                MeshDimensionCalculatorLogic.ResetFloorToZero(targetObject, results.totalMin.y);
+            }
+            else
+            {
+                EditorUtility.DisplayDialog("Error", "Please calculate dimensions first!", "OK");
+            }
         }
 
         EditorGUILayout.Space();
@@ -260,7 +306,7 @@ public class MeshDimensionCalculatorWindow : EditorWindow
         scaleFactors = EditorGUILayout.Vector3Field("Scale Factors (X, Y, Z)", scaleFactors);
         if (GUILayout.Button("Apply Scale (X, Y, Z)"))
         {
-            ScaleObject();
+            MeshDimensionCalculatorLogic.ScaleObject(targetObject, scaleFactors);
         }
 
         EditorGUILayout.Space();
@@ -268,112 +314,25 @@ public class MeshDimensionCalculatorWindow : EditorWindow
         uniformScaleFactor = EditorGUILayout.FloatField("Uniform Scale Factor", uniformScaleFactor);
         if (GUILayout.Button("Apply Uniform Scale"))
         {
-            ScaleObjectUniform();
+            MeshDimensionCalculatorLogic.ScaleObjectUniform(targetObject, uniformScaleFactor);
         }
 
         EditorGUILayout.Space();
 
         if (GUILayout.Button("Reset Scale to (1, 1, 1)"))
         {
-            ResetScale();
+            MeshDimensionCalculatorLogic.ResetScale(targetObject);
         }
 
         EditorGUI.EndDisabledGroup();
 
-        if (targetObject != null && dimensions != Vector3.zero)
+        if (results != null && results.dimensions != Vector3.zero)
         {
             EditorGUILayout.Space();
             EditorGUILayout.LabelField("Results:", EditorStyles.boldLabel);
-            EditorGUILayout.Vector3Field("Dimensions", dimensions);
-            EditorGUILayout.Vector3Field("Center", center);
-            EditorGUILayout.FloatField("Floor Y Position", totalMin.y);
-        }
-    }
-
-    private void CalculateDimensions()
-    {
-        if (targetObject == null) return;
-
-        totalMin = Vector3.positiveInfinity;
-        totalMax = Vector3.negativeInfinity;
-
-        List<MeshFilter> meshFilters = new List<MeshFilter>();
-        CollectMeshFilters(targetObject.transform, meshFilters);
-
-        if (meshFilters.Count == 0)
-        {
-            EditorUtility.DisplayDialog("Error", "No meshes found in the target object's hierarchy!", "OK");
-            return;
-        }
-
-        foreach (MeshFilter meshFilter in meshFilters)
-        {
-            Mesh mesh = meshFilter.sharedMesh;
-            if (mesh == null) continue;
-
-            Vector3[] vertices = mesh.vertices;
-            for (int i = 0; i < vertices.Length; i++)
-            {
-                Vector3 worldVertex = meshFilter.transform.TransformPoint(vertices[i]);
-                totalMin = Vector3.Min(totalMin, worldVertex);
-                totalMax = Vector3.Max(totalMax, worldVertex);
-            }
-        }
-
-        dimensions = totalMax - totalMin;
-        center = (totalMin + totalMax) / 2;
-        Repaint();
-    }
-
-    private void ScaleObject()
-    {
-        if (targetObject == null) return;
-        Undo.RecordObject(targetObject.transform, "Scale Object");
-        targetObject.transform.localScale = Vector3.Scale(targetObject.transform.localScale, scaleFactors);
-    }
-
-    private void ScaleObjectUniform()
-    {
-        if (targetObject == null) return;
-        Undo.RecordObject(targetObject.transform, "Scale Object Uniform");
-        targetObject.transform.localScale *= uniformScaleFactor;
-    }
-
-    private void ResetScale()
-    {
-        if (targetObject == null) return;
-        Undo.RecordObject(targetObject.transform, "Reset Scale");
-        targetObject.transform.localScale = Vector3.one;
-    }
-
-    private void ResetToOrigin()
-    {
-        if (targetObject == null) return;
-        Undo.RecordObject(targetObject.transform, "Reset To Origin");
-        targetObject.transform.position = Vector3.zero;
-    }
-
-    private void ResetFloorToZero()
-    {
-        if (targetObject == null) return;
-        CalculateDimensions();
-        Undo.RecordObject(targetObject.transform, "Reset Floor To Zero");
-        Vector3 newPosition = targetObject.transform.position;
-        newPosition.y -= totalMin.y;
-        targetObject.transform.position = newPosition;
-    }
-
-    private void CollectMeshFilters(Transform parent, List<MeshFilter> meshFilters)
-    {
-        MeshFilter meshFilter = parent.GetComponent<MeshFilter>();
-        if (meshFilter != null)
-        {
-            meshFilters.Add(meshFilter);
-        }
-
-        for (int i = 0; i < parent.childCount; i++)
-        {
-            CollectMeshFilters(parent.GetChild(i), meshFilters);
+            EditorGUILayout.Vector3Field("Dimensions", results.dimensions);
+            EditorGUILayout.Vector3Field("Center", results.center);
+            EditorGUILayout.FloatField("Floor Y Position", results.totalMin.y);
         }
     }
 }