diff --git a/Assets/FactManager.cs b/Assets/FactManager.cs
new file mode 100644
index 0000000000000000000000000000000000000000..5362ae4c7ec687a589ad4b4d01d5f5cb700935ea
--- /dev/null
+++ b/Assets/FactManager.cs
@@ -0,0 +1,184 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using static CommunicationEvents;
+public class FactManager : MonoBehaviour
+{
+    // Start is called before the first frame update
+    void Start()
+    {
+        CommunicationEvents.ToolModeChangedEvent.AddListener(OnToolModeChanged);
+    }
+
+    // Update is called once per frame
+    void Update()
+    {
+        //Je nachdem ob erster oder der zweite Punkt angeklickt wurde behandeln
+
+        //Wenn erster Punkt einen Point-Collider erwischt hat:
+        //Linie aktivieren und Cursor folgen
+        //Wenn erster Punkt keinen Point-Collider erwischt hat:
+        //Nichts tun -> Evtl Hint einblenden
+
+        //Wenn zweiter Punkt einen Point-Collider erwischt hat:
+        //Event senden um GameObject-Line zu erzeugen
+        //Wenn zweiter Punkt keinen Point-Collider erwischt hat:
+        //Linie deaktivieren -> Evtl Hint einblenden
+
+        //LayerMask for Points
+        int layerMask = 1 << LayerMask.NameToLayer("Point"); //only hit Point
+
+        //Wenn bereits der erste Punkt markiert wurde
+        if (this.lineRendererActivated) //instead: bool variable....
+        {
+            //If a second Point was Hit
+            if (Physics.Raycast(ray, out Hit, 30f, layerMask))
+            {
+                //Event for Creating the Line
+                Vector3 point1 = this.linePositions[0];
+                Vector3 point2 = Hit.transform.gameObject.transform.position;
+                this.DeactivateLineRenderer();
+                CommunicationEvents.AddLineEvent.Invoke(point1, point2);
+                break;
+            }
+            //If no Point was hit
+            else
+            {
+                //TODO: Hint that only a line can be drawn between already existing points
+                this.DeactivateLineRenderer();
+            }
+        }
+        //Wenn der erste Punkt noch nicht markiert wurde
+        else
+        {
+            //Check if a Point was hit
+            if (Physics.Raycast(ray, out Hit, 30f, layerMask))
+            {
+                //Set LineRenderer activated
+                this.lineRendererActivated = true;
+                //Add the position of the hit Point for the start of the Line
+                Vector3 temp = Hit.transform.gameObject.transform.position;
+                //temp += Vector3.up;
+
+                linePositions.Add(temp);
+                //The second point is the same point at the moment
+                linePositions.Add(temp);
+                this.lineRenderer.SetPosition(0, linePositions[0]);
+                this.lineRenderer.SetPosition(1, linePositions[1]);
+            }
+            else
+            {
+                //TODO: Hint that only a line can be drawn between already existing points
+            }
+        }
+
+
+
+    }
+
+
+    public int GetFirstEmptyID()
+    {
+
+        for (int i = 0; i < Facts.Length; ++i)
+        {
+            if (Facts[i] == "")
+                return i;
+        }
+        return Facts.Length - 1;
+
+    }
+
+    public void OnToolModeChanged(ToolMode ActiveToolMode)
+    {
+        switch (ActiveToolMode)
+        {
+            case ToolMode.MarkPointMode:
+                //If MarkPointMode is activated we want to have the ability to mark the point
+                //everywhere, independent of already existing facts
+                foreach (GameObject GameObjectFact in GameObjectFacts)
+                {
+                    GameObjectFact.GetComponentInChildren<Collider>().enabled = false;
+                }
+                break;
+            case ToolMode.CreateLineMode:
+                //If CreateLineMode is activated we want to have the ability to select points for the Line
+                //but we don't want to have the ability to select Lines or Angles
+                foreach (GameObject GameObjectFact in GameObjectFacts)
+                {
+                    if (GameObjectFact.layer == LayerMask.NameToLayer("Line") || GameObjectFact.layer == LayerMask.NameToLayer("Angle"))
+                    {
+                        GameObjectFact.GetComponentInChildren<Collider>().enabled = false;
+                    }
+                    else if (GameObjectFact.layer == LayerMask.NameToLayer("Point"))
+                    {
+                        GameObjectFact.GetComponentInChildren<Collider>().enabled = true;
+                    }
+                }
+                break;
+            case ToolMode.CreateAngleMode:
+                //If CreateAngleMode is activated we want to have the ability to select Lines for the Angle
+                //but we don't want to have the ability to select Points or Angles
+                foreach (GameObject GameObjectFact in GameObjectFacts)
+                {
+                    if (GameObjectFact.layer == LayerMask.NameToLayer("Point") || GameObjectFact.layer == LayerMask.NameToLayer("Angle"))
+                    {
+                        GameObjectFact.GetComponentInChildren<Collider>().enabled = false;
+                    }
+                    else if (GameObjectFact.layer == LayerMask.NameToLayer("Line"))
+                    {
+                        GameObjectFact.GetComponentInChildren<Collider>().enabled = true;
+                    }
+                }
+                break;
+            case ToolMode.DeleteMode:
+                //If DeleteMode is activated we want to have the ability to delete every Fact
+                //independent of the concrete type of fact
+                foreach (GameObject GameObjectFact in GameObjectFacts)
+                {
+                    GameObjectFact.GetComponentInChildren<Collider>().enabled = true;
+                }
+                break;
+            case ToolMode.ExtraMode:
+                foreach (GameObject GameObjectFact in GameObjectFacts)
+                {
+
+                }
+                break;
+
+
+
+        }
+    }
+
+    public void OnHit(RaycastHit hit)
+    {
+        Debug.Log(CommunicationEvents.ActiveToolMode);
+        if (hit.transform.gameObject.layer == LayerMask.NameToLayer("Point"))
+        {
+            //hit existing point, so delete it
+            if (CommunicationEvents.ActiveToolMode == ToolMode.ExtraMode)
+            {
+                var menu = GameObject.Instantiate(SmartMenu);
+                menu.GetComponent<Canvas>().worldCamera = Camera.main;
+                menu.transform.SetParent(hit.transform);
+                menu.transform.localPosition = Vector3.up - Camera.main.transform.forward;
+            }
+            else
+            {
+                char letter = hit.transform.gameObject.GetComponentInChildren<TextMeshPro>().text.ToCharArray()[0];
+                int id = letter - 65;
+                CommunicationEvents.RemoveEvent.Invoke(id);
+            }
+
+        }
+        else
+        {
+
+            CommunicationEvents.AddPointEvent.Invoke(hit, GetFirstEmptyID());
+        }
+    }
+
+
+
+}
diff --git a/Assets/FactManager.cs.meta b/Assets/FactManager.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..172218dae9a872d5826b8c36e5b2a0cc5d8c744d
--- /dev/null
+++ b/Assets/FactManager.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: c75823b1712c4914b987f0e1ba8a5cba
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/InteractionEngine/CommunicationEvents.cs b/Assets/InteractionEngine/CommunicationEvents.cs
index c4a80da18ed5aafc2e9200d5343cb7011ff021b2..706e4666b1bb420f59493ea0a3b2f50a9086f7d0 100644
--- a/Assets/InteractionEngine/CommunicationEvents.cs
+++ b/Assets/InteractionEngine/CommunicationEvents.cs
@@ -2,6 +2,7 @@
 using System.Collections.Generic;
 using UnityEngine;
 using UnityEngine.Events;
