diff --git a/Assets/Plugins/PluginAssembly.asmdef b/Assets/Plugins/PluginAssembly.asmdef
new file mode 100644
index 0000000000000000000000000000000000000000..d3861c77709c292766f8fe108751c02ad03bd8eb
--- /dev/null
+++ b/Assets/Plugins/PluginAssembly.asmdef
@@ -0,0 +1,14 @@
+{
+    "name": "PluginAssembly",
+    "rootNamespace": "",
+    "references": [],
+    "includePlatforms": [],
+    "excludePlatforms": [],
+    "allowUnsafeCode": true,
+    "overrideReferences": false,
+    "precompiledReferences": [],
+    "autoReferenced": true,
+    "defineConstraints": [],
+    "versionDefines": [],
+    "noEngineReferences": false
+}
\ No newline at end of file
diff --git a/Assets/Plugins/PluginAssembly.asmdef.meta b/Assets/Plugins/PluginAssembly.asmdef.meta
new file mode 100644
index 0000000000000000000000000000000000000000..dd16f9611c82642ca424044c5f5b0ad4c45e2f2e
--- /dev/null
+++ b/Assets/Plugins/PluginAssembly.asmdef.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 4db3019411610f640ae53ea9ba8dab0a
+AssemblyDefinitionImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Resources/Prefabs/UI/Facts/Factscreen.prefab b/Assets/Resources/Prefabs/UI/Facts/Factscreen.prefab
index 6d5da8be2f117f3d45b95b6d0f2ae2a5a1bac2af..83d0aba49e81111698827859f494a1fb85c02985 100644
--- a/Assets/Resources/Prefabs/UI/Facts/Factscreen.prefab
+++ b/Assets/Resources/Prefabs/UI/Facts/Factscreen.prefab
@@ -493,7 +493,7 @@ RectTransform:
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0, y: 1}
   m_AnchorMax: {x: 1, y: 1}
-  m_AnchoredPosition: {x: 0, y: -33793.79}
+  m_AnchoredPosition: {x: 0, y: -41183.812}
   m_SizeDelta: {x: 0, y: 0}
   m_Pivot: {x: 0.5, y: 1}
 --- !u!114 &8823539307371861913
diff --git a/Assets/ScriptableObjects/Gadgets/PointerDataContainerGadgetInit.asset b/Assets/ScriptableObjects/Gadgets/PointerDataContainerGadgetInit.asset
index a8e6e5eb35ef62d649f0a3e7e5bc33ed3f378b46..c9dd35f66c46667f799abbd56ce474c37095e089 100644
--- a/Assets/ScriptableObjects/Gadgets/PointerDataContainerGadgetInit.asset
+++ b/Assets/ScriptableObjects/Gadgets/PointerDataContainerGadgetInit.asset
@@ -20,7 +20,7 @@ MonoBehaviour:
   ButtonIndx: 1
   LayerHitMask:
     serializedVersion: 2
-    m_Bits: 1572913
+    m_Bits: 1581105
   SecondaryLayerMask:
     serializedVersion: 2
     m_Bits: 0
diff --git a/Assets/Scripts/InteractionEngine/FactHandling/FactObject.cs b/Assets/Scripts/InteractionEngine/FactHandling/FactObject.cs
index 039cd1189da79f818d8bf83403ef41dcfc119888..c4986953c485043159a46a6b86c1fddad106d919 100644
--- a/Assets/Scripts/InteractionEngine/FactHandling/FactObject.cs
+++ b/Assets/Scripts/InteractionEngine/FactHandling/FactObject.cs
@@ -162,7 +162,7 @@ public void CoroutineCascadeForMeAndChildrenAllRenderer(Func<FactObject, Rendere
 
         CascadeForMeAndChildren((FactObject fo) =>
             fo.ForAllRenderer((Renderer ren) =>
-                StartCoroutine(func(fo, ren))
+                this.StartCoroutine(func(fo, ren))
         ));
     }
 }
diff --git a/Assets/Scripts/InteractionEngine/Gadgets/Remover.cs b/Assets/Scripts/InteractionEngine/Gadgets/Remover.cs
index 710785eebce538547c66675e47c2c437dda99947..359c463eded1aa02e5e29785976cfeefae6a10e3 100644
--- a/Assets/Scripts/InteractionEngine/Gadgets/Remover.cs
+++ b/Assets/Scripts/InteractionEngine/Gadgets/Remover.cs
@@ -1,5 +1,6 @@
 using System.Collections;
 using System.Collections.Generic;
