diff --git a/Assets/Resources/Prefabs/UI/Ingame/GadgetCanvas.prefab b/Assets/Resources/Prefabs/UI/Ingame/GadgetCanvas.prefab
index 1f19e8ec9f0683a3e63136b9b21a5ea495b2d81a..d587dedb6ae3175b173545b76f0e3025a5b0f1db 100644
--- a/Assets/Resources/Prefabs/UI/Ingame/GadgetCanvas.prefab
+++ b/Assets/Resources/Prefabs/UI/Ingame/GadgetCanvas.prefab
@@ -186,7 +186,7 @@ MonoBehaviour:
   m_GameObject: {fileID: 5250976265380185965}
   m_Enabled: 1
   m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: f6c56cda17d48fa47a0c06cea90accba, type: 3}
+  m_Script: {fileID: 11500000, guid: dadf4ac08a30dfa43aa57ac646a68767, type: 3}
   m_Name: 
   m_EditorClassIdentifier: 
   _GadgetButton: {fileID: 5345241908758045532, guid: 4804ff343c7a9724abfb4587ac7da08a,
diff --git a/Assets/Scripts/GenerateDemoFiles.cs b/Assets/Scripts/GenerateDemoFiles.cs
index cf03341e85ab541acec74332a441e7993a9b3a02..16e6f4813b8423af5a8eb4102402c873703104d5 100644
--- a/Assets/Scripts/GenerateDemoFiles.cs
+++ b/Assets/Scripts/GenerateDemoFiles.cs
@@ -9,14 +9,19 @@ public class GenerateDemoFiles
     public static void GenerateAll()
     {
         if (!firstcall) return;
-        firstcall = false;
+        if (GameObject.FindObjectOfType<GadgetBehaviour>(true) == null) {
+            Debug.LogError("Cannot GenerateDemoFiles without populated GadgetManager");
+            return;
+        }
 
         Debug.LogWarning("Generating and Overwriting Stage Files");
-        GenerateDemoA();
-        GenerateDemoB();
+        firstcall = false;
+
+        GenerateTreeStage();
+        GenerateRiverStage();
     }
 
-    public static void GenerateDemoA()
+    public static void GenerateTreeStage()
     {
         // Params
         float minimalSolutionHight = 6;
@@ -57,15 +62,16 @@ public static void GenerateDemoA()
             new List<SolutionOrganizer.SubSolution>
             { new SolutionOrganizer.SubSolution(new HashSet<string> { target_Id }, null, null, new LineFactHightDirectionComparer()) };
 
-        // Set Gadgets
+        // Set Gadgets/ Scrolls
         StageStatic.stage.AllowedGadgets = null;
+        StageStatic.stage.AllowedScrolls = null;
 
         // Save
         StageStatic.SetMode(StageStatic.Mode.Create);
         StageStatic.stage.store();
     }
 
-    public static void GenerateDemoB()
+    public static void GenerateRiverStage()
     {
         // Params
         float minimalSolutionHight = 6;
@@ -109,8 +115,9 @@ public static void GenerateDemoB()
                 new SolutionOrganizer.SubSolution(null, new List<int> { 1 }, new List<int> { 0 }, new LineFactHightComparer()),
             };
 
-        // Set Gadgets
+        // Set Gadgets/ Scrolls
         StageStatic.stage.AllowedGadgets = new() { new Pointer(), new Tape(), new AngleTool(), new LineTool(), new LotTool(), new Pendulum(), new Remover() };
+        StageStatic.stage.AllowedScrolls = new() { "OppositeLen" };
 
         // Save
         StageStatic.SetMode(StageStatic.Mode.Create);
diff --git a/Assets/Scripts/InteractionEngine/FactHandling/FactManager.cs b/Assets/Scripts/InteractionEngine/FactHandling/FactManager.cs
index dec8045d6b02a29daed04ce7d63bd97b4b3cac20..234273d9e758e4104a635ac4e70a98060aa677e7 100644
--- a/Assets/Scripts/InteractionEngine/FactHandling/FactManager.cs
+++ b/Assets/Scripts/InteractionEngine/FactHandling/FactManager.cs
@@ -21,7 +21,7 @@ public static Fact AddFactIfNotFound(Fact fact, out bool exists, bool samestep,
         return StageStatic.stage.factState[
             StageStatic.stage.factState.Add(
                 fact, out exists, samestep
-                , gadget ?? (scroll_label == null ? GadgetManager.ActiveGadget : null)
+                , gadget ?? (scroll_label == null ? GadgetBehaviour.ActiveGadget : null)
                 , scroll_label
             )];
     }
diff --git a/Assets/Scripts/InteractionEngine/Gadgets/AngleTool.cs b/Assets/Scripts/InteractionEngine/Gadgets/AngleTool.cs
index 330f60ee99560fdc3b78b1d76f3aa3ebefb4f6ee..190a32b5689e500cfe3c83b6bc8f4207e57a7112 100644
--- a/Assets/Scripts/InteractionEngine/Gadgets/AngleTool.cs
+++ b/Assets/Scripts/InteractionEngine/Gadgets/AngleTool.cs
@@ -56,10 +56,10 @@ protected override void _ResetGadget()
     protected override void _ActivateLineDrawing()
     {
         //In AngleMode with 3 Points we want to draw nearly a rectangle so we add a startPoint and an Endpoint to this preview
-        GadgetManager.LineRenderer.positionCount = curveDrawingVertexCount + 2;
+        GadgetBehaviour.LineRenderer.positionCount = curveDrawingVertexCount + 2;
 
-        GadgetManager.LineRenderer.startWidth = 0.05f;
-        GadgetManager.LineRenderer.endWidth = 0.05f;
+        GadgetBehaviour.LineRenderer.startWidth = 0.05f;
+        GadgetBehaviour.LineRenderer.endWidth = 0.05f;
 
         curveRadius = 0.3f * (AnglePoints[0].Point - AnglePoints[1].Point).magnitude;
     }
@@ -69,10 +69,10 @@ protected override void _UpdateLineDrawing()
         //Start: AngleMiddlePoint -> FirstPoint of Curve
         SetPosition(0, AnglePoints[1].Point);
         //End: LastPoint of Curve -> AngleMiddlePoint
-        SetPosition(GadgetManager.LineRenderer.positionCount - 1, AnglePoints[1].Point);
+        SetPosition(GadgetBehaviour.LineRenderer.positionCount - 1, AnglePoints[1].Point);
 
         //Circle: p + r(cost)v1 + r(sint)v2: t real, v1&v2 unit orthogonal, r radius
-        Vector3 v1 = (GadgetManager.Cursor.transform.position - AnglePoints[1].Point).normalized;
+        Vector3 v1 = (GadgetBehaviour.Cursor.transform.position - AnglePoints[1].Point).normalized;
         Vector3 _v2 = (AnglePoints[0].Point - AnglePoints[1].Point);
         Vector3 v2 = (_v2 - Math3d.ProjectPointOnLine(Vector3.zero, v1, _v2)).normalized;
         float increment = 2 * Mathf.PI / (curveDrawingVertexCount-1) * Vector3.Angle(v1, _v2) / 360;
diff --git a/Assets/Scripts/InteractionEngine/Gadgets/Gadget.cs b/Assets/Scripts/InteractionEngine/Gadgets/Gadget.cs
index ae69b469911ce0b2b701307f0ba83567ddd17fab..f4aadcf6a9c6af13baabaea44af6766d4b094aaf 100644
--- a/Assets/Scripts/InteractionEngine/Gadgets/Gadget.cs
+++ b/Assets/Scripts/InteractionEngine/Gadgets/Gadget.cs
@@ -92,7 +92,7 @@ public Gadget()
     public void Init(bool overrite)
     {
         if ( init_success
-          || GadgetManager.DataContainerGadgetDict == null)
+          || GadgetBehaviour.DataContainerGadgetDict == null)
             return;
 
         Type this_type = this.GetType();
@@ -103,12 +103,12 @@ public void Init(bool overrite)
         }
         var GadgetID = GadgetTypeToIDs[this_type];
 
