diff --git a/Assets/Scripts/InteractionEngine/Character_Animations/TaskCharakterAnimation.cs b/Assets/Scripts/InteractionEngine/Character_Animations/TaskCharakterAnimation.cs
index 3bbff355a87cb6c30c781e3b32ce8ec808979305..4012bda90524d6d1d0fee7a1105664d459088fed 100644
--- a/Assets/Scripts/InteractionEngine/Character_Animations/TaskCharakterAnimation.cs
+++ b/Assets/Scripts/InteractionEngine/Character_Animations/TaskCharakterAnimation.cs
@@ -97,7 +97,7 @@ void Update()
             //Face walkAroundObject to Player (but only on y-Axis, so ignore x-and z-axis)
             currentTransform.LookAt(new Vector3(player.transform.position.x, currentTransform.position.y, player.transform.position.z));
 
-            if(taskCharacterAddressed && !LelvelVerifiedSolved && checkGameSolved())
+            if(taskCharacterAddressed && !LelvelVerifiedSolved && StageStatic.stage.CheckSolved())
             {
                 startHappy();
                 LelvelVerifiedSolved = true;
@@ -190,11 +190,6 @@ void Update()
         }
     }
 
-    public bool checkGameSolved()
-    {
-        return StageStatic.stage.CheckSolved();
-    }
-
     public void startHappy()
     {
         //Set Variable in animationController to change the state
diff --git a/Assets/Scripts/InteractionEngine/FactHandling/Fact.cs b/Assets/Scripts/InteractionEngine/FactHandling/Fact.cs
index 9df9852598ffaaaa35d924e2bb591c5c5ae171f0..06d0b7cf1ee40556951707f5477d4e9ee1e5cc68 100644
--- a/Assets/Scripts/InteractionEngine/FactHandling/Fact.cs
+++ b/Assets/Scripts/InteractionEngine/FactHandling/Fact.cs
@@ -2123,7 +2123,9 @@ protected override bool EquivalentWrapped(CircleFact f1, CircleFact f2)
         PointFact p1f1 = (PointFact)_Facts[f1.Pid1];
         PointFact p1f2 = (PointFact)_Facts[f2.Pid1];
 
-        return (p1f1.Equivalent(p1f2) && f1.normal == f2.normal && f1.radius == f2.radius);
+        return p1f1.Equivalent(p1f2) 
+            && Math3d.IsApproximatelyEqual(f1.normal, f2.normal) 
+            && Mathf.Approximately(f1.radius, f2.radius);
     }
 }
 
