diff --git a/Assets/Scenes/Menues/MainMenue.unity b/Assets/Scenes/Menues/MainMenue.unity
index ec74b6b5ddece7365ceeef6a564731cc612ca6ae..bacf6d5d979869189a77bca65db13b6c10cdaa60 100644
--- a/Assets/Scenes/Menues/MainMenue.unity
+++ b/Assets/Scenes/Menues/MainMenue.unity
@@ -8550,10 +8550,30 @@ PrefabInstance:
       propertyPath: m_Name
       value: GlobalObject
       objectReference: {fileID: 0}
+    - target: {fileID: 1491172435906319289, guid: 22a53293eaa728146a6f47093d22ca92,
+        type: 3}
+      propertyPath: _StageError.a
+      value: 0.39215687
+      objectReference: {fileID: 0}
+    - target: {fileID: 1491172435906319289, guid: 22a53293eaa728146a6f47093d22ca92,
+        type: 3}
+      propertyPath: _StageError.b
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 1491172435906319289, guid: 22a53293eaa728146a6f47093d22ca92,
+        type: 3}
+      propertyPath: _StageError.g
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 1491172435906319289, guid: 22a53293eaa728146a6f47093d22ca92,
+        type: 3}
+      propertyPath: _StageError.r
+      value: 1
+      objectReference: {fileID: 0}
     - target: {fileID: 1491172435906319289, guid: 22a53293eaa728146a6f47093d22ca92,
         type: 3}
       propertyPath: _StageAccomplished.a
-      value: 0.3882353
+      value: 0.39215687
       objectReference: {fileID: 0}
     - target: {fileID: 1491172435906319289, guid: 22a53293eaa728146a6f47093d22ca92,
         type: 3}
@@ -8598,7 +8618,7 @@ PrefabInstance:
     - target: {fileID: 1491172435906319289, guid: 22a53293eaa728146a6f47093d22ca92,
         type: 3}
       propertyPath: _StageNotYetAccomplished.a
-      value: 0.3882353
+      value: 0.39215687
       objectReference: {fileID: 0}
     - target: {fileID: 1491172435906319289, guid: 22a53293eaa728146a6f47093d22ca92,
         type: 3}
diff --git a/Assets/Scripts/GlobalBehaviour.cs b/Assets/Scripts/GlobalBehaviour.cs
index 0f8ffb3629933200810aa49d0ee1b3ebb6a6d73a..32a448dde619282dd17de1a912eaefe982f24399 100644
--- a/Assets/Scripts/GlobalBehaviour.cs
+++ b/Assets/Scripts/GlobalBehaviour.cs
@@ -10,6 +10,7 @@ public class GlobalBehaviour : MonoBehaviour
 
     public static Color StageAccomplished;
     public static Color StageNotYetAccomplished;
+    public static Color StageError;
 
     [SerializeField]
     private Color _hintAnimationStartColor;
@@ -22,6 +23,8 @@ public class GlobalBehaviour : MonoBehaviour
     private Color _StageAccomplished;
     [SerializeField]
     private Color _StageNotYetAccomplished;