-        if (!GadgetManager.DataContainerGadgetDict.ContainsKey(GadgetID))
+        if (!GadgetBehaviour.DataContainerGadgetDict.ContainsKey(GadgetID))
         {
             Debug.LogError("No " + GadgetID.ToString() + "in assigned " + typeof(DataContainerGadgetCollection).Name + "!");
             return;
         }
-        var data_cache = GadgetManager.DataContainerGadgetDict[GadgetID];
+        var data_cache = GadgetBehaviour.DataContainerGadgetDict[GadgetID];
 
         if (overrite || Rank == int.MinValue)
             Rank = data_cache.Rank;
@@ -124,12 +124,12 @@ public void Init(bool overrite)
             SecondaryLayerMask = data_cache.SecondaryLayerMask;
         if (overrite || ButtonIndx < 0)
             ButtonIndx = 
-                data_cache.ButtonIndx < GadgetManager.ButtonSprites.Length
+                data_cache.ButtonIndx < GadgetBehaviour.ButtonSprites.Length
              && data_cache.ButtonIndx >= 0
                 ? data_cache.ButtonIndx : 0;
         if (overrite || MaterialIndx < 0)
             MaterialIndx = 
-                data_cache.MaterialIndx < GadgetManager.Materials.Length 
+                data_cache.MaterialIndx < GadgetBehaviour.Materials.Length 
              && data_cache.MaterialIndx >= 0
                 ? data_cache.MaterialIndx : 0;
 