+using System;
 
 public static class CommunicationEvents
 {
@@ -10,7 +11,7 @@ public  class PointEvent : UnityEvent<RaycastHit,int>
 
     }
 
-    public class LineEvent : UnityEvent<Vector3, Vector3> {
+    public class LineEvent : UnityEvent<int, int, int> {
 
     }
 
@@ -39,4 +40,9 @@ public class ToolModeEvent : UnityEvent<ToolMode> {
     public static LineEvent AddLineEvent = new LineEvent();
     public static FactEvent RemoveEvent = new FactEvent();
     public static ToolMode ActiveToolMode { get; set; }
+
+    public static List<Fact> Facts = new List<Fact>();
+  
+
+
 }
diff --git a/Assets/InteractionEngine/Fact.cs b/Assets/InteractionEngine/Fact.cs
new file mode 100644
index 0000000000000000000000000000000000000000..fd6f5e6513d34571326a623f676175952c757f8a
--- /dev/null
+++ b/Assets/InteractionEngine/Fact.cs
@@ -0,0 +1,13 @@
+using UnityEngine;
+
+public class Fact
+{
+    public int Id;
+    public GameObject Representation;
+
+}
+
+public class PointFact : Fact
+{
+    public Vector3 Point;
+}
\ No newline at end of file
diff --git a/Assets/InteractionEngine/Fact.cs.meta b/Assets/InteractionEngine/Fact.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..1e259178fa67ad2e48cdb3f5918f174c2684a383
--- /dev/null
+++ b/Assets/InteractionEngine/Fact.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: f3845653d3db1cc4288bc1141281cb97
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/InteractionEngine/FactSpawner.cs b/Assets/InteractionEngine/FactSpawner.cs
index e2111703e68499f279619361df5a74152d7c1130..ce32db93955baaea0b84c36bef4586bedd0fa479 100644
--- a/Assets/InteractionEngine/FactSpawner.cs
+++ b/Assets/InteractionEngine/FactSpawner.cs
@@ -3,12 +3,12 @@
 using System.Collections.Generic;
 using TMPro;
 using UnityEngine;
+using static CommunicationEvents;
 
 public class FactSpawner : MonoBehaviour
 {
     private GameObject FactRepresentation;
-    public string[] Facts = new String[100];
-    public GameObject[] GameObjectFacts = new GameObject[100];
+
 
     //Variables for highlighting Facts where the cursor moves over
     public Material defaultMaterial;
@@ -21,7 +21,7 @@ void Start()
         CommunicationEvents.HighlightEvent.AddListener(OnMouseOverFact);
         CommunicationEvents.EndHighlightEvent.AddListener(OnMouseOverFactEnd);
         CommunicationEvents.TriggerEvent.AddListener(OnHit);
-        CommunicationEvents.ToolModeChangedEvent.AddListener(OnToolModeChanged);
+ 
         CommunicationEvents.AddPointEvent.AddListener(SpawnPoint);
         CommunicationEvents.AddLineEvent.AddListener(SpawnLine);
         CommunicationEvents.RemoveEvent.AddListener(DeletePoint);
@@ -31,17 +31,7 @@ void Start()
 
     }
 
-    public int GetFirstEmptyID()
-    {
-       
-        for(int i = 0; i < Facts.Length; ++i)
-        {
-            if(Facts[i]== "")
-                return i;
-        }
-        return Facts.Length - 1;
-   
-    }
+  
 
     public void SpawnPoint(RaycastHit hit, int id)
     {
@@ -58,21 +48,20 @@ public void SpawnPoint(RaycastHit hit, int id)
         //Collider will be set disabled
         if(CommunicationEvents.ActiveToolMode != ToolMode.ExtraMode)
             point.GetComponentInChildren<SphereCollider>().enabled = false;
-        Facts[id] = letter;
-        GameObjectFacts[id] = point;
+    
 
     }
 
     public void DeletePoint(int id)
     {
-        GameObject point = GameObjectFacts[id];
+        GameObject point = Facts[id].Representation;
         GameObject.Destroy(point);
-        Facts[id] = "";
+   
     }
 
-    public void SpawnLine(Vector3 point1, Vector3 point2) {
-        int id = GetFirstEmptyID();
-        Debug.Log(id);
+    public void SpawnLine(int pid1, int pid2, int id) {
+
+        Vector3 point1 = (Facts[pid1] as PointFact).Point;
         //Change FactRepresentation to Line
         this.FactRepresentation = (GameObject)Resources.Load("Prefabs/Line2", typeof(GameObject));
         GameObject line = GameObject.Instantiate(FactRepresentation);
@@ -97,118 +86,10 @@ public void SpawnLine(Vector3 point1, Vector3 point2) {
         GameObjectFacts[id] = line;
     }
 
-    public void OnMouseOverFactEnd(Transform selection)
-    {
-        Renderer selectionRenderer;
-        
-        if (selection != null)
-        {
-            selectionRenderer = selection.GetComponent<Renderer>();
-            if (selectionRenderer != null)
-            {
-                //Set the Material of the fact back to default
-                selectionRenderer.material = defaultMaterial;
-            }
-        }
-    }
-
-    public void OnMouseOverFact(Transform selection)
-    {
-        Renderer selectionRenderer;
-        
-        selectionRenderer = selection.GetComponent<Renderer>();
-        if (selectionRenderer != null) {
-            //Set the Material of the Fact, where the mouse is over, to a special one
-            selectionRenderer.material = highlightMaterial;
-        }
-    }
 
-    public void OnHit(RaycastHit hit)
-    {
-        Debug.Log(CommunicationEvents.ActiveToolMode);
-        if (hit.transform.gameObject.layer == LayerMask.NameToLayer("Point"))
-        {
-            //hit existing point, so delete it
-            if(CommunicationEvents.ActiveToolMode == ToolMode.ExtraMode)
-            {
-                var menu =GameObject.Instantiate(SmartMenu);
-                menu.GetComponent<Canvas>().worldCamera = Camera.main;
-                menu.transform.SetParent(hit.transform);
-                menu.transform.localPosition = Vector3.up- Camera.main.transform.forward;
-            }
-            else
-            {
-                char letter = hit.transform.gameObject.GetComponentInChildren<TextMeshPro>().text.ToCharArray()[0];
-                int id = letter - 65;
-                CommunicationEvents.RemoveEvent.Invoke(id);
-            }
-
-        }
-        else
-        {
-
-            CommunicationEvents.AddPointEvent.Invoke(hit, GetFirstEmptyID());
-        }
-    }
 
-    public void OnToolModeChanged(ToolMode ActiveToolMode) {
-        switch (ActiveToolMode) {
-            case ToolMode.MarkPointMode:
-            //If MarkPointMode is activated we want to have the ability to mark the point
-            //everywhere, independent of already existing facts
-                foreach (GameObject GameObjectFact in this.GameObjectFacts) {
-                    GameObjectFact.GetComponentInChildren<Collider>().enabled = false;
-                }
-                break;
-            case ToolMode.CreateLineMode:
-            //If CreateLineMode is activated we want to have the ability to select points for the Line
-            //but we don't want to have the ability to select Lines or Angles
-                foreach (GameObject GameObjectFact in this.GameObjectFacts)
-                {
-                    if (GameObjectFact.layer == LayerMask.NameToLayer("Line") || GameObjectFact.layer == LayerMask.NameToLayer("Angle"))
-                    {
-                        GameObjectFact.GetComponentInChildren<Collider>().enabled = false;
-                    }
-                    else if (GameObjectFact.layer == LayerMask.NameToLayer("Point")) {
-                        GameObjectFact.GetComponentInChildren<Collider>().enabled = true;
-                    }
-                }
-                break;
-            case ToolMode.CreateAngleMode:
-            //If CreateAngleMode is activated we want to have the ability to select Lines for the Angle
-            //but we don't want to have the ability to select Points or Angles
-                foreach (GameObject GameObjectFact in this.GameObjectFacts)
-                {
-                    if (GameObjectFact.layer == LayerMask.NameToLayer("Point") || GameObjectFact.layer == LayerMask.NameToLayer("Angle"))
-                    {
-                        GameObjectFact.GetComponentInChildren<Collider>().enabled = false;
-                    }
-                    else if (GameObjectFact.layer == LayerMask.NameToLayer("Line"))
-                    {
-                        GameObjectFact.GetComponentInChildren<Collider>().enabled = true;
-                    }
-                }
-                break;
-            case ToolMode.DeleteMode:
-            //If DeleteMode is activated we want to have the ability to delete every Fact
-            //independent of the concrete type of fact
-                foreach (GameObject GameObjectFact in this.GameObjectFacts)
-                {
-                    GameObjectFact.GetComponentInChildren<Collider>().enabled = true;
-                }
-                break;
-                case ToolMode.ExtraMode:
-                foreach (GameObject GameObjectFact in this.GameObjectFacts)
-                {
-                   
-                }
-                break;
-
-            
-
-        }
-    }
+ 
 
-      
+    
 
 }
diff --git a/Assets/InteractionEngine/WorldCursor.cs b/Assets/InteractionEngine/WorldCursor.cs
index 1bae810bcfb8635ba24830acc31be6b170142ffc..1a3a94dcfbf87f7e84754c8d2573afbff80894d3 100644
--- a/Assets/InteractionEngine/WorldCursor.cs
+++ b/Assets/InteractionEngine/WorldCursor.cs
@@ -7,18 +7,11 @@
 
 public class WorldCursor : MonoBehaviour
 {
-    private RaycastHit Hit;
+    public RaycastHit Hit;
     private Camera Cam;
     private ToolMode ActiveToolMode{get; set;}
 
-    //Attributes for Highlighting of Facts when Mouse-Over
-    private string selectableTag = "Selectable";
-    private Transform lastFactSelection;
 
-    //Attributes for simulating the drawing of a line
-    public LineRenderer lineRenderer;
-    private List<Vector3> linePositions = new List<Vector3>();
-    private bool lineRendererActivated;
 
     void Start()
     {
@@ -47,31 +40,8 @@ void Update()
             transform.position = Hit.point;
             transform.up = Hit.normal;
             transform.position += .01f * Hit.normal;
-
-            //SELECTION-HIGHLIGHTING-PART
-            //Check if a Fact was Hit
-            Transform selection = Hit.transform;
-
-            //Set the last Fact unselected
-            if (this.lastFactSelection != null)
-            {
-                //Invoke the EndHighlightEvent that will be handled in FactSpawner
-                CommunicationEvents.EndHighlightEvent.Invoke(this.lastFactSelection);
-                this.lastFactSelection = null;
-            }
-
-            //Set the Fact that was Hit as selected
-            if (selection.CompareTag(selectableTag))
-            {
-                //Invoke the HighlightEvent that will be handled in FactSpawner
-                this.lastFactSelection = selection;
-                CommunicationEvents.HighlightEvent.Invoke(selection);
-            }
-            //SELECTION-HIGHLIGHTING-PART-END
-
             CheckMouseButtons(ray);
 
-            UpdateLineRenderer(transform.position);
 
         }
         else
@@ -86,112 +56,19 @@ void Update()
     }
 
     //Deactivate LineRenderer so that no Line gets drawn when Cursor changes
-    void DeactivateLineRenderer()
-    {
-        //Reset the first points
-        this.lineRenderer.SetPosition(0, Vector3.zero);
-        this.lineRenderer.SetPosition(1, Vector3.zero);
-        if (linePositions.Count > 0)
-            this.linePositions.Clear();
-        this.lineRendererActivated = false;
-    }
+
 
     //Check if left Mouse-Button was pressed and handle it
     void CheckMouseButtons(Ray ray)
     {
         if (Input.GetMouseButtonDown(0))
         {
-            switch (this.ActiveToolMode)
-            {
-                case ToolMode.MarkPointMode:
-                    //send HitEvent
-                    CommunicationEvents.TriggerEvent.Invoke(Hit);
-                    break;
-                case ToolMode.ExtraMode:
-                    //send HitEvent
-                    CommunicationEvents.TriggerEvent.Invoke(Hit);
-                    break;
-                case ToolMode.DeleteMode:
-                    //send HitEvent
-                    CommunicationEvents.TriggerEvent.Invoke(Hit);
-                    break;
-                case ToolMode.CreateLineMode:
-                    //Je nachdem ob erster oder der zweite Punkt angeklickt wurde behandeln
-
-                    //Wenn erster Punkt einen Point-Collider erwischt hat:
-                    //Linie aktivieren und Cursor folgen
-                    //Wenn erster Punkt keinen Point-Collider erwischt hat:
-                    //Nichts tun -> Evtl Hint einblenden
-
-                    //Wenn zweiter Punkt einen Point-Collider erwischt hat:
-                    //Event senden um GameObject-Line zu erzeugen
-                    //Wenn zweiter Punkt keinen Point-Collider erwischt hat:
-                    //Linie deaktivieren -> Evtl Hint einblenden
-
-                    //LayerMask for Points
-                    int layerMask = 1 << LayerMask.NameToLayer("Point"); //only hit Point
-
-                    //Wenn bereits der erste Punkt markiert wurde
-                    if (this.lineRendererActivated)
-                    {
-                        //If a second Point was Hit
-                        if (Physics.Raycast(ray, out Hit, 30f, layerMask))
-                        {
-                            //Event for Creating the Line
-                            Vector3 point1 = this.linePositions[0];
-                            Vector3 point2 = Hit.transform.gameObject.transform.position;
-                            this.DeactivateLineRenderer();
-                            CommunicationEvents.AddLineEvent.Invoke(point1, point2);
-                            break;
-                        }
-                        //If no Point was hit
-                        else
-                        {
-                            //TODO: Hint that only a line can be drawn between already existing points
-                            this.DeactivateLineRenderer();
-                        }
-                    }
-                    //Wenn der erste Punkt noch nicht markiert wurde
-                    else
-                    {
-                        //Check if a Point was hit
-                        if (Physics.Raycast(ray, out Hit, 30f, layerMask))
-                        {
-                            //Set LineRenderer activated
-                            this.lineRendererActivated = true;
-                            //Add the position of the hit Point for the start of the Line
-                            Vector3 temp = Hit.transform.gameObject.transform.position;
-                            //temp += Vector3.up;
-
-                            linePositions.Add(temp);
-                            //The second point is the same point at the moment
-                            linePositions.Add(temp);
-                            this.lineRenderer.SetPosition(0, linePositions[0]);
-                            this.lineRenderer.SetPosition(1, linePositions[1]);
-                        }
-                        else
-                        {
-                            //TODO: Hint that only a line can be drawn between already existing points
-                        }
-                    }
-
-                    break;
-            }
+          
+           CommunicationEvents.TriggerEvent.Invoke(Hit);
+              
         }
     }
 
-    //Updates the second-point of the Line when First Point was selected in LineMode
-    void UpdateLineRenderer(Vector3 currentPosition)
-    {
-        if (this.ActiveToolMode == ToolMode.CreateLineMode)
-        {
-            if (this.lineRendererActivated)
-            {
-                this.linePositions[1] = currentPosition;
-                this.lineRenderer.SetPosition(1, this.linePositions[1]);
-            }
-        }
-    }
 
     void CheckToolModeSelection() {
         if (Input.GetButtonDown("ToolMode")) {
diff --git a/Assets/ShinyThings.cs b/Assets/ShinyThings.cs
new file mode 100644
index 0000000000000000000000000000000000000000..655041131268dea93d62aeb5c910a5ab4ace682b
--- /dev/null
+++ b/Assets/ShinyThings.cs
@@ -0,0 +1,103 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class ShinyThings : MonoBehaviour
+{
+
+    public WorldCursor Cursor;
+    //Attributes for Highlighting of Facts when Mouse-Over
+    private string selectableTag = "Selectable";
+    private Transform lastFactSelection;
+
+    //Attributes for simulating the drawing of a line
+    public LineRenderer lineRenderer;
+    private List<Vector3> linePositions = new List<Vector3>();
+    private bool lineRendererActivated;
+    //Visual helpers
+
+    // Start is called before the first frame update
+    void Start()
+    {
+        if(Cursor == null)Cursor = GetComponent<WorldCursor>();
+    }
+
+    // Update is called once per frame
+    void Update()
+    {
+        //SELECTION-HIGHLIGHTING-PART
+        //Check if a Fact was Hit
+
+        RaycastHit Hit = Cursor.Hit;  
+
+        Transform selection = Hit.transform;
+
+        //Set the last Fact unselected
+        if (this.lastFactSelection != null)
+        {
+            //Invoke the EndHighlightEvent that will be handled in FactSpawner
+            CommunicationEvents.EndHighlightEvent.Invoke(this.lastFactSelection);
+            this.lastFactSelection = null;
+        }
+
+        //Set the Fact that was Hit as selected
+        if (selection.CompareTag(selectableTag))
+        {
+            //Invoke the HighlightEvent that will be handled in FactSpawner
+            this.lastFactSelection = selection;
+            CommunicationEvents.HighlightEvent.Invoke(selection);
+        }
+        //SELECTION-HIGHLIGHTING-PART-END
+    }
+
+    public void OnMouseOverFactEnd(Transform selection)
+    {
+        Renderer selectionRenderer;
+
+        if (selection != null)
+        {
+            selectionRenderer = selection.GetComponent<Renderer>();
+            if (selectionRenderer != null)
+            {
+                //Set the Material of the fact back to default
+                selectionRenderer.material = defaultMaterial;
+            }
+        }
+    }
+
+    public void OnMouseOverFact(Transform selection)
+    {
+        Renderer selectionRenderer;
+
+        selectionRenderer = selection.GetComponent<Renderer>();
+        if (selectionRenderer != null)
+        {
+            //Set the Material of the Fact, where the mouse is over, to a special one
+            selectionRenderer.material = highlightMaterial;
+        }
+    }
+
+
+    void DeactivateLineRenderer()
+    {
+        //Reset the first points
+        this.lineRenderer.SetPosition(0, Vector3.zero);
+        this.lineRenderer.SetPosition(1, Vector3.zero);
+        if (linePositions.Count > 0)
+            this.linePositions.Clear();
+        this.lineRendererActivated = false;
+    }
+    //Updates the second-point of the Line when First Point was selected in LineMode
+    void UpdateLineRenderer(Vector3 currentPosition)
+    {
+        if (this.ActiveToolMode == ToolMode.CreateLineMode)
+        {
+            if (this.lineRendererActivated)
+            {
+                this.linePositions[1] = currentPosition;
+                this.lineRenderer.SetPosition(1, this.linePositions[1]);
+            }
+        }
+    }
+
+}
diff --git a/Assets/ShinyThings.cs.meta b/Assets/ShinyThings.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..f52cff5f541b3608c139084c0c0805b95c67d5a1
--- /dev/null
+++ b/Assets/ShinyThings.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 1ed2627334ef0e44ebe98f8b9ce4bc25
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/TreeWorld.unity b/Assets/TreeWorld.unity
index 3b6983ea4c31d8e96dd1ebf94ff34d18d4ff994f..72bf4cc591b5d08e0b9b0ddb2617ff61ec190a28 100644
--- a/Assets/TreeWorld.unity
+++ b/Assets/TreeWorld.unity
@@ -1133,208 +1133,6 @@ MonoBehaviour:
   m_Script: {fileID: 11500000, guid: 5c41d44ed1851e14089a3b6e37cba740, type: 3}
   m_Name: 
   m_EditorClassIdentifier: 
-  Facts:
-  - 
-  - 
-  - 
-  - 
-  - 
-  - 
-  - 
-  - 
-  - 
-  - 
-  - 
-  - 
-  - 
-  - 
-  - 
-  - 
-  - 
-  - 
-  - 
-  - 
-  - 
-  - 
-  - 
-  - 
-  - 
-  - 
-  - 
-  - 
-  - 
-  - 
-  - 
-  - 
-  - 
-  - 
-  - 
-  - 
-  - 
-  - 
-  - 
-  - 
-  - 
-  - 
-  - 
-  - 
-  - 
-  - 
-  - 
-  - 
-  - 
-  - 
-  - 
-  - 
-  - 
-  - 
-  - 
-  - 
-  - 
-  - 
-  - 
-  - 
-  - 
-  - 
-  - 
-  - 
-  - 
-  - 
-  - 
-  - 
-  - 
-  - 
-  - 
-  - 
-  - 
-  - 
-  - 
-  - 
-  - 
-  - 
-  - 
-  - 
-  - 
-  - 
-  - 
-  - 
-  - 
-  - 
-  - 
-  - 
-  - 
-  - 
-  - 
-  - 
-  - 
-  - 
-  - 
-  - 
-  - 
-  - 
-  - 
-  - 
-  GameObjectFacts:
-  - {fileID: 0}
-  - {fileID: 0}
-  - {fileID: 0}
-  - {fileID: 0}
-  - {fileID: 0}
-  - {fileID: 0}
-  - {fileID: 0}
-  - {fileID: 0}
-  - {fileID: 0}
-  - {fileID: 0}
-  - {fileID: 0}
-  - {fileID: 0}
-  - {fileID: 0}
-  - {fileID: 0}
-  - {fileID: 0}
-  - {fileID: 0}
-  - {fileID: 0}
-  - {fileID: 0}
-  - {fileID: 0}
-  - {fileID: 0}
-  - {fileID: 0}
-  - {fileID: 0}
-  - {fileID: 0}
-  - {fileID: 0}
-  - {fileID: 0}
-  - {fileID: 0}
-  - {fileID: 0}
-  - {fileID: 0}
-  - {fileID: 0}
-  - {fileID: 0}
-  - {fileID: 0}
-  - {fileID: 0}
-  - {fileID: 0}
-  - {fileID: 0}
-  - {fileID: 0}
-  - {fileID: 0}
-  - {fileID: 0}
-  - {fileID: 0}
-  - {fileID: 0}
-  - {fileID: 0}
-  - {fileID: 0}
-  - {fileID: 0}
-  - {fileID: 0}
-  - {fileID: 0}
-  - {fileID: 0}
-  - {fileID: 0}
-  - {fileID: 0}
-  - {fileID: 0}
-  - {fileID: 0}
-  - {fileID: 0}
-  - {fileID: 0}
-  - {fileID: 0}
-  - {fileID: 0}
-  - {fileID: 0}
-  - {fileID: 0}
-  - {fileID: 0}
-  - {fileID: 0}
-  - {fileID: 0}
-  - {fileID: 0}
-  - {fileID: 0}
-  - {fileID: 0}
-  - {fileID: 0}
-  - {fileID: 0}
-  - {fileID: 0}
-  - {fileID: 0}
-  - {fileID: 0}
-  - {fileID: 0}
-  - {fileID: 0}
-  - {fileID: 0}
-  - {fileID: 0}
-  - {fileID: 0}
-  - {fileID: 0}
-  - {fileID: 0}
-  - {fileID: 0}
-  - {fileID: 0}
-  - {fileID: 0}
-  - {fileID: 0}
-  - {fileID: 0}
-  - {fileID: 0}
-  - {fileID: 0}
-  - {fileID: 0}
-  - {fileID: 0}
-  - {fileID: 0}
-  - {fileID: 0}
-  - {fileID: 0}
-  - {fileID: 0}
-  - {fileID: 0}
-  - {fileID: 0}
-  - {fileID: 0}
-  - {fileID: 0}
-  - {fileID: 0}
-  - {fileID: 0}
-  - {fileID: 0}
-  - {fileID: 0}
-  - {fileID: 0}
-  - {fileID: 0}
-  - {fileID: 0}
-  - {fileID: 0}
-  - {fileID: 0}
-  - {fileID: 0}
   defaultMaterial: {fileID: 2100000, guid: 8ae9adf4dc782964387385c1e8c0eb72, type: 2}
   highlightMaterial: {fileID: 2100000, guid: c7daa82e15f0cf04d92d0f41ce84f9df, type: 2}
   SmartMenu: {fileID: 5601740127768851631, guid: e693bf633c633d243b0254d117ec3893,
@@ -1434,6 +1232,30 @@ LineRenderer:
     generateLightingData: 0
   m_UseWorldSpace: 1
   m_Loop: 0
+--- !u!114 &1661088669
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1661088665}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 1ed2627334ef0e44ebe98f8b9ce4bc25, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+--- !u!114 &1661088670
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1661088665}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: c75823b1712c4914b987f0e1ba8a5cba, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
 --- !u!1 &1675643434
 GameObject:
   m_ObjectHideFlags: 0