+    [SerializeField]
+    private Color _StageError;
 
     void Awake()
     {
@@ -33,6 +36,7 @@ void Awake()
 
         StageAccomplished = _StageAccomplished;
         StageNotYetAccomplished = _StageNotYetAccomplished;
+        StageError = _StageError;
 
 
         StageStatic.ShallowLoadStages();
diff --git a/Assets/Scripts/InteractionEngine/FactHandling/FactOrganizer.cs b/Assets/Scripts/InteractionEngine/FactHandling/FactOrganizer.cs
index bd0b0d58fde25e07e7546c2c615a52823f885c5c..5bd54c5b6ab84e345f510c7b4aaf733da24209a7 100644
--- a/Assets/Scripts/InteractionEngine/FactHandling/FactOrganizer.cs
+++ b/Assets/Scripts/InteractionEngine/FactHandling/FactOrganizer.cs
@@ -342,13 +342,13 @@ public bool safe_dependencies(string key, out List<string> dependencies)
         for (int i = pos; i < marker; i++)
         {
             // TODO: consequent != samestep != dependent (want !consequent)
-            if (!Workflow[i].creation)
+            if (!Workflow[i].creation && Workflow[i].Id != key)
             {
                 // just try
                 if (dependencies.Remove(Workflow[i].Id) && !Workflow[i].samestep)
                     c_unsafe--;
             }
-            else if (0 < this[Workflow[i].Id].getDependentFactIds().Intersect(dependencies).Count())
+            else if (0 < this[Workflow[i].Id].getDependentFactIds().Intersect(dependencies).Count() && Workflow[i].Id != key)
             {
                 dependencies.Add(Workflow[i].Id);
                 if (!Workflow[i].samestep)
diff --git a/Assets/Scripts/JSONManager.cs b/Assets/Scripts/JSONManager.cs
index 098f17f68a4c6dc1398fcd54a6104e89263a58e4..3a128fa77388610b12b379f73523b5ad7025c4b4 100644
--- a/Assets/Scripts/JSONManager.cs
+++ b/Assets/Scripts/JSONManager.cs
@@ -94,13 +94,20 @@ public OMF(float f)
 
     public class MMTDeclaration
     {
+        public string label;
         public static MMTDeclaration FromJson(string json)
         {
             MMTDeclaration mmtDecl = JsonConvert.DeserializeObject<MMTDeclaration>(json);
+            if (mmtDecl.label == null)
+                mmtDecl.label = string.Empty;
+
             return mmtDecl;
         }
         public static string ToJson(MMTDeclaration mmtDecl)
         {
+            if (mmtDecl.label == null)
+                mmtDecl.label = string.Empty;
+
             string json = JsonConvert.SerializeObject(mmtDecl);
             return json;
         }
@@ -112,7 +119,6 @@ public static string ToJson(MMTDeclaration mmtDecl)
     public class MMTSymbolDeclaration : MMTDeclaration
     {
         public string kind = "general";
-        public string label;
         public MMTTerm tp;
         public MMTTerm df;
 
@@ -133,7 +139,6 @@ public MMTSymbolDeclaration(string label, MMTTerm tp, MMTTerm df)
     public class MMTValueDeclaration : MMTDeclaration
     {
         public string kind = "veq";
-        public string label;
         public MMTTerm lhs;
         public MMTTerm valueTp;
         public MMTTerm value;
diff --git a/Assets/Scripts/Loading/Stage.cs b/Assets/Scripts/Loading/Stage.cs
index 889b38cf1e8db273d18633ef5ce5f7db477c2938..b053893f3f5c02d74c7e00fb11369b85313b7a97 100644
--- a/Assets/Scripts/Loading/Stage.cs
+++ b/Assets/Scripts/Loading/Stage.cs
@@ -92,16 +92,52 @@ public void deletet_record(PlayerRecord record)
 
     public bool set_record(PlayerRecord record)
     {
-        if (record != null && !player_record_list.ContainsKey(record.name))
-            return false;
+        hierarchie ??= new List<Directories>();
+        hierarchie.AddRange(hierStage.AsEnumerable());
+
+        if (record != null)
+            if(!player_record_list.ContainsKey(record.name))
+                return false;
+            else if (!record.load(hierarchie))
+            {
+                deletet_record(record);
+                hierarchie.RemoveRange(hierarchie.Count - hierStage.Count, hierStage.Count);
+                return false;
+            }
 
-        player_record = record == null ? new PlayerRecord(record_name) : record;
+        player_record = record == null ? new PlayerRecord(record_name) : record.Clone(hierarchie);
+        player_record.name = record_name;
+
+        hierarchie.RemoveRange(hierarchie.Count - hierStage.Count, hierStage.Count);
 
         store(false);
 
         return true;
     }
 
+    public void push_record(double seconds_s = -1)
+    {
+        hierarchie ??= new List<Directories>();
+        hierarchie.AddRange(hierStage.AsEnumerable());
+
+        if (seconds_s == -1)
+            seconds_s = Time.timeSinceLevelLoadAsDouble;
+        player_record.seconds += seconds_s;
+
+        var push = player_record.Clone(hierarchie);
+
+        hierarchie.RemoveRange(hierarchie.Count - hierStage.Count, hierStage.Count);
+
+        int i = 0;
+        push.name = record_name + "_" + i.ToString();
+        for (; player_record_list.ContainsKey(push.name); i++)
+            push.name = record_name + "_" + i.ToString();
+
+        player_record_list.Add(push.name, push);
+
+        store(false);
+    }
+
     public void SetMode(bool create)
     {
         if (create == creatorMode)
@@ -152,6 +188,7 @@ public void store(bool reset = false)
         hierarchie ??= new List<Directories>();
         hierarchie.AddRange(hierStage.AsEnumerable());
 
+        player_record.name = record_name;
         if (reset)
             player_record = new PlayerRecord(record_name);
 
@@ -170,10 +207,10 @@ public void store(bool reset = false)
         }
 
         if (player_record != null)
-            player_record.store(hierarchie);
+            player_record.store(hierarchie, true);
 
         foreach (var track in player_record_list)
-            track.Value.store(hierarchie);
+            track.Value.store(hierarchie, false);
 
         hierarchie.RemoveRange(hierarchie.Count - hierStage.Count, hierStage.Count);
     }
@@ -214,7 +251,8 @@ public static bool ShallowLoad(ref Stage set, string path)
 
         set.hierarchie ??= new List<Directories>();
         set.hierarchie.AddRange(hierStage.AsEnumerable());
-        set.player_record.load(set.hierarchie);
+        if (!set.player_record.load(set.hierarchie))
+            set.player_record = new PlayerRecord(set.record_name);
         set.hierarchie.RemoveRange(set.hierarchie.Count - hierStage.Count, hierStage.Count);
 
         return true;
@@ -295,7 +333,7 @@ public void ResetSaves()
 
     public bool CheckSolved()
     {
-        float time_s = Time.time;
+        double time_s = Time.timeSinceLevelLoadAsDouble;
         bool solved =
             factState.DynamiclySolved(solution, out _, out List<List<string>> hits);
 
@@ -304,21 +342,11 @@ public bool CheckSolved()
                 foreach (var hit in hitlist)
                     AnimateExistingFactEvent.Invoke(factState[hit]);
 
-        if (solved && player_record.time > 0)
+        if (solved && player_record.seconds > 0)
         {
             player_record.solved = solved;
-            player_record.time = time_s - player_record.time;
-
-            int i = 0;
-            player_record.name = record_name + "_" + i.ToString();
-            for (; player_record_list.ContainsKey(player_record.name); i++)
-                player_record.name = record_name + "_" + i.ToString();
-
-            player_record_list.Add(player_record.name, player_record);
-
-            var old = player_record;
-            store(true);
-            player_record = old;
+            push_record(time_s);
+            store(true); // reset player_record
         }
 
         return solved;
@@ -330,7 +358,7 @@ public class PlayerRecord
 {
     public bool solved = false;
     public long date = System.DateTime.Now.ToBinary();
-    public float time = 0;
+    public double seconds = 0;
 
     [JsonIgnore]
     public FactOrganizer factState = null;
@@ -346,13 +374,13 @@ public PlayerRecord(string name) {
         factState = new FactOrganizer();
     }
 
-    public void store(List<Directories> hierarchie)
+    public void store(List<Directories> hierarchie, bool force_write)
     {
         hierarchie ??= new List<Directories>();
         hierarchie.AddRange(hierStage.AsEnumerable());
 
         if (factState != null)
-            factState.store(name, hierarchie, false, false);
+            factState.store(name, hierarchie, false, force_write);
 
         hierarchie.RemoveRange(hierarchie.Count - hierStage.Count, hierStage.Count);
     }
@@ -382,4 +410,20 @@ public void delete(List<Directories> hierarchie)
 
         hierarchie.RemoveRange(hierarchie.Count - hierStage.Count, hierStage.Count);
     }
+
+    public PlayerRecord Clone(List<Directories> hierarchie)
+    {
+        this.store(hierarchie, true);
+
+        hierarchie ??= new List<Directories>();
+        hierarchie.AddRange(hierStage.AsEnumerable());
+
+        var ret = new PlayerRecord(this.name);
+        ret.solved = this.solved;
+        ret.seconds = this.seconds;
+        ret.load(hierarchie);
+
+        hierarchie.RemoveRange(hierarchie.Count - hierStage.Count, hierStage.Count);
+        return ret;
+    }
 }
\ No newline at end of file
diff --git a/Assets/Scripts/StageBehaviour.cs b/Assets/Scripts/StageBehaviour.cs
index 0f6e1d7fa0ff17b62d7a0155e7654eb94dbe4d43..ab8da2ba504b7464a6c03bc1966bcd19ab520dbc 100644
--- a/Assets/Scripts/StageBehaviour.cs
+++ b/Assets/Scripts/StageBehaviour.cs
@@ -7,7 +7,7 @@ public class StageBehaviour : MonoBehaviour
 {
     void Start()
     {
-        StageStatic.LoadInitStage(StageStatic.stage.player_record.solved, gameObject);
+        StageStatic.LoadInitStage(true /*StageStatic.stage.player_record.solved*/, gameObject);
     }
 
     private void OnDestroy()
diff --git a/Assets/Scripts/StageStatic.cs b/Assets/Scripts/StageStatic.cs
index 045d5eeb415a6fb8ee4b229a5b86aece52f9f808..764216d4e086e8936ad4bce8822fb1dd6a4ce2d7 100644
--- a/Assets/Scripts/StageStatic.cs
+++ b/Assets/Scripts/StageStatic.cs
@@ -251,12 +251,12 @@ public static bool LoadInitStage(bool restore_session, GameObject gameObject = n
         {
             stage.factState.invoke = true;
             stage.factState.Draw();
-            stage.player_record.time = stage.player_record.time > 0 ? Time.time - stage.player_record.time : -1;
         }
         else
         {
-            stage.factState = new FactOrganizer(true);
-            stage.player_record.time = devel ? -1 : Time.time;
+            stage.ResetPlay();
+            if(devel) // block saving "player" progress
+                stage.player_record.seconds = -1;
         }
 
         gameObject.UpdateTagActive("DevelopingMode", devel);
diff --git a/Assets/Scripts/UI/HideUI.cs b/Assets/Scripts/UI/HideUI.cs
index f54b8ca883a53a6eabaed79c3e40decb571c8803..dc2a46e0e6e93894c869045c496f2b9179ec635b 100644
--- a/Assets/Scripts/UI/HideUI.cs
+++ b/Assets/Scripts/UI/HideUI.cs
@@ -62,7 +62,7 @@ void Update()
             else if (Input.GetButtonDown(modreset))
                 StageStatic.stage.factState.softreset();
             else if (Input.GetButtonDown(modsave))
-                StageStatic.stage.store();
+                StageStatic.stage.push_record();
             else if (Input.GetButtonDown(modload)) {
                 StageStatic.stage.factState.hardreset();
                 StageStatic.LoadInitStage(StageStatic.stage.name, !StageStatic.stage.use_install_folder);
diff --git a/Assets/Scripts/UI/MainMenue/CollapsableStage/CollapsableCategory.cs b/Assets/Scripts/UI/MainMenue/CollapsableStage/CollapsableCategory.cs
index da11db8b3941018efbfaa53294b4315cd588e8c3..3410f16e843e4fa91f3ea6e6aa6eb5e57af801d5 100644
--- a/Assets/Scripts/UI/MainMenue/CollapsableStage/CollapsableCategory.cs
+++ b/Assets/Scripts/UI/MainMenue/CollapsableStage/CollapsableCategory.cs
@@ -18,12 +18,18 @@ public void Init()
     {
         var header = gameObject.GetNthChild(new List<int> { 0, 0 });
 
+        // set text init
+        PopulateLocalEntryList(header, new List<string> { "err", category, "" });
+        // set colour err (for now)
+        header.GetNthChild(new List<int> { 0, 0 }).GetComponent<UnityEngine.UI.Image>().color =
+            GlobalBehaviour.StageError;
+
         var p = DrawChildren();
 
-        // set text
-        PopulateLocalEntryList(header, new List<string> { ((int)(p * 100)).ToString() + "%", category, "" });
+        // set text percent
+        PopulateLocalEntryList(header, new List<string> { ((int)(p * 100)).ToString() + "%"});
 
-        // set colour
+        // set colour percent
         header.GetNthChild(new List<int> { 0, 0 }).GetComponent<UnityEngine.UI.Image>().color =
             p * GlobalBehaviour.StageAccomplished + (1 - p) * GlobalBehaviour.StageNotYetAccomplished;
     }
diff --git a/Assets/Scripts/UI/MainMenue/CollapsableStage/CollapsableStage.cs b/Assets/Scripts/UI/MainMenue/CollapsableStage/CollapsableStage.cs
index 968532f38a549b71ab8f8d6bd6049cb0dec037bb..8d1b62000c431741a8be7677d197172a8c5ecda8 100644
--- a/Assets/Scripts/UI/MainMenue/CollapsableStage/CollapsableStage.cs
+++ b/Assets/Scripts/UI/MainMenue/CollapsableStage/CollapsableStage.cs
@@ -28,7 +28,7 @@ public void Init()
         header.GetComponent<UnityEngine.UI.Button>().onClick.AddListener(delegate {
             StageStatic.devel = false;
             // TODO: handle unable to load
-            Loader.LoadStage(stage.name, !stage.use_install_folder, false);
+            Loader.LoadStage(stage.name, !stage.use_install_folder, true);
         });
 
         // set explicit edit button
@@ -43,29 +43,39 @@ public void Init()
 
     public void DrawChildren()
     {
-        var record_list = stage.player_record_list.Values.OrderBy(r => r.time).ToList();
+        var record_list = stage.player_record_list.Values.OrderBy(r => r.seconds).ToList();
         var body = gameObject.GetNthChild(new List<int> { 1 });
         body.DestroyAllChildren();
 
-        for (int i = 0; i < record_list.Count; i++)
+        for (int i = 0, k = 0; i < record_list.Count; i++)
         {
+            var index = record_list[i].name;
+
             GameObject time_entry = Instantiate(TimeEntry);
             time_entry.transform.SetParent(body.transform, false);
 
             PopulateLocalEntryList(time_entry, new List<string> {
-                    (i + 1).ToString(),
+                    stage.player_record_list[index].solved ? (++k).ToString() : "--",
                     "", // hidden
-                    System.TimeSpan.FromSeconds(record_list[i].time).ToString("hh':'mm':'ss") });
+                    System.TimeSpan.FromSeconds(stage.player_record_list[index].seconds).ToString("hh':'mm':'ss") });
+
+            // set colour
+            time_entry.GetNthChild(new List<int> { 0, 0 }).GetComponent<UnityEngine.UI.Image>().color =
+                stage.player_record_list[index].solved ? GlobalBehaviour.StageAccomplished : GlobalBehaviour.StageNotYetAccomplished;
 
-            var index = record_list[i].name;
             // set delete button
             time_entry.GetNthChild(new List<int> { 3, 0 }).GetComponent<UnityEngine.UI.Button>().onClick.AddListener(delegate {
                 stage.deletet_record(stage.player_record_list[index]);
                 this.Init();
             });
+
             // set clone button
             time_entry.GetNthChild(new List<int> { 4, 0 }).GetComponent<UnityEngine.UI.Button>().onClick.AddListener(delegate {
-                stage.set_record(stage.player_record_list[index]);
+                if (!stage.set_record(stage.player_record_list[index]))
+                {
+                    this.Init();
+                    return;
+                }
                 StageStatic.devel = false;
                 // TODO: handle unable to load
                 Loader.LoadStage(stage.name, !stage.use_install_folder, true);
diff --git a/Assets/Scripts/UI/MainMenue/PageLoader/CreateLoader.cs b/Assets/Scripts/UI/MainMenue/PageLoader/CreateLoader.cs
index f6749d9b19fbc8b7f33b82ccb3d289adff6c2819..61b5cd7c03a8940cbe20673743c1f23b97f28b99 100644
--- a/Assets/Scripts/UI/MainMenue/PageLoader/CreateLoader.cs
+++ b/Assets/Scripts/UI/MainMenue/PageLoader/CreateLoader.cs
@@ -76,6 +76,33 @@ public void Create()
     protected void Error(StageStatic.StageErrorStruct error)
     {
         //TODO: inform failure & why?
-        throw new System.NotImplementedException("handle error");
+        if (error.category)
+        {
+            throw new System.NotImplementedException("Invalid Category"); // unused
+        } 
+        if (error.id)
+        {
+            throw new System.NotImplementedException("Id must be unique within a category"); // technichal a lie
+        }
+        if (error.name) // for savegame identification (could be chained with local/category/id)
+        {
+            throw new System.NotImplementedException("Name must be unique");
+        }
+        if (error.description)
+        {
+            throw new System.NotImplementedException("Invalid Description"); // unused
+        }
+        if (error.scene)
+        {
+            throw new System.NotImplementedException("Please select a World");
+        }
+        if (error.local) // keep custom levels custom
+        {
+            throw new System.NotImplementedException("Not allowed to create or change non-local Stages"); 
+        }
+        if (error.load)
+        {
+            throw new System.NotImplementedException("Unknown error: Stage could not be loaded"); // needs work
+        }
     }
 }
diff --git a/Assets/Stages/TechDemo A.JSON b/Assets/Stages/TechDemo A.JSON
index bcdcce59aa6f7e94f2674e012666a69d89b0b96c..c2d89f9c8f211ab234e9e644112db91df3a232af 100644
--- a/Assets/Stages/TechDemo A.JSON	
+++ b/Assets/Stages/TechDemo A.JSON	
@@ -1 +1 @@
-{"number":0,"category":"Demo Category","name":"TechDemo A","description":"Improvised Level\n(Loadable)","scene":"RiverWorld","use_install_folder":true,"hierarchie":[],"player_record_list":{"TechDemo A_save_1":{"solved":true,"date":176,"time":46.0341873,"name":"TechDemo A_save_1"},"TechDemo A_save_0":{"solved":true,"date":176,"time":67.78075,"name":"TechDemo A_save_0"}},"player_record":{"solved":false,"date":-8585700266226810927,"time":0.0,"name":"TechDemo A_save"}}
\ No newline at end of file
+{"number":0,"category":"Demo Category","name":"TechDemo A","description":"Improvised Level\n(Loadable)","scene":"RiverWorld","use_install_folder":true,"hierarchie":[],"player_record_list":{},"player_record":{"solved":false,"date":-8585699525499392354,"seconds":0.0,"name":"TechDemo A_save"}}
\ No newline at end of file
diff --git a/Assets/Stages/ValidationSets/FactStateMachines/TechDemo A_sol.JSON b/Assets/Stages/ValidationSets/FactStateMachines/TechDemo A_sol.JSON
index 73edc4f0b31956bd16e8a86101ef6a7e12bcbb6c..c921b921b62a232b4068335a174260b4b25e8e9e 100644
--- a/Assets/Stages/ValidationSets/FactStateMachines/TechDemo A_sol.JSON	
+++ b/Assets/Stages/ValidationSets/FactStateMachines/TechDemo A_sol.JSON	
@@ -1 +1 @@
-{"PointFacts":[{"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/integrationtests?SampleSituationSpace/SituationTheory2?fact1304","Label":"A","hasCustomLabel":false,"LabelId":1},{"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/integrationtests?SampleSituationSpace/SituationTheory2?fact1305","Label":"B","hasCustomLabel":false,"LabelId":2}],"LineFacts":[{"Distance":6.0,"Pid1":"http://mathhub.info/FrameIT/frameworld/integrationtests?SampleSituationSpace/SituationTheory2?fact1304","Pid2":"http://mathhub.info/FrameIT/frameworld/integrationtests?SampleSituationSpace/SituationTheory2?fact1305","Dir":{"x":0.0,"y":1.0,"z":0.0,"magnitude":1.0,"sqrMagnitude":1.0},"Id":"http://mathhub.info/FrameIT/frameworld/integrationtests?SampleSituationSpace/SituationTheory2?fact1306","Label":"[AB]","hasCustomLabel":false,"LabelId":0}],"RayFacts":[],"OnLineFacts":[],"AngleFacts":[],"MetaInf":{"http://mathhub.info/FrameIT/frameworld/integrationtests?SampleSituationSpace/SituationTheory2?fact1304":{"workflow_id":0,"active":true},"http://mathhub.info/FrameIT/frameworld/integrationtests?SampleSituationSpace/SituationTheory2?fact1305":{"workflow_id":1,"active":true},"http://mathhub.info/FrameIT/frameworld/integrationtests?SampleSituationSpace/SituationTheory2?fact1306":{"workflow_id":2,"active":true}},"Workflow":[{"Id":"http://mathhub.info/FrameIT/frameworld/integrationtests?SampleSituationSpace/SituationTheory2?fact1304","samestep":false,"steplink":3,"creation":true},{"Id":"http://mathhub.info/FrameIT/frameworld/integrationtests?SampleSituationSpace/SituationTheory2?fact1305","samestep":true,"steplink":0,"creation":true},{"Id":"http://mathhub.info/FrameIT/frameworld/integrationtests?SampleSituationSpace/SituationTheory2?fact1306","samestep":true,"steplink":0,"creation":true}],"marker":3,"worksteps":1,"backlog":0,"soft_resetted":false,"invoke":false,"MaxLabelId":2,"UnusedLabelIds":[]}
\ No newline at end of file
+{"PointFacts":[{"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/integrationtests?SampleSituationSpace/Root?fact2554","Label":"A","hasCustomLabel":false,"LabelId":1},{"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/integrationtests?SampleSituationSpace/Root?fact2555","Label":"B","hasCustomLabel":false,"LabelId":2}],"LineFacts":[{"Distance":6.0,"Pid1":"http://mathhub.info/FrameIT/frameworld/integrationtests?SampleSituationSpace/Root?fact2554","Pid2":"http://mathhub.info/FrameIT/frameworld/integrationtests?SampleSituationSpace/Root?fact2555","Dir":{"x":0.0,"y":1.0,"z":0.0,"magnitude":1.0,"sqrMagnitude":1.0},"Id":"http://mathhub.info/FrameIT/frameworld/integrationtests?SampleSituationSpace/Root?fact2556","Label":"[AB]","hasCustomLabel":false,"LabelId":0}],"RayFacts":[],"OnLineFacts":[],"AngleFacts":[],"MetaInf":{"http://mathhub.info/FrameIT/frameworld/integrationtests?SampleSituationSpace/Root?fact2554":{"workflow_id":0,"active":true},"http://mathhub.info/FrameIT/frameworld/integrationtests?SampleSituationSpace/Root?fact2555":{"workflow_id":1,"active":true},"http://mathhub.info/FrameIT/frameworld/integrationtests?SampleSituationSpace/Root?fact2556":{"workflow_id":2,"active":true}},"Workflow":[{"Id":"http://mathhub.info/FrameIT/frameworld/integrationtests?SampleSituationSpace/Root?fact2554","samestep":false,"steplink":3,"creation":true},{"Id":"http://mathhub.info/FrameIT/frameworld/integrationtests?SampleSituationSpace/Root?fact2555","samestep":true,"steplink":0,"creation":true},{"Id":"http://mathhub.info/FrameIT/frameworld/integrationtests?SampleSituationSpace/Root?fact2556","samestep":true,"steplink":0,"creation":true}],"marker":3,"worksteps":1,"backlog":0,"soft_resetted":false,"invoke":false,"MaxLabelId":2,"UnusedLabelIds":[]}
\ No newline at end of file
diff --git a/Assets/Stages/ValidationSets/TechDemo A_val.JSON b/Assets/Stages/ValidationSets/TechDemo A_val.JSON
index ec5383c37a94f70807968186aa8e0c970a66d9a5..6cfcf0ae254c279b1e0ecd16f7939dfdff2de387 100644
--- a/Assets/Stages/ValidationSets/TechDemo A_val.JSON	
+++ b/Assets/Stages/ValidationSets/TechDemo A_val.JSON	
@@ -1 +1 @@
-[{"MasterIDs":["http://mathhub.info/FrameIT/frameworld/integrationtests?SampleSituationSpace/SituationTheory2?fact1306"],"SolutionIndex":[],"ComparerString":"LineFactHightDirectionComparer"}]
\ No newline at end of file
+[{"MasterIDs":["http://mathhub.info/FrameIT/frameworld/integrationtests?SampleSituationSpace/Root?fact2556"],"SolutionIndex":[],"ComparerString":"LineFactHightDirectionComparer"}]
\ No newline at end of file