@@ -144,8 +144,8 @@ public void Awake()
 
     public void Enable()
     {
-        GadgetManager.Cursor.setLayerMask(~IgnoreLayerMask.value);
-        GadgetManager.Cursor.MaxRange = MaxRange;
+        GadgetBehaviour.Cursor.setLayerMask(~IgnoreLayerMask.value);
+        GadgetBehaviour.Cursor.MaxRange = MaxRange;
 
         ResetGadget();
         _Enable();
@@ -162,7 +162,7 @@ public void Update()
         if (!CommunicationEvents.GadgetCanBeUsed)
             return;
 
-        if (GadgetManager.LineRenderer.enabled)
+        if (GadgetBehaviour.LineRenderer.enabled)
             UpdateLineDrawing();
 
         _Update();
@@ -190,16 +190,16 @@ public virtual void _Hit(RaycastHit hit) { }
 
     protected void ActivateLineDrawing()
     {
-        GadgetManager.LineRenderer.enabled = true;
-        GadgetManager.LineRenderer.material = GadgetManager.Materials[MaterialIndx];
+        GadgetBehaviour.LineRenderer.enabled = true;
+        GadgetBehaviour.LineRenderer.material = GadgetBehaviour.Materials[MaterialIndx];
 
         _ActivateLineDrawing();
     }
 
     protected void DeactivateLineDrawing()
     {
-        GadgetManager.LineRenderer.positionCount = 0;
-        GadgetManager.LineRenderer.enabled = false;
+        GadgetBehaviour.LineRenderer.positionCount = 0;
+        GadgetBehaviour.LineRenderer.enabled = false;
 
         _DeactivateLineDrawing();
     }
@@ -214,9 +214,9 @@ protected virtual void _DeactivateLineDrawing() { }
     protected virtual void _UpdateLineDrawing() { }
 
     protected Vector3 GetPosition(int i)
-        => GadgetManager.LineRenderer.GetPosition(i);
+        => GadgetBehaviour.LineRenderer.GetPosition(i);
     protected void SetPosition(int i, Vector3 v)
-        => GadgetManager.LineRenderer.SetPosition(i, v);
+        => GadgetBehaviour.LineRenderer.SetPosition(i, v);
 
     public void ResetGadget()
     {
diff --git a/Assets/Scripts/InteractionEngine/Gadgets/GadgetManager.cs b/Assets/Scripts/InteractionEngine/Gadgets/GadgetBehaviour.cs
similarity index 89%
rename from Assets/Scripts/InteractionEngine/Gadgets/GadgetManager.cs
rename to Assets/Scripts/InteractionEngine/Gadgets/GadgetBehaviour.cs
index 04dd41f3f7736eb417fae2f0d0c4a6dffdf0cd55..feb0f1c9969631efb506d73e3d21cb882a873eda 100644
--- a/Assets/Scripts/InteractionEngine/Gadgets/GadgetManager.cs
+++ b/Assets/Scripts/InteractionEngine/Gadgets/GadgetBehaviour.cs
@@ -7,10 +7,10 @@
 using UnityEngine.UI;
 
 
-public class GadgetManager : MonoBehaviour, ISerializationCallbackReceiver
+public class GadgetBehaviour : MonoBehaviour, ISerializationCallbackReceiver
 {
     // could be worked around of. But as long as not needed: this is better
-    public static GadgetManager Singelton = null;
+    public static GadgetBehaviour Singelton = null;
 
     /// <summary>Which cursor to use</summary>
     /// <remarks>When not set in Inspector, will be searching for any <see cref="WorldCursor"/>.</remarks>
@@ -88,6 +88,16 @@ private void Awake()
 
     void Start()
     {
+        void CreateButton(int gid)
+        {
+            GameObject button = GameObject.Instantiate(GadgetButton, parent: ParentMe.transform);
+
+            button.GetComponent<Image>().sprite = ButtonSprites[gadgets[gid].ButtonIndx];
+            var cache = gameObject.transform.parent.parent as RectTransform;
+            (buttons[gid] = button.GetComponent<Button>())
+                .onClick.AddListener(() => ActivateGadget(gid));
+        }
+
         gadgets = (
             StageStatic.stage.AllowedGadgets == null
             || StageStatic.stage.AllowedGadgets.Count == 0
@@ -146,17 +156,6 @@ void OnEnable()
         gadgets[ActiveGadgetInd].Enable();
     }
 
-    private void CreateButton(int gid)
-    {
-        GameObject button = GameObject.Instantiate(GadgetButton);
-        button.transform.SetParent(ParentMe.transform);
-
-        button.GetComponent<Image>().sprite = ButtonSprites[gadgets[gid].ButtonIndx];
-        var cache = gameObject.transform.parent.parent as RectTransform;
-        (buttons[gid] = button.GetComponent<Button>())
-            .onClick.AddListener(() => ActivateGadget(gid));
-    }
-
     public static void ActivateGadget(int gid)
     {
         ParentMe.SetActive(true);
diff --git a/Assets/Scripts/InteractionEngine/Gadgets/GadgetManager.cs.meta b/Assets/Scripts/InteractionEngine/Gadgets/GadgetBehaviour.cs.meta
similarity index 83%
rename from Assets/Scripts/InteractionEngine/Gadgets/GadgetManager.cs.meta
rename to Assets/Scripts/InteractionEngine/Gadgets/GadgetBehaviour.cs.meta
index 8a20e777ad8cfa0232ff46796c366feda41d2605..4ea57ac7c4f376f9f20023a56844dc7f897de67c 100644
--- a/Assets/Scripts/InteractionEngine/Gadgets/GadgetManager.cs.meta
+++ b/Assets/Scripts/InteractionEngine/Gadgets/GadgetBehaviour.cs.meta
@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: f6c56cda17d48fa47a0c06cea90accba
+guid: dadf4ac08a30dfa43aa57ac646a68767
 MonoImporter:
   externalObjects: {}
   serializedVersion: 2
diff --git a/Assets/Scripts/InteractionEngine/Gadgets/LineTool.cs b/Assets/Scripts/InteractionEngine/Gadgets/LineTool.cs
index d5e8aa449c9eef94c1ef824227c42419cf15871f..b6c879946a11f4debc91e17c383569a3ccbbf001 100644
--- a/Assets/Scripts/InteractionEngine/Gadgets/LineTool.cs
+++ b/Assets/Scripts/InteractionEngine/Gadgets/LineTool.cs
@@ -46,11 +46,11 @@ protected override void _ResetGadget()
 
     protected override void _ActivateLineDrawing()
     {
-        GadgetManager.LineRenderer.enabled = true;
-        GadgetManager.LineRenderer.positionCount = 2;
+        GadgetBehaviour.LineRenderer.enabled = true;
+        GadgetBehaviour.LineRenderer.positionCount = 2;
 
-        GadgetManager.LineRenderer.startWidth = 0.095f;
-        GadgetManager.LineRenderer.endWidth = 0.095f;
+        GadgetBehaviour.LineRenderer.startWidth = 0.095f;
+        GadgetBehaviour.LineRenderer.endWidth = 0.095f;
         //Add the position of the Fact for the start of the Line
         SetPosition(0, LineModeFirstPointSelected.Representation.transform.position);
         //The second point is the same point at the moment
@@ -60,6 +60,6 @@ protected override void _ActivateLineDrawing()
     //Updates the second-point of the Line when First Point was selected in LineMode
     protected override void _UpdateLineDrawing()
     {
-        SetPosition(1, GadgetManager.Cursor.transform.position);
+        SetPosition(1, GadgetBehaviour.Cursor.transform.position);
     }
 }
diff --git a/Assets/Scripts/InteractionEngine/Gadgets/LotTool.cs b/Assets/Scripts/InteractionEngine/Gadgets/LotTool.cs
index 0727a40f460ae92abc90dcb3e43e8814af060b22..358479644c384c6a0890e053bad4445da72cd6b8 100644
--- a/Assets/Scripts/InteractionEngine/Gadgets/LotTool.cs
+++ b/Assets/Scripts/InteractionEngine/Gadgets/LotTool.cs
@@ -102,13 +102,13 @@ protected override void _ResetGadget()
 
     protected override void _ActivateLineDrawing()
     {
-        GadgetManager.LineRenderer.positionCount = 3;
+        GadgetBehaviour.LineRenderer.positionCount = 3;
 
-        GadgetManager.LineRenderer.startWidth = 0.095f;
-        GadgetManager.LineRenderer.endWidth = 0.095f;
+        GadgetBehaviour.LineRenderer.startWidth = 0.095f;
+        GadgetBehaviour.LineRenderer.endWidth = 0.095f;
 
         //start at curser
-        SetPosition(0, GadgetManager.Cursor.transform.position);
+        SetPosition(0, GadgetBehaviour.Cursor.transform.position);
         //Project curser perpendicular on Line for intersection-point
         SetPosition(1, Math3d.ProjectPointOnLine(LotModeLinePointA.Point, LotModeLineSelected.Dir, GetPosition(0)));
         //end at Point on the line (i.c.o. projection beeing outside a finite line)
@@ -121,11 +121,11 @@ protected override void _UpdateLineDrawing()
         if (LotModeIsPointSelected)
         {
             SetPosition(1, LotModeIntersectionPoint.Point);
-            SetPosition(0, Math3d.ProjectPointOnLine(GadgetManager.Cursor.transform.position, LotModeLineSelected.Dir, GetPosition(1)));
+            SetPosition(0, Math3d.ProjectPointOnLine(GadgetBehaviour.Cursor.transform.position, LotModeLineSelected.Dir, GetPosition(1)));
         }
         else
         {
-            SetPosition(0, GadgetManager.Cursor.transform.position);
+            SetPosition(0, GadgetBehaviour.Cursor.transform.position);
             SetPosition(1, Math3d.ProjectPointOnLine(LotModeLinePointA.Point, LotModeLineSelected.Dir, GetPosition(0)));
         }
     }
diff --git a/Assets/Scripts/InteractionEngine/Gadgets/Pendulum.cs b/Assets/Scripts/InteractionEngine/Gadgets/Pendulum.cs
index 1d1f6e3e4fec70d2697588e00e46ce4cd452e296..db62f8b9cb1b79af8a43f50d8521111bd25ba496 100644
--- a/Assets/Scripts/InteractionEngine/Gadgets/Pendulum.cs
+++ b/Assets/Scripts/InteractionEngine/Gadgets/Pendulum.cs
@@ -31,16 +31,16 @@ public override void _Hit(RaycastHit hit)
 
     protected override void _ActivateLineDrawing()
     {
-        GadgetManager.LineRenderer.positionCount = 2;
+        GadgetBehaviour.LineRenderer.positionCount = 2;
 
-        GadgetManager.LineRenderer.startWidth = 0.095f;
-        GadgetManager.LineRenderer.endWidth = 0.095f;
+        GadgetBehaviour.LineRenderer.startWidth = 0.095f;
+        GadgetBehaviour.LineRenderer.endWidth = 0.095f;
     }
 
     //Updates the points of the Lines when baseLine was selected in LineMode
     protected override void _UpdateLineDrawing()
     {
-        SetPosition(0, GadgetManager.Cursor.transform.position);
+        SetPosition(0, GadgetBehaviour.Cursor.transform.position);
 
         //Raycast downwoard
         if (Physics.Raycast(GetPosition(0), Vector3.down, out RaycastHit ground, Mathf.Infinity, this.SecondaryLayerMask.value))
diff --git a/Assets/Scripts/InteractionEngine/Gadgets/PoleTool.cs b/Assets/Scripts/InteractionEngine/Gadgets/PoleTool.cs
index ef8c86868634c706c375f4644e3dc64e1d07cefa..644e3d16dbc7c79a3658878c973d1a972bf0584f 100644
--- a/Assets/Scripts/InteractionEngine/Gadgets/PoleTool.cs
+++ b/Assets/Scripts/InteractionEngine/Gadgets/PoleTool.cs
@@ -20,7 +20,7 @@ public override void _Enable()
     public override void _Hit(RaycastHit hit)
     {
         if (!Physics.Raycast(
-                GadgetManager.Cursor.transform.position + Vector3.up * (float)Math3d.vectorPrecission
+                GadgetBehaviour.Cursor.transform.position + Vector3.up * (float)Math3d.vectorPrecission
                 , Vector3.down, MaxHeight + (float)Math3d.vectorPrecission
                 , LayerMask.GetMask(new string[]{"Default", "Tree"})))
             return;
@@ -40,16 +40,16 @@ public override void _Hit(RaycastHit hit)
 
     protected override void _ActivateLineDrawing()
     {
-        GadgetManager.LineRenderer.positionCount = 2;
+        GadgetBehaviour.LineRenderer.positionCount = 2;
 
-        GadgetManager.LineRenderer.startWidth = 0.095f;
-        GadgetManager.LineRenderer.endWidth = 0.095f;
+        GadgetBehaviour.LineRenderer.startWidth = 0.095f;
+        GadgetBehaviour.LineRenderer.endWidth = 0.095f;
     }
 
     //Updates the points of the Lines when baseLine was selected in LineMode
     protected override void _UpdateLineDrawing()
     {
-        SetPosition(0, GadgetManager.Cursor.transform.position);
+        SetPosition(0, GadgetBehaviour.Cursor.transform.position);
 
         //Raycast upwoard
         if (Physics.Raycast(GetPosition(0), Vector3.up, out RaycastHit ceiling, poleHeight, this.SecondaryLayerMask.value))
diff --git a/Assets/Scripts/InteractionEngine/Gadgets/Tape.cs b/Assets/Scripts/InteractionEngine/Gadgets/Tape.cs
index 44dfccb89633174d50e2ead9fbd47996c9dcac9d..19898d6b7bbcd74443e79ea587f382bade373d3c 100644
--- a/Assets/Scripts/InteractionEngine/Gadgets/Tape.cs
+++ b/Assets/Scripts/InteractionEngine/Gadgets/Tape.cs
@@ -45,10 +45,10 @@ protected override void _ResetGadget()
 
     protected override void _ActivateLineDrawing()
     {
-        GadgetManager.LineRenderer.positionCount = 2;
+        GadgetBehaviour.LineRenderer.positionCount = 2;
 
-        GadgetManager.LineRenderer.startWidth = 0.095f;
-        GadgetManager.LineRenderer.endWidth = 0.095f;
+        GadgetBehaviour.LineRenderer.startWidth = 0.095f;
+        GadgetBehaviour.LineRenderer.endWidth = 0.095f;
         //Add the position of the Fact for the start of the Line
         SetPosition(0, TapeModeFirstPointSelected.Representation.transform.position);
         //The second point is the same point at the moment
@@ -58,6 +58,6 @@ protected override void _ActivateLineDrawing()
     //Updates the second-point of the Line when First Point was selected in LineMode
     protected override void _UpdateLineDrawing()
     {
-        SetPosition(1, GadgetManager.Cursor.transform.position);
+        SetPosition(1, GadgetBehaviour.Cursor.transform.position);
     }
 }
\ No newline at end of file
diff --git a/Assets/Scripts/InteractionEngine/ToolModeText.cs b/Assets/Scripts/InteractionEngine/ToolModeText.cs
index 3d8c8b08b9fb41ab06604f822f485dc46b6b72f7..f1728cf3892b56eeb9d6be912d4fa42ebabf587a 100644
--- a/Assets/Scripts/InteractionEngine/ToolModeText.cs
+++ b/Assets/Scripts/InteractionEngine/ToolModeText.cs
@@ -11,6 +11,6 @@ void Start()
     void OnToolModeChanged(int id)
     {
         //When ToolMode changes: Change Text of active gadget
-        gameObject.GetComponentInChildren<UnityEngine.UI.Text>().text = GadgetManager.gadgets[id].UiName;
+        gameObject.GetComponentInChildren<UnityEngine.UI.Text>().text = GadgetBehaviour.gadgets[id].UiName;
     }
 }
diff --git a/Assets/Scripts/InteractionEngine/WorldCursor.cs b/Assets/Scripts/InteractionEngine/WorldCursor.cs
index c34a6e4003bd832c22b8a7db1eb786ce6aff5495..0432bef8116f4d772436b0a7d4162d753cc8e546 100644
--- a/Assets/Scripts/InteractionEngine/WorldCursor.cs
+++ b/Assets/Scripts/InteractionEngine/WorldCursor.cs
@@ -5,7 +5,7 @@
 using UnityEngine;
 using UnityEngine.Events;
 using UnityEngine.EventSystems;
-using static GadgetManager;
+using static GadgetBehaviour;
 using UnityEngine.InputSystem;
 using static UIconfig;
 
@@ -171,7 +171,7 @@ void CheckMouseButtons1(bool OnSnap = false, bool onLine = false)
             {
                 CommunicationEvents.TriggerEvent.Invoke(Hit);
             }
-            else if (GadgetManager.ActiveGadget is Pointer)
+            else if (GadgetBehaviour.ActiveGadget is Pointer)
             {
                 if (!onLine) Hit.collider.enabled = false;
                 CommunicationEvents.TriggerEvent.Invoke(Hit);
diff --git a/Assets/Scripts/InventoryStuff/DisplayScrolls.cs b/Assets/Scripts/InventoryStuff/DisplayScrolls.cs
index ae6a58960e4f9fcd1a446c3ac362f91aef3b1825..5de2ac5208f084bad8e370515d5aa2af75983773 100644
--- a/Assets/Scripts/InventoryStuff/DisplayScrolls.cs
+++ b/Assets/Scripts/InventoryStuff/DisplayScrolls.cs
@@ -1,6 +1,7 @@
 using System.Collections;
 using System.Collections.Generic;
 using System.IO;
+using System.Linq;
 using TMPro;
 using UnityEngine;
 using UnityEngine.Networking;
@@ -11,6 +12,7 @@ public class DisplayScrolls : MonoBehaviour
     public int tryScrollListTimes = 2;
 
     static public List<Scroll> AvailableScrolls;
+    static public List<Scroll> AllowedScrolls;
     public GameObject[] ScrollButtons;
     public GameObject ScrollPrefab;
     public GameObject DetailScreen;
@@ -93,19 +95,23 @@ IEnumerator getScrollsfromServer()
     void BuildScrolls(string jsonString)
     {
         AvailableScrolls = Scroll.FromJSON(jsonString);
-        ScrollButtons = new GameObject[AvailableScrolls.Count];
+        AllowedScrolls = AvailableScrolls
+            .Where(s => StageStatic.stage.AllowedScrolls?.Contains(s.label) ?? true)
+            .ToList();
+
+        ScrollButtons = new GameObject[AllowedScrolls.Count()];
         //Build Selection-GUI of Scrolls
-        for (int i = 0; i < AvailableScrolls.Count; i++)
+        for (int i = 0; i < AllowedScrolls.Count; i++)
         {
             var obj = Instantiate(ScrollPrefab, Vector3.zero, Quaternion.identity, transform);
             obj.GetComponent<RectTransform>().localPosition = GetPosition(i);
-            obj.GetComponent<ScrollClickedScript>().scroll = AvailableScrolls[i];
+            obj.GetComponent<ScrollClickedScript>().scroll = AllowedScrolls[i];
             obj.GetComponent<ScrollClickedScript>().DetailScreen = this.DetailScreen;
-            obj.transform.GetChild(0).gameObject.GetComponent<TextMeshProUGUI>().text = AvailableScrolls[i].label;
+            obj.transform.GetChild(0).gameObject.GetComponent<TextMeshProUGUI>().text = AllowedScrolls[i].label;
             ScrollButtons[i] = obj;
         }
 
-        Scroll preferredStartScroll = AvailableScrolls.Find(x => x.label.Equals(preferredStartScrollName));
+        Scroll preferredStartScroll = AllowedScrolls.Find(x => x.label.Equals(preferredStartScrollName));
         if (preferredStartScroll != null)
             this.DetailScreen.GetComponent<ScrollDetails>().setScroll(preferredStartScroll);
     }
diff --git a/Assets/Scripts/Loading/Stage.cs b/Assets/Scripts/Loading/Stage.cs
index 8891c205e8358639b8f72faac0554d021e05938d..8c1cbdb687ae0fbb74761d20268194de058bc9f2 100644
--- a/Assets/Scripts/Loading/Stage.cs
+++ b/Assets/Scripts/Loading/Stage.cs
@@ -50,8 +50,8 @@ public class Stage: IJSONsavable<Stage>
     public SaveGame savegame = null;
 
     public List<PlayerRecord> solution_approches = new();
-    public List<string> AllowedScrolls = new();
-    public List<Gadget> AllowedGadgets = new();
+    public List<string> AllowedScrolls = null;
+    public List<Gadget> AllowedGadgets = null;
 
     #region makros/shortcuts
 
@@ -60,7 +60,7 @@ public class Stage: IJSONsavable<Stage>
     /// </summary>
     [JsonIgnore]
     //TODO? update color if changed
-    public bool completed_once { get { return player_record_list != null && player_record_list.Values.Any(s => s.solved == true); } }
+    public bool completed_once { get => player_record_list != null && player_record_list.Values.Any(s => s.solved == true); }
 
     /// <summary> Current Stage progress.</summary>
     [JsonIgnore]
diff --git a/Assets/Scripts/UI/InGame/ToolmodeSelector_bttn_mobile.cs b/Assets/Scripts/UI/InGame/ToolmodeSelector_bttn_mobile.cs
index 7f3d44dd84e37f54317e03604165358bbccda1e3..7a3ed35a70e609ec30fe0950f834371af7de1da7 100644
--- a/Assets/Scripts/UI/InGame/ToolmodeSelector_bttn_mobile.cs
+++ b/Assets/Scripts/UI/InGame/ToolmodeSelector_bttn_mobile.cs
@@ -8,8 +8,8 @@
 public class ToolmodeSelector_bttn_mobile : MonoBehaviour
 {
     public void Tool_nextright()
-        => GadgetManager.ActivateGadget(GadgetManager.ActiveGadgetInd + 1);
+        => GadgetBehaviour.ActivateGadget(GadgetBehaviour.ActiveGadgetInd + 1);
 
     public void Tool_nextleft()
-        => GadgetManager.ActivateGadget(GadgetManager.ActiveGadgetInd - 1);
+        => GadgetBehaviour.ActivateGadget(GadgetBehaviour.ActiveGadgetInd - 1);
 }
\ No newline at end of file
diff --git a/Assets/Stages/TechDemo A.JSON b/Assets/Stages/TechDemo A.JSON
index 066220d74adea3fc6ffcf9a68f82ee0fe39d65c2..ca0e0f0f0d422efdcd97f7e465fca063b90fdd8b 100644
--- a/Assets/Stages/TechDemo A.JSON	
+++ b/Assets/Stages/TechDemo A.JSON	
@@ -1 +1 @@
-{"category":"Demo Category","number":1,"description":"Tree Stage","scene":"RiverWorld","use_install_folder":true,"solution":{"ValidationSet":[{"MasterIDs":["http://mathhub.info/FrameIT/frameworld?DefaultSituationSpace/SituationTheory1?fact1320"],"SolutionIndex":[],"RelationIndex":[],"ComparerString":"LineFactHightDirectionComparer"}],"WorkflowGadgetDict":{"-1":null},"FactDict":{"http://mathhub.info/FrameIT/frameworld?DefaultSituationSpace/SituationTheory1?fact1318":{"s_type":"PointFact","Point":{"x":0.0,"y":0.0,"z":0.0,"magnitude":0.0,"sqrMagnitude":0.0},"Normal":{"x":0.0,"y":1.0,"z":0.0,"magnitude":1.0,"sqrMagnitude":1.0},"Id":"http://mathhub.info/FrameIT/frameworld?DefaultSituationSpace/SituationTheory1?fact1318","Label":"A","hasCustomLabel":false,"LabelId":1},"http://mathhub.info/FrameIT/frameworld?DefaultSituationSpace/SituationTheory1?fact1319":{"s_type":"PointFact","Point":{"x":0.0,"y":6.0,"z":0.0,"normalized":{"x":0.0,"y":1.0,"z":0.0,"magnitude":1.0,"sqrMagnitude":1.0},"magnitude":6.0,"sqrMagnitude":36.0},"Normal":{"x":0.0,"y":1.0,"z":0.0,"magnitude":1.0,"sqrMagnitude":1.0},"Id":"http://mathhub.info/FrameIT/frameworld?DefaultSituationSpace/SituationTheory1?fact1319","Label":"B","hasCustomLabel":false,"LabelId":2},"http://mathhub.info/FrameIT/frameworld?DefaultSituationSpace/SituationTheory1?fact1320":{"s_type":"LineFact","Distance":6.0,"Pid1":"http://mathhub.info/FrameIT/frameworld?DefaultSituationSpace/SituationTheory1?fact1318","Pid2":"http://mathhub.info/FrameIT/frameworld?DefaultSituationSpace/SituationTheory1?fact1319","Dir":{"x":0.0,"y":1.0,"z":0.0,"magnitude":1.0,"sqrMagnitude":1.0},"Id":"http://mathhub.info/FrameIT/frameworld?DefaultSituationSpace/SituationTheory1?fact1320","Label":"[AB]","hasCustomLabel":false,"LabelId":0}},"MetaInf":{"http://mathhub.info/FrameIT/frameworld?DefaultSituationSpace/SituationTheory1?fact1318":{"workflow_id":0,"active":true},"http://mathhub.info/FrameIT/frameworld?DefaultSituationSpace/SituationTheory1?fact1319":{"workflow_id":1,"active":true},"http://mathhub.info/FrameIT/frameworld?DefaultSituationSpace/SituationTheory1?fact1320":{"workflow_id":2,"active":true}},"Workflow":[{"Id":"http://mathhub.info/FrameIT/frameworld?DefaultSituationSpace/SituationTheory1?fact1318","samestep":false,"steplink":3,"creation":true,"gadget_rank":-1,"scroll_label":null},{"Id":"http://mathhub.info/FrameIT/frameworld?DefaultSituationSpace/SituationTheory1?fact1319","samestep":true,"steplink":0,"creation":true,"gadget_rank":-1,"scroll_label":null},{"Id":"http://mathhub.info/FrameIT/frameworld?DefaultSituationSpace/SituationTheory1?fact1320","samestep":true,"steplink":0,"creation":true,"gadget_rank":-1,"scroll_label":null}],"marker":3,"worksteps":1,"backlog":0,"soft_resetted":false,"invoke":true,"MaxLabelId":2,"UnusedLabelIds":[],"name":null,"path":null},"solution_approches":[],"AllowedScrolls":[],"AllowedGadgets":null,"name":"TechDemo A","path":null}
\ No newline at end of file
+{"category":"Demo Category","number":1,"description":"Tree Stage","scene":"RiverWorld","use_install_folder":true,"solution":{"ValidationSet":[{"MasterIDs":["http://mathhub.info/FrameIT/frameworld?DefaultSituationSpace/SituationTheory1?fact1320"],"SolutionIndex":[],"RelationIndex":[],"ComparerString":"LineFactHightDirectionComparer"}],"WorkflowGadgetDict":{"-1":null},"FactDict":{"http://mathhub.info/FrameIT/frameworld?DefaultSituationSpace/SituationTheory1?fact1318":{"s_type":"PointFact","Point":{"x":0.0,"y":0.0,"z":0.0,"magnitude":0.0,"sqrMagnitude":0.0},"Normal":{"x":0.0,"y":1.0,"z":0.0,"magnitude":1.0,"sqrMagnitude":1.0},"Id":"http://mathhub.info/FrameIT/frameworld?DefaultSituationSpace/SituationTheory1?fact1318","Label":"A","hasCustomLabel":false,"LabelId":1},"http://mathhub.info/FrameIT/frameworld?DefaultSituationSpace/SituationTheory1?fact1319":{"s_type":"PointFact","Point":{"x":0.0,"y":6.0,"z":0.0,"normalized":{"x":0.0,"y":1.0,"z":0.0,"magnitude":1.0,"sqrMagnitude":1.0},"magnitude":6.0,"sqrMagnitude":36.0},"Normal":{"x":0.0,"y":1.0,"z":0.0,"magnitude":1.0,"sqrMagnitude":1.0},"Id":"http://mathhub.info/FrameIT/frameworld?DefaultSituationSpace/SituationTheory1?fact1319","Label":"B","hasCustomLabel":false,"LabelId":2},"http://mathhub.info/FrameIT/frameworld?DefaultSituationSpace/SituationTheory1?fact1320":{"s_type":"LineFact","Distance":6.0,"Pid1":"http://mathhub.info/FrameIT/frameworld?DefaultSituationSpace/SituationTheory1?fact1318","Pid2":"http://mathhub.info/FrameIT/frameworld?DefaultSituationSpace/SituationTheory1?fact1319","Dir":{"x":0.0,"y":1.0,"z":0.0,"magnitude":1.0,"sqrMagnitude":1.0},"Id":"http://mathhub.info/FrameIT/frameworld?DefaultSituationSpace/SituationTheory1?fact1320","Label":"[AB]","hasCustomLabel":false,"LabelId":0}},"MetaInf":{"http://mathhub.info/FrameIT/frameworld?DefaultSituationSpace/SituationTheory1?fact1318":{"workflow_id":0,"active":true},"http://mathhub.info/FrameIT/frameworld?DefaultSituationSpace/SituationTheory1?fact1319":{"workflow_id":1,"active":true},"http://mathhub.info/FrameIT/frameworld?DefaultSituationSpace/SituationTheory1?fact1320":{"workflow_id":2,"active":true}},"Workflow":[{"Id":"http://mathhub.info/FrameIT/frameworld?DefaultSituationSpace/SituationTheory1?fact1318","samestep":false,"steplink":3,"creation":true,"gadget_rank":-1,"scroll_label":null},{"Id":"http://mathhub.info/FrameIT/frameworld?DefaultSituationSpace/SituationTheory1?fact1319","samestep":true,"steplink":0,"creation":true,"gadget_rank":-1,"scroll_label":null},{"Id":"http://mathhub.info/FrameIT/frameworld?DefaultSituationSpace/SituationTheory1?fact1320","samestep":true,"steplink":0,"creation":true,"gadget_rank":-1,"scroll_label":null}],"marker":3,"worksteps":1,"backlog":0,"soft_resetted":false,"invoke":true,"MaxLabelId":2,"UnusedLabelIds":[],"name":null,"path":null},"solution_approches":[],"AllowedScrolls":null,"AllowedGadgets":null,"name":"TechDemo A","path":null}
\ No newline at end of file
diff --git a/Assets/Stages/TechDemo B.JSON b/Assets/Stages/TechDemo B.JSON
index e6206127ccb7fe2ba9eda4f725457bae52e567d6..8cf6b969409d42ee87b2512ffd3f1dad1b7f6b77 100644
--- a/Assets/Stages/TechDemo B.JSON	
+++ b/Assets/Stages/TechDemo B.JSON	
@@ -1 +1 @@
-{"category":"Demo Category","number":2,"description":"River Stage","scene":"RiverWorld","use_install_folder":true,"solution":{"ValidationSet":[{"MasterIDs":["http://mathhub.info/FrameIT/frameworld?DefaultSituationSpace/SituationTheory1?fact1323"],"SolutionIndex":[],"RelationIndex":[],"ComparerString":"LineFactHightDirectionComparer"},{"MasterIDs":["http://mathhub.info/FrameIT/frameworld?DefaultSituationSpace/SituationTheory1?fact1323"],"SolutionIndex":[],"RelationIndex":[],"ComparerString":"LineSpanningOverRiverWorldComparer"},{"MasterIDs":[],"SolutionIndex":[1],"RelationIndex":[0],"ComparerString":"LineFactHightComparer"}],"WorkflowGadgetDict":{"-1":null},"FactDict":{"http://mathhub.info/FrameIT/frameworld?DefaultSituationSpace/SituationTheory1?fact1321":{"s_type":"PointFact","Point":{"x":0.0,"y":0.0,"z":0.0,"magnitude":0.0,"sqrMagnitude":0.0},"Normal":{"x":0.0,"y":1.0,"z":0.0,"magnitude":1.0,"sqrMagnitude":1.0},"Id":"http://mathhub.info/FrameIT/frameworld?DefaultSituationSpace/SituationTheory1?fact1321","Label":"A","hasCustomLabel":false,"LabelId":1},"http://mathhub.info/FrameIT/frameworld?DefaultSituationSpace/SituationTheory1?fact1322":{"s_type":"PointFact","Point":{"x":0.0,"y":6.0,"z":0.0,"normalized":{"x":0.0,"y":1.0,"z":0.0,"magnitude":1.0,"sqrMagnitude":1.0},"magnitude":6.0,"sqrMagnitude":36.0},"Normal":{"x":0.0,"y":1.0,"z":0.0,"magnitude":1.0,"sqrMagnitude":1.0},"Id":"http://mathhub.info/FrameIT/frameworld?DefaultSituationSpace/SituationTheory1?fact1322","Label":"B","hasCustomLabel":false,"LabelId":2},"http://mathhub.info/FrameIT/frameworld?DefaultSituationSpace/SituationTheory1?fact1323":{"s_type":"LineFact","Distance":6.0,"Pid1":"http://mathhub.info/FrameIT/frameworld?DefaultSituationSpace/SituationTheory1?fact1321","Pid2":"http://mathhub.info/FrameIT/frameworld?DefaultSituationSpace/SituationTheory1?fact1322","Dir":{"x":0.0,"y":1.0,"z":0.0,"magnitude":1.0,"sqrMagnitude":1.0},"Id":"http://mathhub.info/FrameIT/frameworld?DefaultSituationSpace/SituationTheory1?fact1323","Label":"[AB]","hasCustomLabel":false,"LabelId":0}},"MetaInf":{"http://mathhub.info/FrameIT/frameworld?DefaultSituationSpace/SituationTheory1?fact1321":{"workflow_id":0,"active":true},"http://mathhub.info/FrameIT/frameworld?DefaultSituationSpace/SituationTheory1?fact1322":{"workflow_id":1,"active":true},"http://mathhub.info/FrameIT/frameworld?DefaultSituationSpace/SituationTheory1?fact1323":{"workflow_id":2,"active":true}},"Workflow":[{"Id":"http://mathhub.info/FrameIT/frameworld?DefaultSituationSpace/SituationTheory1?fact1321","samestep":false,"steplink":3,"creation":true,"gadget_rank":-1,"scroll_label":null},{"Id":"http://mathhub.info/FrameIT/frameworld?DefaultSituationSpace/SituationTheory1?fact1322","samestep":true,"steplink":0,"creation":true,"gadget_rank":-1,"scroll_label":null},{"Id":"http://mathhub.info/FrameIT/frameworld?DefaultSituationSpace/SituationTheory1?fact1323","samestep":true,"steplink":0,"creation":true,"gadget_rank":-1,"scroll_label":null}],"marker":3,"worksteps":1,"backlog":0,"soft_resetted":false,"invoke":true,"MaxLabelId":2,"UnusedLabelIds":[],"name":null,"path":null},"solution_approches":[],"AllowedScrolls":[],"AllowedGadgets":[{"s_type":"Pointer","Rank":1,"UiName":"Pointer","MaxRange":"Infinity","MaxHeight":"Infinity","ButtonIndx":1,"MaterialIndx":0,"IgnoreLayerMask":{"value":24066},"SecondaryLayerMask":{"value":0}},{"s_type":"Tape","Rank":2,"UiName":"Tape","MaxRange":2.5,"MaxHeight":2.5,"ButtonIndx":2,"MaterialIndx":0,"IgnoreLayerMask":{"value":96770},"SecondaryLayerMask":{"value":0}},{"s_type":"AngleTool","Rank":3,"UiName":"Angle Tool","MaxRange":"Infinity","MaxHeight":"Infinity","ButtonIndx":3,"MaterialIndx":1,"IgnoreLayerMask":{"value":96770},"SecondaryLayerMask":{"value":0}},{"s_type":"LineTool","Rank":4,"UiName":"Line Tool","MaxRange":"Infinity","MaxHeight":"Infinity","ButtonIndx":4,"MaterialIndx":0,"IgnoreLayerMask":{"value":96770},"SecondaryLayerMask":{"value":0}},{"s_type":"LotTool","Rank":5,"UiName":"Lot Tool","MaxRange":"Infinity","MaxHeight":"Infinity","ButtonIndx":5,"MaterialIndx":0,"IgnoreLayerMask":{"value":86530},"SecondaryLayerMask":{"value":0}},{"s_type":"Pendulum","Rank":6,"UiName":"Pendulum","MaxRange":"Infinity","MaxHeight":"Infinity","ButtonIndx":6,"MaterialIndx":0,"IgnoreLayerMask":{"value":96770},"SecondaryLayerMask":{"value":1}},{"s_type":"Remover","Rank":8,"UiName":"Delete Fact","MaxRange":"Infinity","MaxHeight":"Infinity","ButtonIndx":8,"MaterialIndx":0,"IgnoreLayerMask":{"value":115219},"SecondaryLayerMask":{"value":0}}],"name":"TechDemo B","path":null}
\ No newline at end of file
+{"category":"Demo Category","number":2,"description":"River Stage","scene":"RiverWorld","use_install_folder":true,"solution":{"ValidationSet":[{"MasterIDs":["http://mathhub.info/FrameIT/frameworld?DefaultSituationSpace/SituationTheory1?fact1323"],"SolutionIndex":[],"RelationIndex":[],"ComparerString":"LineFactHightDirectionComparer"},{"MasterIDs":["http://mathhub.info/FrameIT/frameworld?DefaultSituationSpace/SituationTheory1?fact1323"],"SolutionIndex":[],"RelationIndex":[],"ComparerString":"LineSpanningOverRiverWorldComparer"},{"MasterIDs":[],"SolutionIndex":[1],"RelationIndex":[0],"ComparerString":"LineFactHightComparer"}],"WorkflowGadgetDict":{"-1":null},"FactDict":{"http://mathhub.info/FrameIT/frameworld?DefaultSituationSpace/SituationTheory1?fact1321":{"s_type":"PointFact","Point":{"x":0.0,"y":0.0,"z":0.0,"magnitude":0.0,"sqrMagnitude":0.0},"Normal":{"x":0.0,"y":1.0,"z":0.0,"magnitude":1.0,"sqrMagnitude":1.0},"Id":"http://mathhub.info/FrameIT/frameworld?DefaultSituationSpace/SituationTheory1?fact1321","Label":"A","hasCustomLabel":false,"LabelId":1},"http://mathhub.info/FrameIT/frameworld?DefaultSituationSpace/SituationTheory1?fact1322":{"s_type":"PointFact","Point":{"x":0.0,"y":6.0,"z":0.0,"normalized":{"x":0.0,"y":1.0,"z":0.0,"magnitude":1.0,"sqrMagnitude":1.0},"magnitude":6.0,"sqrMagnitude":36.0},"Normal":{"x":0.0,"y":1.0,"z":0.0,"magnitude":1.0,"sqrMagnitude":1.0},"Id":"http://mathhub.info/FrameIT/frameworld?DefaultSituationSpace/SituationTheory1?fact1322","Label":"B","hasCustomLabel":false,"LabelId":2},"http://mathhub.info/FrameIT/frameworld?DefaultSituationSpace/SituationTheory1?fact1323":{"s_type":"LineFact","Distance":6.0,"Pid1":"http://mathhub.info/FrameIT/frameworld?DefaultSituationSpace/SituationTheory1?fact1321","Pid2":"http://mathhub.info/FrameIT/frameworld?DefaultSituationSpace/SituationTheory1?fact1322","Dir":{"x":0.0,"y":1.0,"z":0.0,"magnitude":1.0,"sqrMagnitude":1.0},"Id":"http://mathhub.info/FrameIT/frameworld?DefaultSituationSpace/SituationTheory1?fact1323","Label":"[AB]","hasCustomLabel":false,"LabelId":0}},"MetaInf":{"http://mathhub.info/FrameIT/frameworld?DefaultSituationSpace/SituationTheory1?fact1321":{"workflow_id":0,"active":true},"http://mathhub.info/FrameIT/frameworld?DefaultSituationSpace/SituationTheory1?fact1322":{"workflow_id":1,"active":true},"http://mathhub.info/FrameIT/frameworld?DefaultSituationSpace/SituationTheory1?fact1323":{"workflow_id":2,"active":true}},"Workflow":[{"Id":"http://mathhub.info/FrameIT/frameworld?DefaultSituationSpace/SituationTheory1?fact1321","samestep":false,"steplink":3,"creation":true,"gadget_rank":-1,"scroll_label":null},{"Id":"http://mathhub.info/FrameIT/frameworld?DefaultSituationSpace/SituationTheory1?fact1322","samestep":true,"steplink":0,"creation":true,"gadget_rank":-1,"scroll_label":null},{"Id":"http://mathhub.info/FrameIT/frameworld?DefaultSituationSpace/SituationTheory1?fact1323","samestep":true,"steplink":0,"creation":true,"gadget_rank":-1,"scroll_label":null}],"marker":3,"worksteps":1,"backlog":0,"soft_resetted":false,"invoke":true,"MaxLabelId":2,"UnusedLabelIds":[],"name":null,"path":null},"solution_approches":[],"AllowedScrolls":["OppositeLen"],"AllowedGadgets":[{"s_type":"Pointer","Rank":1,"UiName":"Pointer","MaxRange":"Infinity","MaxHeight":"Infinity","ButtonIndx":1,"MaterialIndx":0,"IgnoreLayerMask":{"value":24066},"SecondaryLayerMask":{"value":0}},{"s_type":"Tape","Rank":2,"UiName":"Tape","MaxRange":2.5,"MaxHeight":2.5,"ButtonIndx":2,"MaterialIndx":0,"IgnoreLayerMask":{"value":96770},"SecondaryLayerMask":{"value":0}},{"s_type":"AngleTool","Rank":3,"UiName":"Angle Tool","MaxRange":"Infinity","MaxHeight":"Infinity","ButtonIndx":3,"MaterialIndx":1,"IgnoreLayerMask":{"value":96770},"SecondaryLayerMask":{"value":0}},{"s_type":"LineTool","Rank":4,"UiName":"Line Tool","MaxRange":"Infinity","MaxHeight":"Infinity","ButtonIndx":4,"MaterialIndx":0,"IgnoreLayerMask":{"value":96770},"SecondaryLayerMask":{"value":0}},{"s_type":"LotTool","Rank":5,"UiName":"Lot Tool","MaxRange":"Infinity","MaxHeight":"Infinity","ButtonIndx":5,"MaterialIndx":0,"IgnoreLayerMask":{"value":86530},"SecondaryLayerMask":{"value":0}},{"s_type":"Pendulum","Rank":6,"UiName":"Pendulum","MaxRange":"Infinity","MaxHeight":"Infinity","ButtonIndx":6,"MaterialIndx":0,"IgnoreLayerMask":{"value":96770},"SecondaryLayerMask":{"value":1}},{"s_type":"Remover","Rank":8,"UiName":"Delete Fact","MaxRange":"Infinity","MaxHeight":"Infinity","ButtonIndx":8,"MaterialIndx":0,"IgnoreLayerMask":{"value":115219},"SecondaryLayerMask":{"value":0}}],"name":"TechDemo B","path":null}
\ No newline at end of file