+using System.Linq;
 using UnityEngine;
 using static CommunicationEvents;
 
@@ -12,13 +13,17 @@ public class Remover : Gadget
 
     public override void _Hit(RaycastHit[] hit)
     {
-        // It's probably better to keep this only on the first hit and not multiple hits
-        string hid = hit[0].transform.GetComponent<FactObject>()?.URI;
-        if (hid == null)
-            return;
+        bool samestep = false;
+        foreach (string uri in hit.Select(h => h.transform.GetComponent<FactObject>()?.URI))
+        {
+            if(uri == null)
+                continue;
 
-        Workflow.Add(hid);
-        StageStatic.stage.factState.Remove(Workflow[0], samestep: false, gadget: this);
+            Workflow.Add(uri);
+            StageStatic.stage.factState.Remove(Workflow.Last(), samestep, gadget: this);
+
+            samestep = true;
+        }
 
         ResetGadget();
     }
diff --git a/Assets/Scripts/InteractionEngine/ShinyThings.cs b/Assets/Scripts/InteractionEngine/ShinyThings.cs
index f3bbe29d3bdf50ca7017dc663a28571256660951..4a10ae48c706306d1bb8d6845d62a5563bf6c690 100644
--- a/Assets/Scripts/InteractionEngine/ShinyThings.cs
+++ b/Assets/Scripts/InteractionEngine/ShinyThings.cs
@@ -7,7 +7,7 @@ public class ShinyThings : MonoBehaviour
 {
     public WorldCursor Cursor;
     //Attributes for Highlighting of Facts when Mouse-Over
-    private FactObject lastFactSelection;
+    private List<FactObject> LastFactSelection = new();
 
     //Variables for Pushout-Highlighting
     private static float timerDuration = 2.5f;
@@ -34,10 +34,7 @@ private void Awake()
         CommunicationEvents.AnimateExistingAsSolutionEvent.AddListener(HighlightWithFireworks);
 
         rain = rain_wait = IEnumeratorExtensions.yield_break;
-    }
 