diff --git a/Assets/Scripts/InteractionEngine/FactHandling/FactManager.cs b/Assets/Scripts/InteractionEngine/FactHandling/FactManager.cs
index 8290fcad3db2cf4bf431a5247a1ddebbdb99b99e..1a8844d8a158bd8d419432ec1e3aa3e62c8129d1 100644
--- a/Assets/Scripts/InteractionEngine/FactHandling/FactManager.cs
+++ b/Assets/Scripts/InteractionEngine/FactHandling/FactManager.cs
@@ -10,6 +10,7 @@
 public static class FactManager
 {
     //TODO! communicate success/ failure + consequences
+    //TODO: solution for parsed-functions
     /// <summary>
     /// Adds <paramref name="fact"/> to <see cref="StageStatic.stage.factState"/>
     /// </summary>
@@ -18,12 +19,12 @@ public static class FactManager
     /// \copydetails FactManager
     public static Fact AddFactIfNotFound(Fact fact, out bool exists, bool samestep, Gadget gadget, string scroll_label)
     {
-            if (fact is AngleCircleLineFact)
+        if (fact is AngleCircleLineFact)
             return AddParsedAngleCircleLineFactIfNotFound((AngleCircleLineFact)fact, out exists, samestep, null, scroll_label);
 
         else if (fact is AngleFact)
-            return AddParsedAngleFactIfNotFound((AngleFact) fact, out exists, samestep, null, scroll_label);
-      
+            return AddParsedAngleFactIfNotFound((AngleFact)fact, out exists, samestep, null, scroll_label);
+
         else
             return StageStatic.stage.factState[
             StageStatic.stage.factState.Add(
@@ -159,7 +160,7 @@ public static AngleCircleLineFact AddAngleCircleLineFact(string cid, string lid,
             new AngleCircleLineFact(cid, lid, angleValue, StageStatic.stage.factState)
             , out _, samestep, gadget, scroll_label);
 
-        if (Mathf.Abs(Mathf.Abs(angleValue) - 90.0f) < 0.1)
+        if (Mathf.Approximately(Mathf.Abs(angleValue), 90.0f))
         {
             AddFactIfNotFound(
                 new OrthogonalCircleLineFact(cid, lid, StageStatic.stage.factState)
@@ -171,7 +172,7 @@ public static AngleCircleLineFact AddAngleCircleLineFact(string cid, string lid,
     public static Fact AddParsedAngleCircleLineFactIfNotFound(AngleCircleLineFact fact, out bool exists, bool samestep, Gadget gadget, string scroll_label)
     {
 
-        if (Mathf.Abs(Mathf.Abs(fact.angle) - 90.0f) < 0.1)
+        if (Mathf.Approximately(Mathf.Abs(fact.angle), 90.0f))
         {
             AddFactIfNotFound(
                 new OrthogonalCircleLineFact(fact.Cid1, fact.Rid2, StageStatic.stage.factState)
diff --git a/Assets/Scripts/InteractionEngine/FactHandling/FactSpawner.cs b/Assets/Scripts/InteractionEngine/FactHandling/FactSpawner.cs
index dd1f8cfaaca36bfb7ab97fca0c01411776b38fd8..df4350d548f6c36731d551d9c46ed74313159114 100644
--- a/Assets/Scripts/InteractionEngine/FactHandling/FactSpawner.cs
+++ b/Assets/Scripts/InteractionEngine/FactHandling/FactSpawner.cs
@@ -39,18 +39,6 @@ public Fact SpawnFactRepresentation(Fact fact)
         };
 
         return func?.Invoke(fact);
-
-        //TODO check if the above breaks anything
-        //return fact switch
-        //{
-        //    PointFact pointFact => SpawnPoint,
-        //    LineFact lineFact => SpawnLine,
-        //    AngleFact angleFact => SpawnAngle,
-        //    RayFact rayFact => SpawnRay,
-        //    CircleFact circleFact => SpawnRingAndCircle,
-        //    _ => null,
-        //};
-
     }
   
 
diff --git a/Assets/Scripts/InteractionEngine/ForestElementsManager.cs b/Assets/Scripts/InteractionEngine/ForestElementsManager.cs
index 81a62c0489f12e1eea5c4e0d2a3f5ad2efb1da0a..c149aec7292d909129c7021b5d8ee92ce649269a 100644
--- a/Assets/Scripts/InteractionEngine/ForestElementsManager.cs
+++ b/Assets/Scripts/InteractionEngine/ForestElementsManager.cs
@@ -7,6 +7,7 @@ public class ForestElementsManager : MonoBehaviour
 
     [SerializeField] bool smallObjectsCollision = false;
 
+    //TODO: decide on convention: disable in editor, or here, not both
     private System.Action<GameObject> disableSmallObjectCollision = (gameObj) =>
     {
         if (gameObj.name.Contains("Grass_01") || gameObj.name.Contains("Grass_02") || gameObj.name.Contains("Mushroom_01") || gameObj.name.Contains("Mushroom_02") || gameObj.name.Contains("Branch_01"))
diff --git a/Assets/Scripts/InteractionEngine/Gadgets/AngleTool.cs b/Assets/Scripts/InteractionEngine/Gadgets/AngleTool.cs
index 26dab0b3bbecafc69b712bfe7edb2bd1479c910b..f630fbccb3c0e7993e0a3e4fc45180decea8ee19 100644
--- a/Assets/Scripts/InteractionEngine/Gadgets/AngleTool.cs
+++ b/Assets/Scripts/InteractionEngine/Gadgets/AngleTool.cs
@@ -66,12 +66,12 @@ protected override void _UpdateLineDrawing()
         //Circle: p + r(cost)v1 + r(sint)v2: t real, v1&v2 unit orthogonal, r radius
         Vector3 v1 = (GadgetBehaviour.Cursor.transform.position - AnglePoints[1]).normalized;
         Vector3 v2 = (AnglePoints[2] - Math3d.ProjectPointOnLine(Vector3.zero, v1, AnglePoints[2])).normalized;
-        float increment = 2 * Mathf.PI / (curveDrawingVertexCount-1) * Vector3.Angle(v1, AnglePoints[2]) / 360;
-        float percentage = 0;
-        for (int i = 1; i < curveDrawingVertexCount + 1; i++, percentage += increment)
+        float increment = 2 * Mathf.PI / 360 * Vector3.Angle(v1, AnglePoints[2]) / (curveDrawingVertexCount - 1);
+        float rads = 0;
+        for (int i = 1; i < curveDrawingVertexCount + 1; i++, rads += increment)
         {
             Vector3 frag = AnglePoints[1]
-                + curveRadius * (Mathf.Cos(percentage) * v1 + Mathf.Sin(percentage) * v2);
+                + curveRadius * (Mathf.Cos(rads) * v1 + Mathf.Sin(rads) * v2);
             SetPosition(i, frag);
         }
     }
diff --git a/Assets/Scripts/InteractionEngine/Gadgets/EqualCircleGadget.cs b/Assets/Scripts/InteractionEngine/Gadgets/EqualCircleGadget.cs
index e92dc063d667158a804a0df77f916aee4bb1311a..75c5973b39b0d5da46ad81fd8c0e1d8ee4f59c7e 100644
--- a/Assets/Scripts/InteractionEngine/Gadgets/EqualCircleGadget.cs
+++ b/Assets/Scripts/InteractionEngine/Gadgets/EqualCircleGadget.cs
@@ -8,74 +8,43 @@
 /// </summary>
 public class EqualCircleGadget : Gadget
 {
-
+    /// \copydoc Gadget.s_type
     [Newtonsoft.Json.JsonProperty]
     protected static new string s_type = "EqualCircles";
 
-    //Variables to safe if one circle has already been selected
-    private bool FirstCircleSelected = false;
-    private CircleFact FirstCircle = null;
-
-
-
-
-    new void Awake()
-    {
-        base.Awake();
-        UiName = "EqualCircles Mode";
-        if (MaxRange == 0)
-            MaxRange = GlobalBehaviour.GadgetLaserDistance;
-    }
 
 
     public override void _Hit(RaycastHit[] hit)
     {
-        if (hit[0].transform.gameObject.layer == LayerMask.NameToLayer("Circle"))
-        {
-            CircleFact tempFact = (CircleFact)StageStatic.stage.factState[hit[0].transform.GetComponent<FactObject>().URI];
-
-            //If the first circle got already selected
-            if (this.FirstCircleSelected)
-            {
-                // Debug.Log("hit it");
-               //  Debug.Log("data: radius dif" + Mathf.Abs(this.FirstCircle.radius - tempFact.radius) +" ids: 1. "+ this.FirstCircle.Id+", 2."+ tempFact.Id);
-                //Create EqualCirclesFact
-                //Check if new Point is equal to one of the previous points -> if true -> cancel
-                if ((Mathf.Abs(this.FirstCircle.radius - tempFact.radius) < 0.01) && !(this.FirstCircle.Id == tempFact.Id))
-                {
-                    FactManager.AddEqualCirclesFact(((CircleFact)this.FirstCircle).Id, ((CircleFact)tempFact).Id);
-                }
-                else {
-                    if(!(this.FirstCircle.Id == tempFact.Id)) 
-                        FactManager.AddUnEqualCirclesFact(((CircleFact)this.FirstCircle).Id, ((CircleFact)tempFact).Id);
+        if (hit[0].transform.gameObject.layer != LayerMask.NameToLayer("Circle"))
+            //No Circles were hit
+            ResetGadget();
 
-                }
+        string tempFactId = hit[0].transform.GetComponent<FactObject>().URI;
+        if (!Workflow.Contains(tempFactId)) // filters double hits / exact ones
+            Workflow.Add(tempFactId);
 
-                ResetGadget();
-            }
-            //If no circle was selected before
-            else
-            {
-                //Save the first point selected
-                this.FirstCircleSelected = true;
-                this.FirstCircle= tempFact;
-            }
-        }
-        //No Circles were hit
-        else
+        switch (Workflow.Count)
         {
-            ResetGadget();
+            case 1: //If no circle was selected before
+                break;
 
-        }
-    }
+            case 2: //If the first circle got already selected
 
+                //Debug.Log("hit it");
+                //Debug.Log("data: radius dif" + Mathf.Abs(this.FirstCircle.radius - tempFact.radius) +" ids: 1. "+ this.FirstCircle.Id+", 2."+ tempFact.Id);
 
-    protected override void _ResetGadget()
-    {
-        this.FirstCircleSelected= false;
-        this.FirstCircle = null;
+                CircleFact tempFact = (CircleFact)StageStatic.stage.factState[Workflow[0]];
+                CircleFact FirstCircle = (CircleFact)StageStatic.stage.factState[tempFactId];
 
-    }
+                if (Mathf.Approximately(FirstCircle.radius, tempFact.radius))
+                    FactManager.AddEqualCirclesFact  (Workflow[0], tempFactId);
 
+                else
+                    FactManager.AddUnEqualCirclesFact(Workflow[0], tempFactId);
 
+                ResetGadget();
+                break;
+        }
+    }
 }
diff --git a/Assets/Scripts/InteractionEngine/Gadgets/Pointer.cs b/Assets/Scripts/InteractionEngine/Gadgets/Pointer.cs
index 3b4fc008cc6a1fe37973e05fde68ababb125b7c3..09785d868d8ee3f9793f6dea163cc2f0bcb0fe29 100644
--- a/Assets/Scripts/InteractionEngine/Gadgets/Pointer.cs
+++ b/Assets/Scripts/InteractionEngine/Gadgets/Pointer.cs
@@ -30,8 +30,6 @@ public override void _Hit(RaycastHit[] hit)
             }
         }
 
-        
-
         ResetGadget();
     }
 }
diff --git a/Assets/Scripts/InteractionEngine/Gadgets/PoleTool.cs b/Assets/Scripts/InteractionEngine/Gadgets/PoleTool.cs
index a208558eea00f82cfb2150ef20ff3558d3ba5476..0b66a4f9ca2c8af2292a3afed8b44232876faae1 100644
--- a/Assets/Scripts/InteractionEngine/Gadgets/PoleTool.cs
+++ b/Assets/Scripts/InteractionEngine/Gadgets/PoleTool.cs
@@ -28,15 +28,9 @@ public override void _Hit(RaycastHit[] hit)
 
         UpdateLineDrawing();
 
-
-
         if (hit[0].transform.gameObject.layer == LayerMask.NameToLayer("Point"))
         {
-
             Workflow.Add(hit[0].transform.gameObject.GetComponent<FactObject>().URI);
-            //TODO check if below works else fix with the commented stuff
-            // var pid2 = FactManager.AddPointFact(linePositions[1], Vector3.up).Id;
-           // FactManager.AddLineFact(hit[0].transform.gameObject.GetComponent<FactObject>().URI, pid2, true);
             
             var pid2 = FactManager.AddPointFact(GetPosition(1), Vector3.up, gadget: this).Id;
             FactManager.AddLineFact(Workflow[0], pid2, true, gadget: this);
@@ -44,7 +38,6 @@ public override void _Hit(RaycastHit[] hit)
         else
         {
             FactManager.AddPointFact(hit[0], gadget: this);
-
         }
 
         ResetGadget();
diff --git a/Assets/Scripts/InteractionEngine/Gadgets/Tape.cs b/Assets/Scripts/InteractionEngine/Gadgets/Tape.cs
index 7cdc692c8b0093c0e977876e133bdeeaaa581dc1..d512a1e785089f0136b1b393531f2415c08ffc65 100644
--- a/Assets/Scripts/InteractionEngine/Gadgets/Tape.cs
+++ b/Assets/Scripts/InteractionEngine/Gadgets/Tape.cs
@@ -55,8 +55,6 @@ protected override void _UpdateLineDrawing()
         SetPosition(1, GadgetBehaviour.Cursor.transform.position);
     }
 
-
-
     protected override void _Update_Range()
     {
         float NewMaxRange = UIconfig.interactingRangeMode switch
diff --git a/Assets/Scripts/InteractionEngine/Gadgets/TestMiddlePoint.cs b/Assets/Scripts/InteractionEngine/Gadgets/TestMiddlePoint.cs
index f697556a58e3d65a2e8c9c83dfe33fb75b1bf200..12672bbfa21135055e72d7588cc98ca422361a7b 100644
--- a/Assets/Scripts/InteractionEngine/Gadgets/TestMiddlePoint.cs
+++ b/Assets/Scripts/InteractionEngine/Gadgets/TestMiddlePoint.cs
@@ -29,19 +29,12 @@ public override void _Hit(RaycastHit[] hit)
                 break;
 
             case 2:
-                //FactManager.AddLineFact(Workflow[0], Workflow[1], gadget: this);
 
                 //Insert point in the middle
-                Vector3 middle = new Vector3();
                 PointFact p1 = (PointFact)StageStatic.stage.factState[Workflow[0]];
                 PointFact p2 = (PointFact)StageStatic.stage.factState[Workflow[1]];
 
-                middle = p1.Point + (p2.Point - p1.Point) * 0.5f;
-
-                //Debug.Log("p1:" + p1.Point);
-                //Debug.Log("middle:" + middle); 
-                //Debug.Log("p2:" + p2.Point);
-
+                Vector3 middle = p1.Point + (p2.Point - p1.Point) * 0.5f;
 
                 FactManager.AddPointFact(middle, Vector3.up);
                 ResetGadget();
diff --git a/Assets/Scripts/InteractionEngine/ImageHintAnimation.cs b/Assets/Scripts/InteractionEngine/ImageHintAnimation.cs
index 51e59deb9e6fc41b4331fe6651c6c338dda21653..7f9c33d7203b9c3cbe74829614c0a0b9b014451d 100644
--- a/Assets/Scripts/InteractionEngine/ImageHintAnimation.cs
+++ b/Assets/Scripts/InteractionEngine/ImageHintAnimation.cs
@@ -25,7 +25,7 @@ public void AnimationTrigger()
 
         IEnumerator Animation()
         {
-            for ( var track = 0f.LerpInTime(0, 0, GlobalBehaviour.hintAnimationDuration)
+            for ( var track = 0f.LerpInTime(0, GlobalBehaviour.hintAnimationDuration)
                 ; track.MoveNext();)
 
                 yield return imageToChange.color =
diff --git a/Assets/Scripts/InteractionEngine/MMTInterface.cs b/Assets/Scripts/InteractionEngine/MMTInterface.cs
deleted file mode 100644
index 7d97d9d8b06b797a395c2b2b9aa771b3587ef4d4..0000000000000000000000000000000000000000
--- a/Assets/Scripts/InteractionEngine/MMTInterface.cs
+++ /dev/null
@@ -1,44 +0,0 @@
-using System.Diagnostics;
-using UnityEngine;
-
-public class MMTInterface : MonoBehaviour
-{
-    private Process mmtServerProcess;
-    private ProcessStartInfo mmtServerProcessInfo;
-
-    // Start is called before the first frame update
-
-
-    void Start()
-    {
-        //Start the mmt.bat for carrying out http-Requests
-        //TODO: Putting the absolute path to mmt.bat here should soon be changed
-        /*mmtServerProcessInfo = new ProcessStartInfo("cmd.exe", "/c " + "C:\\Users\\John\\Downloads\\Program_Downloads\\For_FAU_PROJECT_MA_MMT\\MMT\\deploy\\mmt.bat");
-        //CreateNoWindow = flase -> For now only for testing purposes
-        mmtServerProcessInfo.CreateNoWindow = false;
-        mmtServerProcessInfo.UseShellExecute = false;
-        mmtServerProcessInfo.RedirectStandardError = true;
-        mmtServerProcessInfo.RedirectStandardOutput = true;
-
-        mmtServerProcess = Process.Start(mmtServerProcessInfo);
-        */
-
-        //   CommunicationEvents.AddPointEvent.AddListener(AddFactToMMT);
-        //  CommunicationEvents.RemoveEvent.AddListener(RemoveFactFromMMT);   
-
-
-    }
-    /*
-    void AddFactToMMT(RaycastHit hit, int id )
-    {
-        //send new fact to MMT
-        UnityEngine.Debug.Log("add fact"+ id);
-    }
-
-    void RemoveFactFromMMT( int id)
-    {
-        UnityEngine.Debug.Log("remove fact"+ id);
-    }
-    */
-
-}
diff --git a/Assets/Scripts/InteractionEngine/ShinyThings.cs b/Assets/Scripts/InteractionEngine/ShinyThings.cs
index e1ba577f03444cfdc2478ed47ee1a05ab0d3e5a8..39781b0e58dbef1c964eda471a4f59786884070a 100644
--- a/Assets/Scripts/InteractionEngine/ShinyThings.cs
+++ b/Assets/Scripts/InteractionEngine/ShinyThings.cs
@@ -133,7 +133,7 @@ public void LetItRain(Fact startFact, Scroll.ScrollApplicationInfo _)
             StopCoroutine(rain);
             StartCoroutine(rain = BlossomAndDie());
         }
-        rain_wait = 0f.LerpInTime(0, 0, timerDuration); //reset timer
+        rain_wait = 0f.LerpInTime(0, timerDuration); //reset timer
 
         IEnumerator BlossomAndDie()
         {
diff --git a/Assets/Scripts/InteractionEngine/TBD.meta b/Assets/Scripts/InteractionEngine/TBD.meta
new file mode 100644
index 0000000000000000000000000000000000000000..bbf515c8ab1d17248bd4ac0e5cb154bfecef3e59
--- /dev/null
+++ b/Assets/Scripts/InteractionEngine/TBD.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 7a496c91ae6574f4882d379b5e8430a4
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Scripts/InteractionEngine/TBD/Interactable.cs b/Assets/Scripts/InteractionEngine/TBD/Interactable.cs
new file mode 100644
index 0000000000000000000000000000000000000000..1e818d2b5ad37331c669dfe1016af6dbe71fcced
--- /dev/null
+++ b/Assets/Scripts/InteractionEngine/TBD/Interactable.cs
@@ -0,0 +1,18 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class Interactable : MonoBehaviour
+{
+    // Start is called before the first frame update
+    void Start()
+    {
+        
+    }
+
+    // Update is called once per frame
+    void Update()
+    {
+        
+    }
+}
diff --git a/Assets/Scripts/InteractionEngine/MMTInterface.cs.meta b/Assets/Scripts/InteractionEngine/TBD/Interactable.cs.meta
similarity index 83%
rename from Assets/Scripts/InteractionEngine/MMTInterface.cs.meta
rename to Assets/Scripts/InteractionEngine/TBD/Interactable.cs.meta
index 1d00c6ef36853be4f5552802ff36b6a906fc76e3..cc395cf0f6a25c884f465e2057b47f90f06c4ba9 100644
--- a/Assets/Scripts/InteractionEngine/MMTInterface.cs.meta
+++ b/Assets/Scripts/InteractionEngine/TBD/Interactable.cs.meta
@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: 42f653bda20b4e141a65e0ff147cb10e
+guid: c01ff6c7ff85cb74d80f6abec8271dbe
 MonoImporter:
   externalObjects: {}
   serializedVersion: 2
diff --git a/Assets/Scripts/UI/MainMenue/SceneSwitcher.cs b/Assets/Scripts/UI/MainMenue/SceneSwitcher.cs
index 8662363fce45a0445550fddfdecd14f7bf611903..d9466e2010ddedc8aa41d70bc75c2c67fc739dae 100644
--- a/Assets/Scripts/UI/MainMenue/SceneSwitcher.cs
+++ b/Assets/Scripts/UI/MainMenue/SceneSwitcher.cs
@@ -25,7 +25,7 @@ void Start()
     private void Update()
     {
 
-        if (false) { Debug.Log(debug_path); }
+        // Debug.Log(debug_path);
 
     }
 
diff --git a/Assets/Scripts/Utility/Extensions/MathfExtensions.cs b/Assets/Scripts/Utility/Extensions/MathfExtensions.cs
index 89fc33b01f042f733a2ee046103190a0bb685d6c..0f8cfd3fe2873733d54208b141fd1576e0099a81 100644
--- a/Assets/Scripts/Utility/Extensions/MathfExtensions.cs
+++ b/Assets/Scripts/Utility/Extensions/MathfExtensions.cs
@@ -4,6 +4,17 @@
 
 public static  class MathfExtensions
 {
+    /// <summary>
+    /// Checks whether two floats are approximately the same with given precission
+    /// </summary>
+    /// <param name="floatA">first float</param>
+    /// <param name="floatB">second float</param>
+    /// <param name="precission">precission to use, default: <see cref="Math3d.vectorPrecission"/></param>
+    /// <returns>true if two floats are approximately equal with given precission</returns>
+    /// <seealso cref="Mathf.Approximately"/>
+    public static bool IsApproximatelyEqual(this float floatA, float floatB, float precission = (float) Math3d.vectorPrecission)
+        => Mathf.Abs(floatA - floatB) < precission;
+
     /// <summary>
     /// Lineary Lerps between <paramref name="start"/> and <paramref name="end"/> within <paramref name="time"/>, using <see cref="Time.deltaTime"/>.
     /// Guarantees returning <paramref name="end"/> at last step,
@@ -12,7 +23,7 @@ public static  class MathfExtensions
     /// <param name="end">Value to end</param>
     /// <param name="time">Time to pass</param>
     /// <returns>IEnumerator<float> with statet behaviour</returns>
-    public static IEnumerator<float> LerpInTime(float start, float end, float time)
+    public static IEnumerator<float> LerpInTime(this float start, float end, float time)
     {
         if (time < 0) yield break;
 
@@ -21,11 +32,4 @@ public static IEnumerator<float> LerpInTime(float start, float end, float time)
 
         yield return end;
     }
-
-    /// \copydoc LerpInTime(float, float, float)
-    /// <remarks>Wrappes static method and exposes it as Extension.</remarks>
-    /// <param name="iotta">Ignored. Here to expose Extension.</param>
-    public static IEnumerator<float> LerpInTime(this float iotta, float start, float end, float time)
-        => LerpInTime(start, end, time);
-
 }
diff --git a/UserSettings/EditorUserSettings.asset b/UserSettings/EditorUserSettings.asset
index c0df12af4211b2b907fafbb821f764d388d02cb7..2e49119cae911d1bd871b95e5094e44ed5bba1bf 100644
--- a/UserSettings/EditorUserSettings.asset
+++ b/UserSettings/EditorUserSettings.asset
@@ -12,19 +12,16 @@ EditorUserSettings:
       value: 0702005254070d5d5d5a5d7145210f444116487c282d7f357e7a1e66b6b0313a
       flags: 0
     RecentlyUsedSceneGuid-2:
-      value: 0709560454055c0d0c5e5c2444740b4413154a72792d22627c714963e0b6373d
+      value: 5b01035553515d0e0b0f5b7415725d444e4f1d2b2e782332757f4863e4e6673c
       flags: 0
     RecentlyUsedSceneGuid-3:
-      value: 57505505560608585a56557116730644404e4d7b7c7b7562787e4f66e4b1313e
+      value: 0709560454055c0d0c5e5c2444740b4413154a72792d22627c714963e0b6373d
       flags: 0
     RecentlyUsedSceneGuid-4:
-      value: 5b01035553515d0e0b0f5b7415725d444e4f1d2b2e782332757f4863e4e6673c
-      flags: 0
-    RecentlyUsedSceneGuid-5:
       value: 0502505152005e020c0d0e2446275e44144f19287f707e362c7c4b60b2b9353c
       flags: 0
     RecentlyUsedSceneGuid-5:
-      value: 0709560454055c0d0c5e5c2444740b4413154a72792d22627c714963e0b6373d
+      value: 57505505560608585a56557116730644404e4d7b7c7b7562787e4f66e4b1313e
       flags: 0
     RecentlyUsedScenePath-0:
       value: 22424703114646680e0b0227036c681f041b1c39631c3435281e1221eee47a2decee22f0