-    public void Start()
-    {
         if (Cursor == null)
             Cursor = GetComponent<WorldCursor>();
 
@@ -49,30 +46,30 @@ public void Start()
 
     public void Update()
     {
-        foreach(var hit in Cursor.Hits)
-            HighlightCurserHit(hit);
+        if (Cursor?.Hits != null)
+            HighlightCurserHit(Cursor.Hits);
     }
 
-    private void HighlightCurserHit(RaycastHit hit)
+    private void HighlightCurserHit(RaycastHit[] hits)
     {
-        FactObject selected_fact_obj = hit.transform?.GetComponentInChildren<FactObject>();
+        List<FactObject> selected_fact_objs = hits
+            .Select(h => h.transform?.GetComponentInChildren<FactObject>())
+            .Where(f => f != null)
+            .ToList();
 
-        //Set the last Fact unselected
-        if (this.lastFactSelection != null
-         && (selected_fact_obj == null || this.lastFactSelection != selected_fact_obj))
-        {
-            ApplyMaterial(lastFactSelection, lastFactSelection.Default);
-            this.lastFactSelection = null;
-        }
+        //Set the last Facts unselected
+        foreach (var lastFact in LastFactSelection)
+            if (lastFact != null
+             && !selected_fact_objs.Contains(lastFact))
+                ApplyMaterial(lastFact, lastFact.Default);
 
-        //Set the Fact that was Hit as selected
-        if (selected_fact_obj != null && hit.transform != null
-            && (hit.transform.CompareTag("Selectable") || hit.transform.CompareTag("SnapZone"))
-            && (this.lastFactSelection == null || this.lastFactSelection != selected_fact_obj))
-        {
-            ApplyMaterial(selected_fact_obj, selected_fact_obj.Selected);
-            this.lastFactSelection = selected_fact_obj;
-        }
+        //Set the Facts that were Hit as selected
+        foreach (var fact_obj in selected_fact_objs)
+            if (!LastFactSelection.Contains(fact_obj))
+                ApplyMaterial(fact_obj, fact_obj.Selected);
+
+        LastFactSelection = selected_fact_objs;
+        return;
 
         void ApplyMaterial(FactObject root, Material new_mat) =>
             root.CoroutineCascadeForMeAndChildrenAllRenderer(
@@ -109,7 +106,7 @@ public void HighlightWithFireworks(Fact fact, FactObject.FactMaterials mat)
         IEnumerator BlossomAndDie()
         {
             GameObject firework = GameObject.Instantiate
-                ( Fireworks_Animation
+                (Fireworks_Animation
                 , fact.Representation.transform
                 );
 
diff --git a/Assets/Scripts/InteractionEngine/WorldCursor.cs b/Assets/Scripts/InteractionEngine/WorldCursor.cs
index 96eefbace24c60009ea1da5b04ea2bc8bbf943e3..e90f4caf0b7466f69b633ea449a0b192ac7807da 100644
--- a/Assets/Scripts/InteractionEngine/WorldCursor.cs
+++ b/Assets/Scripts/InteractionEngine/WorldCursor.cs
@@ -11,7 +11,7 @@ public class WorldCursor : MonoBehaviour
     // TODO experimentell for multiple hits
     public RaycastHit[] Hits;
 
-    public float CollisionDistance = 0.1f;
+    public float IntersectionDistance = 0.1f;
 
     public string deactivateSnapKey;
     private Camera Cam;
@@ -118,9 +118,15 @@ void Update()
             break; // we had at least 1 succesfull case
         }
 
-        if (i + 1 < Hits.Length
-         && Hits[i + 1].distance - Hits[i + 0].distance < CollisionDistance)
-        { // we have two objects intersecting
+        if (i == Hits.Length)
+            return; // no valid Hit
+
+        Hits = Hits.Skip(i)
+               .TakeWhile(h => h.distance - Hits[i].distance < IntersectionDistance)
+               .ToArray();
+
+        if (Hits.Length > 1)
+        { // we have two or more objects intersecting
             if (facts[i + 0] is RayFact rayFact1
              && facts[i + 1] is RayFact rayFact2)
             {
@@ -128,21 +134,14 @@ void Update()
                     , rayFact2.Point1.Point, rayFact2.Dir
                     , rayFact1.Point1.Point, rayFact1.Dir))
                 {
-                    Hits[i].point = intersectionPoint;
+                    Hits[i + 0].point = intersectionPoint;
+                    Hits[i + 1].point = intersectionPoint;
                 }
             }
 
             //TODO: check for other types of intersection. Future Work
         }
 
-        int nr_hits = Hits.Length - i;
-        if (i == Hits.Length)
-        {
-            i = 0;
-            nr_hits = 1;
-        }
-        Hits = Hits.Slice(i, nr_hits).ToArray();
-
         transform.up = Hits[0].normal;
         transform.position = Hits[0].point + .01f * Hits[0].normal;
 
diff --git a/Assets/Scripts/UI/MainMenue/MenueLoader.cs b/Assets/Scripts/UI/MainMenue/MenueLoader.cs
index 2a661342d8ed4fae3f5eca42827e2fc370b7ec54..54e60417ef9f8326f9fd8c7fd28d89d68ccc51b6 100644
--- a/Assets/Scripts/UI/MainMenue/MenueLoader.cs
+++ b/Assets/Scripts/UI/MainMenue/MenueLoader.cs
@@ -33,7 +33,7 @@ public void RevertMode()
     /// <param name="select">Page to switch to</param>
     public void SetMode(int select)
     {
-        gameObject.SetActiveAllChildren(false);
+        Pages.SetActiveAllChildren(false);
 
         mode_last = mode;
         mode = select;
diff --git a/UserSettings/EditorUserSettings.asset b/UserSettings/EditorUserSettings.asset
index ebc89c2c6e854f451500f10d795f696d9cc45664..dc93d9123a6d75673f0833bc7e502b6f7fe387cf 100644
--- a/UserSettings/EditorUserSettings.asset
+++ b/UserSettings/EditorUserSettings.asset
@@ -30,10 +30,10 @@ EditorUserSettings:
       value: 00540c020302515f0b0f5f2711265c44171519797e7c7463787d4d63e1b8303c
       flags: 0
     RecentlyUsedSceneGuid-8:
-      value: 57505505560608585a56557116730644404e4d7b7c7b7562787e4f66e4b1313e
+      value: 0709560454055c0d0c5e5c2444740b4413154a72792d22627c714963e0b6373d
       flags: 0
     RecentlyUsedSceneGuid-9:
-      value: 0709560454055c0d0c5e5c2444740b4413154a72792d22627c714963e0b6373d
+      value: 57505505560608585a56557116730644404e4d7b7c7b7562787e4f66e4b1313e
       flags: 0
     RecentlyUsedScenePath-0:
       value: 22424703114646680e0b0227036c681f041b1c39631c3435281e1221eee47a2decee22f0