diff --git a/Assets/Scripts/CheckServer.cs b/Assets/Scripts/CheckServer.cs
index 376db259c6599116566caea9f7199ca6777ee7db..89524b97825de9ab32d5726ccc7ba6864acc21d6 100644
--- a/Assets/Scripts/CheckServer.cs
+++ b/Assets/Scripts/CheckServer.cs
@@ -149,7 +149,7 @@ void PrepareGame()
 
     IEnumerator ServerRoutine(String NetwAddress, int NA_id, double ics)
     {
-        UnityWebRequest request = UnityWebRequest.Get("http://" + NetwAddress + "/scroll/list");
+        using UnityWebRequest request = UnityWebRequest.Get("http://" + NetwAddress + "/scroll/list");
 
         yield return request.SendWebRequest();
         if (request.result == UnityWebRequest.Result.ConnectionError
@@ -160,10 +160,10 @@ IEnumerator ServerRoutine(String NetwAddress, int NA_id, double ics)
 
             while (true)
             {
-                request = UnityWebRequest.Get("http://" + NetwAddress + "/scroll/list");
-                yield return request.SendWebRequest();
-                if (request.result == UnityWebRequest.Result.ConnectionError
-                 || request.result == UnityWebRequest.Result.ProtocolError)
+                using UnityWebRequest request2 = UnityWebRequest.Get("http://" + NetwAddress + "/scroll/list");
+                yield return request2.SendWebRequest();
+                if (request2.result == UnityWebRequest.Result.ConnectionError
+                 || request2.result == UnityWebRequest.Result.ProtocolError)
                 {
                     // UnityEngine.Debug.Log("no running server");
                 }
diff --git a/Assets/Scripts/GenerateDemoFiles.cs b/Assets/Scripts/GenerateDemoFiles.cs
index 3f85b12101ea057a73660983773650b4a26df594..51fed2d1a788fee3c723b80dd029f55ab77ad075 100644
--- a/Assets/Scripts/GenerateDemoFiles.cs
+++ b/Assets/Scripts/GenerateDemoFiles.cs
@@ -7,6 +7,7 @@ public class GenerateDemoFiles
 {
     public static void GenerateAll()
     {
+        Debug.LogWarning("Generating and Overwriting Stage Files");
         GenerateDemoA();
         GenerateDemoB();
     }
diff --git a/Assets/Scripts/InteractionEngine/FactHandling/Fact.cs b/Assets/Scripts/InteractionEngine/FactHandling/Fact.cs
index ac4adb8d07ef63b9e53018e49adeba90a1c3309a..754e17ef9d22c3cb22fabdc05d0cdfba7af7dcbe 100644
--- a/Assets/Scripts/InteractionEngine/FactHandling/Fact.cs
+++ b/Assets/Scripts/InteractionEngine/FactHandling/Fact.cs
@@ -6,7 +6,7 @@
 using Newtonsoft.Json;
 using static JSONManager;
 using static CommunicationEvents;
-
+using JsonSubTypes;
 
 public class ParsingDictionary {
     //TODO? get rid of this, use reflection? instead, if possible
@@ -50,7 +50,7 @@ public static bool sendAdd(string path, string body, out string uri)
             Debug.Log("Sending to Server:\n" + body);
 
         //Put constructor parses stringbody to byteArray internally  (goofy workaround)
-        UnityWebRequest www = UnityWebRequest.Put(path, body);
+        using UnityWebRequest www = UnityWebRequest.Put(path, body);
         www.method = UnityWebRequest.kHttpVerbPOST;
         www.SetRequestHeader("Content-Type", "application/json");
         www.timeout = 1;
@@ -83,6 +83,12 @@ public static bool sendAdd(string path, string body, out string uri)
 /// <summary>
 /// %Fact representation of Unity; mostly mirrors Facts of MMT.
 /// </summary>
+[JsonConverter(typeof(JsonSubtypes), "s_type")]
+[JsonSubtypes.KnownSubType(typeof(PointFact), "PointFact")]
+[JsonSubtypes.KnownSubType(typeof(LineFact), "LineFact")]
+[JsonSubtypes.KnownSubType(typeof(RayFact), "RayFact")]
+[JsonSubtypes.KnownSubType(typeof(OnLineFact), "OnLineFact")]
+[JsonSubtypes.KnownSubType(typeof(AngleFact), "AngleFact")]
 public abstract class Fact
 {
     /// <summary>
@@ -92,6 +98,11 @@ public abstract class Fact
     [JsonIgnore]
     public GameObject Representation;
 
+    /// <value>
+    /// [ClassName] for JSON de-/serialization
+    /// </value>
+    public new string s_type;
+
     /// <value>
     /// Unique Id. e.g.: MMT URI
     /// </value>
@@ -470,6 +481,9 @@ protected override bool EquivalentWrapped(AbstractLineFact f1, AbstractLineFact
 /// </summary>
 public class PointFact : FactWrappedCRTP<PointFact>
 {
+    /// \copydoc Fact.s_type
+    public new string s_type = "PointFact";
+
     /// <summary> Position </summary>
     public Vector3 Point;
     /// <summary> Orientation for <see cref="Fact.Representation"/> </summary>
@@ -600,6 +614,9 @@ protected override bool EquivalentWrapped(PointFact f1, PointFact f2)
 /// </summary>
 public class LineFact : AbstractLineFactWrappedCRTP<LineFact>
 {
+    /// \copydoc Fact.s_type
+    public new string s_type = "LineFact";
+
     /// <summary> Distance between <see cref="AbstractLineFact.Pid1"/> and <see cref="AbstractLineFact.Pid2"/></summary>
     public float Distance;
 
@@ -722,6 +739,9 @@ private void SetDistance()
 /// </summary>
 public class RayFact : AbstractLineFactWrappedCRTP<RayFact>
 {
+    /// \copydoc Fact.s_type
+    public new string s_type = "RayFact";
+
     /// <summary> \copydoc Fact.Fact </summary>
     public RayFact() : base() { }
 
@@ -822,6 +842,9 @@ protected override bool EquivalentWrapped(RayFact f1, RayFact f2)
 /// </summary>
 public class OnLineFact : FactWrappedCRTP<OnLineFact>
 {
+    /// \copydoc Fact.s_type
+    public new string s_type = "OnLineFact";
+
     public string
         /// <summary> <see cref="PointFact"/>.<see cref="Fact.Id">Id</see> </summary>
         Pid,
@@ -976,6 +999,9 @@ protected override bool EquivalentWrapped(OnLineFact f1, OnLineFact f2)
 /// </summary>
 public class AngleFact : FactWrappedCRTP<AngleFact>
 {
+    /// \copydoc Fact.s_type
+    public new string s_type = "AngleFact";
+
     /// @{ <summary>
     /// One <see cref="Fact.Id">Id</see> of three <see cref="PointFact">PointFacts</see> defining Angle [<see cref="Pid1"/>, <see cref="Pid2"/>, <see cref="Pid3"/>].
     /// </summary>
diff --git a/Assets/Scripts/InteractionEngine/FactHandling/FactOrganizer.cs b/Assets/Scripts/InteractionEngine/FactHandling/FactOrganizer.cs
index e1068f5512a989f33c5e7fd3dff1e3aceb427ef3..1f23ea11439d4969b75b01029afc3e9956c29dd3 100644
--- a/Assets/Scripts/InteractionEngine/FactHandling/FactOrganizer.cs
+++ b/Assets/Scripts/InteractionEngine/FactHandling/FactOrganizer.cs
@@ -24,22 +24,26 @@ public class FactOrganizer
     /// - <c>Key</c>: <see cref="Fact.Id"/>
     /// - <c>Value</c>: <see cref="Fact"/>
     /// </summary>
+    [JsonProperty]
     protected internal Dictionary<string, Fact> FactDict;
 
     /// <summary>
     /// - <c>Key</c>: <see cref="Fact.Id"/>
     /// - <c>Value</c>: <see cref="meta"/>
     /// </summary>
+    [JsonProperty]
     protected internal Dictionary<string, meta> MetaInf = new Dictionary<string, meta>();
 
     /// <summary>
     /// Keeps track of insertion/ deletion/ etc. operations for <see cref="undo"/> and <see cref="redo"/>
     /// </summary>
+    [JsonProperty]
     protected internal List<stepnote> Workflow = new List<stepnote>();
 
     /// <summary>
     /// Notes position in <see cref="Workflow"/> for <see cref="undo"/> and <see cref="redo"/>; the pointed to element is non-acitve
     /// </summary>
+    [JsonProperty]
     protected internal int marker = 0;
 
     /// <summary>
@@ -48,6 +52,7 @@ public class FactOrganizer
     /// One step can consist of multiple operations.
     /// <seealso cref="stepnote"/>
     /// </summary>
+    [JsonProperty]
     protected internal int worksteps = 0;
     /// <summary>
     /// Backlock logic redundant - for convinience.
@@ -55,33 +60,38 @@ public class FactOrganizer
     /// One step can consist of multiple operations.
     /// <seealso cref="stepnote"/>
     /// </summary>
+    [JsonProperty]
     protected internal int backlog = 0;
 
     /// <summary>
     /// Set to <c>true</c> if recently been resetted.
     /// </summary>
+    [JsonProperty]
     protected internal bool soft_resetted = false;
 
     /// <summary>
     /// If set to <c>true</c>, <see cref="Remove(string, bool)"/> and <see cref="Add(Fact, out bool, bool)"/> will invoke <see cref="CommunicationEvents.RemoveFactEvent"/> and <see cref="CommunicationEvents.AddFactEvent"/> respectively.
     /// </summary>
+    [JsonProperty]
     public bool invoke;
 
     // TODO? SE: better seperation
     /// <summary>
     /// Keeps track of maximum <see cref="Fact.LabelId"/> for <see cref="Fact.generateLabel"/>.
     /// </summary>
+    [JsonProperty]
     protected internal int MaxLabelId = 0;
     /// <summary>
     /// Stores unused <see cref="Fact.LabelId"/> for <see cref="Fact.generateLabel"/>, wich were freed in <see cref="Fact.freeAutoLabel"/> for later reuse to keep naming space compact.
     /// </summary>
+    [JsonProperty]
     protected internal SortedSet<int> UnusedLabelIds = new SortedSet<int>();
 
     // TODO: put this stuff in Interface
     /// @{ <summary>
     /// For <see cref="store(string, List<Directories>, bool, bool)"/> and <see cref="load(ref FactOrganizer, bool, string, List<Directories>, bool, out Dictionary<string, string>)"/>
     /// </summary>
-    private string path = null;
+    protected internal string path = null;
     private static List<Directories>
         hierState = new List<Directories> { Directories.FactStateMachines };
     /// @}
@@ -174,6 +184,15 @@ public meta(int workflow_id, bool active = true)
         }
     }
 
+    /// <summary>
+    /// Only used by <see cref="JsonConverter"/> to initiate empty instance.
+    /// </summary>
+    public FactOrganizer()
+    {
+        FactDict = new Dictionary<string, Fact>();
+        this.invoke = false;
+    }
+
     /// <summary>
     /// Standard Constructor for empty, ready to use <see cref="FactOrganizer"/>
     /// </summary>
@@ -185,89 +204,61 @@ public FactOrganizer(bool invoke = false)
     }
 
     /// <summary>
-    /// Used to parse <see cref="JsonReader"/>/ <see cref="JsonWriter"/> readable and creatable <see cref="PublicFactOrganizer">format</see> of this <see cref="FactOrganizer">class</see> to an actual instance of this <see cref="FactOrganizer">class</see>.
-    /// <remarks>TODO: repair and use <see cref="JSONManager.JsonInheritenceConverter<T>"/> o.s. to bypass all of this _hardwired_ implementation, including the entirety of <see cref="PublicFactOrganizer"/></remarks>
+    /// Used to parse read-in <see cref="FactOrganizer"/> by <see cref="JsonReader"/> and make <see cref="Fact.Id"/> conform.
     /// </summary>
-    /// <param name="set">to be parsed into, will be overwritten. 
-    /// If <c><paramref name="invoke"/> = true</c>, <paramref name="set"/> should be <see cref="StageStatic.stage.factState"/>, outherwise <see cref="InvokeFactEvent(bool, string)"/> will cause <see cref="Exception">Exceptions</see> when it invokes Events of <see cref="CommunicationEvents"/></param>
-    /// <param name="exposed">instance to be parsed</param>
+    /// <param name="target">to be parsed into, will be overwritten. 
+    /// If <c><paramref name="invoke"/> = true</c>, <paramref name="target"/> should be <see cref="StageStatic.stage.factState"/>, outherwise <see cref="InvokeFactEvent(bool, string)"/> will cause <see cref="Exception">Exceptions</see> when it invokes Events of <see cref="CommunicationEvents"/></param>
+    /// <param name="source">instance to be parsed</param>
     /// <param name="invoke">see <see cref="invoke"/></param>
-    /// <param name="old_to_new">generated to map <c>Key</c> <see cref="Fact.Id"/> of <paramref name="exposed"/> to corresponding <c>Value</c> <see cref="Fact.Id"/> of <paramref name="set"/></param>.
-    private static void FactOrganizerFromPublic(ref FactOrganizer set, PublicFactOrganizer exposed, bool invoke, out Dictionary<string, string> old_to_new)
+    /// <param name="old_to_new">generated to map <c>Key</c> <see cref="Fact.Id"/> of <paramref name="source"/> to corresponding <c>Value</c> <see cref="Fact.Id"/> of <paramref name="target"/></param>.
+    protected static void ReInitializeFactOrganizer(ref FactOrganizer target, FactOrganizer source, bool invoke, out Dictionary<string, string> old_to_new)
     {
         // TODO: other strategy needed when MMT save/load supported
         // map old URIs to new ones
         old_to_new = new Dictionary<string, string>();
-        // combine T:Fact to Fact
-        Dictionary<string, Fact> old_FactDict = new Dictionary<string, Fact>();
-
-        /*
-        FieldInfo[] finfos = typeof(PublicFactOrganizer).GetFields();
-        foreach(string type in PublicFactOrganizer.WatchedFacts)
-            AddListToDict(
-                finfos.First(x => x.Name.Remove(x.Name.Length-1) == type)
-                .GetValue(exposed)
-                as List<Fact>);
-        */
-
-        AddListToDict(exposed.PointFacts);
-        AddListToDict(exposed.LineFacts);
-        AddListToDict(exposed.RayFacts);
-        AddListToDict(exposed.AngleFacts);
-        AddListToDict(exposed.OnLineFacts);
-
-
+        
         // initiate
-        set.invoke = invoke;
-        set.MaxLabelId = exposed.MaxLabelId;
-        set.UnusedLabelIds = exposed.UnusedLabelIds;
-        set.FactDict = new Dictionary<string, Fact>();
+        target.invoke = invoke;
+        target.MaxLabelId = source.MaxLabelId;
+        target.UnusedLabelIds = source.UnusedLabelIds;
+        target.FactDict = new Dictionary<string, Fact>();
 
         // work Workflow
-        foreach (var sn in exposed.Workflow)
+        foreach (var sn in source.Workflow)
         {
             if (sn.creation)
             // Add
             {
                 Fact add;
                 if (old_to_new.ContainsKey(sn.Id))
-                    add = set.FactDict[old_to_new[sn.Id]];
+                    add = target.FactDict[old_to_new[sn.Id]];
                 else
                 {
-                    Fact old_Fact = old_FactDict[sn.Id];
+                    Fact old_Fact = source.FactDict[sn.Id];
 
                     add = old_Fact.GetType()
                         .GetConstructor(new Type[] { old_Fact.GetType(), old_to_new.GetType(), typeof(FactOrganizer) })
-                        .Invoke(new object[] { old_Fact, old_to_new, set })
+                        .Invoke(new object[] { old_Fact, old_to_new, target })
                         as Fact;
 
                     old_to_new.Add(sn.Id, add.Id);
                 }
 
-                set.Add(add, out _, sn.samestep);
+                target.Add(add, out _, sn.samestep);
             }
             else if (old_to_new.ContainsKey(sn.Id))
             // Remove
             {
-                Fact remove = set.FactDict[old_to_new[sn.Id]];
-                set.Remove(remove, sn.samestep);
+                Fact remove = target.FactDict[old_to_new[sn.Id]];
+                target.Remove(remove, sn.samestep);
             }
         }
 
         // set un-redo state
-        while (set.backlog < exposed.backlog)
-            set.undo();
-
-        set.soft_resetted = exposed.soft_resetted;
-
+        while (target.backlog < source.backlog)
+            target.undo();
 
-        // === local functions ===
-
-        void AddListToDict<T>(List<T> list) where T : Fact
-        {
-            foreach (T ft in list)
-                old_FactDict.Add(ft.Id, ft);
-        }
+        target.soft_resetted = source.soft_resetted;
     }
 
     /// <summary>
@@ -688,10 +679,8 @@ public void store(string name, List<Directories> hierarchie = null, bool use_ins
 
         hierarchie.RemoveRange(hierarchie.Count - hierState.Count, hierState.Count);
 
-        // note: max depth for "this" is 2, since Fact has non-serilazible member, that is not yet ignored (see Fact.[JasonIgnore] and JSONManager.WriteToJsonFile)
-        // using public dummy class to circumvent deserialiation JsonInheritanceProblem (see todos @PublicFactOrganizer)
         if (!exists || overwrite)
-            JSONManager.WriteToJsonFile(path, new PublicFactOrganizer(this), 0);
+            JSONManager.WriteToJsonFile(path, this);
 
         path = path_o;
     }
@@ -707,8 +696,8 @@ public static bool load(ref FactOrganizer set, bool draw, string name, List<Dire
         if (!loadable)
             return false;
 
-        PublicFactOrganizer de_json = JSONManager.ReadFromJsonFile<PublicFactOrganizer>(path);
-        FactOrganizerFromPublic(ref set, de_json, draw, out old_to_new);
+        FactOrganizer de_json = JSONManager.ReadFromJsonFile<FactOrganizer>(path);
+        ReInitializeFactOrganizer(ref set, de_json, draw, out old_to_new);
         set.path = path;
 
         return true;
@@ -868,150 +857,4 @@ public bool DynamiclySolved(
         return MissingElementsCount == 0;
     }
 
-}
-
-
-// TODO? PERF? SE? JsonInheritanceProblem: scrap this hardwired class and implement dynamic approach with JsonConverter (see: JSONManager.JsonInheritenceConverter)
-/// <summary>
-/// <see cref="JsonReader"/>/ <see cref="JsonWriter"/> readable and creatable format.
-/// TODO? PERF? SE? JsonInheritanceProblem: scrap this hardwired class and implement dynamic approach with JsonConverter (see <see cref="JSONManager.JsonInheritenceConverter<T>"/>)
-/// </summary>
-public class PublicFactOrganizer : FactOrganizer
-// public class exposing all protected members of FactOrganizer for JSON conversion
-{
-    // TODO? check once if those are all with reflection
-    protected internal static List<string> WatchedFacts = new List<string>(new string[] {
-        "PointFact",
-        "LineFact",
-        "RayFact",
-        "OnLineFact",
-        "AngleFact"
-    });
-
-    public List<PointFact> PointFacts = new List<PointFact>();
-    public List<LineFact> LineFacts = new List<LineFact>();
-    public List<RayFact> RayFacts = new List<RayFact>();
-    public List<OnLineFact> OnLineFacts = new List<OnLineFact>();
-    public List<AngleFact> AngleFacts = new List<AngleFact>();
-
-    public new Dictionary<string, meta> MetaInf = new Dictionary<string, meta>();
-    public new List<stepnote> Workflow = new List<stepnote>();
-    // notes position in Workflow for un-/redo; the pointed to element is non-acitve
-    public new int marker = 0;
-    // backlock logic for convinience
-    public new int worksteps = 0;
-    public new int backlog = 0;
-    // set if recently been resetted
-    public new bool soft_resetted = false;
-    // InvokeEvents?
-    public new bool invoke;
-    // TODO? SE: better seperation
-    // Label Managment; Communicates with Facts
-    public new int MaxLabelId = 0;
-    public new SortedSet<int> UnusedLabelIds = new SortedSet<int>();
-
-    public new struct stepnote
-    {
-        // Fact.Id
-        public string Id;
-        // true if this Fact has been created in the same step as the last one
-        //      steproot[false] (=> steptail[true])*
-        public bool samestep;
-        // reference to steproot/ after steptail-end
-        public int steplink;
-        // distincts creation and deletion
-        public bool creation;
-
-        public stepnote(string Id, bool samestep, int steplink, bool creation)
-        {
-            this.Id = Id;
-            this.samestep = samestep;
-            this.steplink = steplink;
-            this.creation = creation;
-        }
-
-        /*public stepnote(string Id, bool samestep, bool creation, PublicFactOrganizer that)
-        {
-            this.Id = Id;
-            this.samestep = samestep;
-            this.creation = creation;
-
-            if (samestep)
-            // steplink = !first_steptail ? previous.steplink : steproot
-            {
-                stepnote prev = that.Workflow[that.marker - 1];
-                this.steplink = prev.samestep ? prev.steplink : that.marker - 1;
-            }
-            else
-                // steproot sets steplink after itself (end of steptail)
-                this.steplink = that.marker + 1;
-
-        }*/
-    }
-
-    public new struct meta
-    {
-        // TODO? -> public int last_occurence for safe_dependencies
-
-        // reference to first occurrence in Workflow
-        public int workflow_id;
-        // keeps track wether Fact is currently in Scene
-        public bool active;
-
-        public meta(int workflow_id, bool active)
-        {
-            this.workflow_id = workflow_id;
-            this.active = active;
-        }
-    }
-
-    public PublicFactOrganizer()
-    {
-        FactDict = new Dictionary<string, Fact>();
-        this.invoke = false;
-    }
-
-    protected internal PublicFactOrganizer(FactOrganizer expose)
-    {
-        // expose all non-abstract members
-        marker = expose.marker;
-        worksteps = expose.worksteps;
-        backlog = expose.backlog;
-        soft_resetted = expose.soft_resetted;
-        invoke = expose.invoke;
-        MaxLabelId = expose.MaxLabelId;
-        UnusedLabelIds = expose.UnusedLabelIds;
-
-        foreach (var sn in expose.Workflow)
-            Workflow.Add(new stepnote(sn.Id, sn.samestep, sn.steplink, sn.creation));
-
-        foreach (var mt in expose.MetaInf)
-            MetaInf.Add(mt.Key, new meta(mt.Value.workflow_id, mt.Value.active));
-
-        // expose and deserialize all abstract members
-        foreach (var fc in expose.FactDict.Values)
-        // keys are Fact.Id
-        {
-            switch (fc.GetType().Name)
-            {
-                case "PointFact":
-                    PointFacts.Add(fc as PointFact);
-                    break;
-                case "LineFact":
-                    LineFacts.Add(fc as LineFact);
-                    break;
-                case "RayFact":
-                    RayFacts.Add(fc as RayFact);
-                    break;
-                case "OnLineFact":
-                    OnLineFacts.Add(fc as OnLineFact);
-                    break;
-                case "AngleFact":
-                    AngleFacts.Add(fc as AngleFact);
-                    break;
-                default:
-                    throw new System.NotImplementedException();
-            }
-        }
-    }
 }
\ No newline at end of file
diff --git a/Assets/Scripts/InteractionEngine/FactHandling/SolutionOrganizer.cs b/Assets/Scripts/InteractionEngine/FactHandling/SolutionOrganizer.cs
index 3632c9f89de1e6acedd303452d03a9045629545b..1aa4f8bf94243fd91884e77590ac41154959cc57 100644
--- a/Assets/Scripts/InteractionEngine/FactHandling/SolutionOrganizer.cs
+++ b/Assets/Scripts/InteractionEngine/FactHandling/SolutionOrganizer.cs
@@ -20,11 +20,6 @@ private const string
         endingVal = "_val";
     /// @}
 
-    /// <summary>
-    /// \copydoc FactOrganizer.path
-    /// Additional value for <see cref="ValidationSet"/>
-    /// </summary>
-    private string path_Val = null;
     /// <summary>
     /// \copydoc FactOrganizer.hierState
     /// Additional value for <see cref="ValidationSet"/>
@@ -130,6 +125,12 @@ public bool IsEmpty()
         }
     }
 
+    /// \copydoc FactOrganizer.FactOrganizer()
+    public SolutionOrganizer(): base()
+    {
+        ValidationSet = new List<SubSolution>();
+    }
+
     /// \copydoc FactOrganizer.FactOrganizer(bool)
     public SolutionOrganizer(bool invoke = false): base(invoke)
     {
@@ -151,20 +152,18 @@ public List<Fact> getMasterFactsByIndex (int i)
         hierarchie ??= new List<Directories>();
         hierarchie.AddRange(hierVal.AsEnumerable());
 
-        base.store(name + endingSol, hierarchie, use_install_folder, overwrite);
-
-        string path_o = path_Val;
-        path_Val = CreatePathToFile(out bool exists, name + endingVal, "JSON", hierarchie, use_install_folder);
+        string path_o = path;
+        path = CreatePathToFile(out bool exists, name + endingVal, "JSON", hierarchie, use_install_folder);
         hierarchie.RemoveRange(hierarchie.Count - hierVal.Count, hierVal.Count);
 
         if (exists && !overwrite)
         {
-            path_Val = path_o;
+            path = path_o;
             return;
         }
 
-        JSONManager.WriteToJsonFile(path_Val, this.ValidationSet, 0);
-        path_Val = path_o;
+        JSONManager.WriteToJsonFile(path, this);
+        path = path_o;
     }
 
     public static bool load(ref SolutionOrganizer set, bool draw, string name, List<Directories> hierarchie = null, bool use_install_folder = false)
@@ -173,33 +172,23 @@ public static bool load(ref SolutionOrganizer set, bool draw, string name, List<
         hierarchie.AddRange(hierVal.AsEnumerable());
 
         string path = CreatePathToFile(out bool loadable, name + endingVal, "JSON", hierarchie, use_install_folder);
+        
+        hierarchie.RemoveRange(hierarchie.Count - hierVal.Count, hierVal.Count);
         if (!loadable)
-        {
-            hierarchie.RemoveRange(hierarchie.Count - hierVal.Count, hierVal.Count);
             return false;
-        }
 
 
         FactOrganizer save = StageStatic.stage.factState;
         StageStatic.stage.factState = new SolutionOrganizer(false) as FactOrganizer;
 
-        loadable = FactOrganizer.load(ref StageStatic.stage.player_record.factState
-            , draw, name + endingSol, hierarchie, use_install_folder, out Dictionary<string, string> old_to_new);
-
-        if (loadable)
-        {
-            set = (SolutionOrganizer)StageStatic.stage.factState;
-            set.path_Val = path;
-        }
+        SolutionOrganizer JsonTmp = JSONManager.ReadFromJsonFile <SolutionOrganizer> (path);
+        ReInitializeFactOrganizer(ref StageStatic.stage.player_record.factState, JsonTmp, draw, out Dictionary<string, string> old_to_new);
 
+        set = (SolutionOrganizer)StageStatic.stage.factState;
+        set.path = path;
         StageStatic.stage.factState = save;
-        hierarchie.RemoveRange(hierarchie.Count - hierVal.Count, hierVal.Count);
-        if (!loadable)
-            return false;
-
 
-        var JsonTmp = JSONManager.ReadFromJsonFile <List<SubSolution>> (path);
-        foreach (var element in JsonTmp)
+        foreach (var element in JsonTmp.ValidationSet)
         // Parse and add
         {
             element.MasterIDs = new HashSet<string>(element.MasterIDs.Select(k => old_to_new[k]));
@@ -212,8 +201,8 @@ public static bool load(ref SolutionOrganizer set, bool draw, string name, List<
     public new void delete()
     {
         base.delete();
-        if (System.IO.File.Exists(path_Val))
-            System.IO.File.Delete(path_Val);
+        if (System.IO.File.Exists(path))
+            System.IO.File.Delete(path);
     }
     /// @}
 }
diff --git a/Assets/Scripts/InventoryStuff/ScrollDetails.cs b/Assets/Scripts/InventoryStuff/ScrollDetails.cs
index 08c7b7b8d8c8b26b87d949b2773d733ed6792498..355b6b1c20de5a3411b7df3e61a808d956b67075 100644
--- a/Assets/Scripts/InventoryStuff/ScrollDetails.cs
+++ b/Assets/Scripts/InventoryStuff/ScrollDetails.cs
@@ -114,7 +114,7 @@ IEnumerator sendView(string endpoint)
     {
         string body = prepareScrollAssignments();
 
-        UnityWebRequest www = UnityWebRequest.Put(ServerAdress + endpoint, body);
+        using UnityWebRequest www = UnityWebRequest.Put(ServerAdress + endpoint, body);
         www.method = UnityWebRequest.kHttpVerbPOST;
         www.SetRequestHeader("Content-Type", "application/json");
         var async = www.SendWebRequest();
diff --git a/Assets/Scripts/Loading/StreamingAssetLoader.cs b/Assets/Scripts/Loading/StreamingAssetLoader.cs
index 1082cb960da77b2e33ac0afc542f2fd9dcc8fc80..db78c65a17060460fdea686b4cacf7aee5673593 100644
--- a/Assets/Scripts/Loading/StreamingAssetLoader.cs
+++ b/Assets/Scripts/Loading/StreamingAssetLoader.cs
@@ -254,7 +254,7 @@ public static void RereadFileUWR(string pathfolders, string fileName, int toMain
 
         string sourcePath = Path.Combine(Application.streamingAssetsPath, pathfolders);
         sourcePath = Path.Combine(sourcePath, fileName);
-        var loadingRequest = UnityWebRequest.Get(sourcePath);
+        using var loadingRequest = UnityWebRequest.Get(sourcePath);
         loadingRequest.SendWebRequest();
         while (!loadingRequest.isDone)
         {
@@ -385,7 +385,7 @@ public static void RereadFileUW4(string pathfolders, string fileName, string des
 
             string sourcePath = Path.Combine(Application.streamingAssetsPath, pathfolders);
             sourcePath = Path.Combine(sourcePath, fileName);
-            var loadingRequest = UnityWebRequest.Get(sourcePath);
+            using var loadingRequest = UnityWebRequest.Get(sourcePath);
             loadingRequest.SendWebRequest();
             while (!loadingRequest.isDone)
             {
diff --git a/Assets/Scripts/UI/NetwMenue/WaitingForLocalMMT.cs b/Assets/Scripts/UI/NetwMenue/WaitingForLocalMMT.cs
index 6ce08fbc7c6b956f6ef4439df232803ba3590d03..9d54d8e1dd8801dadbe9a632cb00fc27d79c61b3 100644
--- a/Assets/Scripts/UI/NetwMenue/WaitingForLocalMMT.cs
+++ b/Assets/Scripts/UI/NetwMenue/WaitingForLocalMMT.cs
@@ -6,8 +6,8 @@
 
 public class WaitingForLocalMMT : MonoBehaviour
 {
-   
-    
+
+
 
     private void Start()
     {
@@ -17,9 +17,9 @@ private void Start()
 
     private void Update()
     {
-        
 
-      
+
+
 
     }
     private void OnEnable()
@@ -36,7 +36,7 @@ void PrepareGame()
     {
         if (true)
         {
-            
+
             CommunicationEvents.ServerRunning = true;
             UnityEngine.Debug.Log("set server runs");
         }
@@ -54,27 +54,27 @@ IEnumerator ServerRoutine()
     {
         while (true)
         {
-                
 
-            UnityWebRequest request = UnityWebRequest.Get(CommunicationEvents.ServerAddressLocal + "/scroll/list");
-                yield return request.SendWebRequest();
-                if (request.result == UnityWebRequest.Result.ConnectionError
-                 || request.result == UnityWebRequest.Result.ProtocolError)
-                {
-                    // UnityEngine.Debug.Log("no running server");
-                }
-                else
-                {
-                    //break;
-                    PrepareGame();
-                }
+
+            using UnityWebRequest request = UnityWebRequest.Get(CommunicationEvents.ServerAddressLocal + "/scroll/list");
+            yield return request.SendWebRequest();
+            if (request.result == UnityWebRequest.Result.ConnectionError
+             || request.result == UnityWebRequest.Result.ProtocolError)
+            {
+                // UnityEngine.Debug.Log("no running server");
+            }
+            else
+            {
+                //break;
+                PrepareGame();
+            }
+
 
 
 
-                
 
-                //Wait for 2 seconds
-                yield return new WaitForSecondsRealtime(2f);
+            //Wait for 2 seconds
+            yield return new WaitForSecondsRealtime(2f);
             print("waiting");
 
             yield return null;
diff --git a/Assets/Scripts/UI/NetwMenue/updateMouseCursor.cs b/Assets/Scripts/UI/NetwMenue/updateMouseCursor.cs
index a7f9118dafc6a06c93ab7fcc4f834c46844a9b03..9a33a7579e83ad7802b7ed9087ecb01f87f49a0d 100644
--- a/Assets/Scripts/UI/NetwMenue/updateMouseCursor.cs
+++ b/Assets/Scripts/UI/NetwMenue/updateMouseCursor.cs
@@ -37,15 +37,14 @@ public class updateMouseCursor : MonoBehaviour
 
     void Start()
     {
-        
+        setMouse();
     }
 
     private void Update()
     {
-        setMouse();
+
     }
 
-  
 
     public void setMouse()
     {
diff --git a/Assets/Stages/TechDemo A.JSON b/Assets/Stages/TechDemo A.JSON
index 4fcab40ec8aff17e6875fbe727ec39adf34d547a..56b662f2dab91c984d9742e55e8533967f666ae6 100644
--- a/Assets/Stages/TechDemo A.JSON	
+++ b/Assets/Stages/TechDemo A.JSON	
@@ -1 +1 @@
-{"category":"Demo Category","number":0,"name":"TechDemo A","description":"Tree Stage","scene":"RiverWorld","use_install_folder":true,"hierarchie":[],"player_record_list":{},"player_record":{}}
\ No newline at end of file
+{"category":"Demo Category","number":0,"name":"TechDemo A","description":"Tree Stage","scene":"RiverWorld","use_install_folder":true,"hierarchie":[],"player_record_list":{},"player_record":{"solved":false,"date":-8585439463646016511,"seconds":0.0,"name":"TechDemo A_save"}}
\ No newline at end of file
diff --git a/Assets/Stages/TechDemo B.JSON b/Assets/Stages/TechDemo B.JSON
index 93dca637ef60dc021e2b09a39ded027157a7cf80..29f3be06184b1d926d9ed99370977e86776c64a3 100644
--- a/Assets/Stages/TechDemo B.JSON	
+++ b/Assets/Stages/TechDemo B.JSON	
@@ -1 +1 @@
-{"category":"Demo Category","number":0,"name":"TechDemo B","description":"River Stage","scene":"RiverWorld","use_install_folder":true,"hierarchie":[],"player_record_list":{},"player_record":{}}
\ No newline at end of file
+{"category":"Demo Category","number":0,"name":"TechDemo B","description":"River Stage","scene":"RiverWorld","use_install_folder":true,"hierarchie":[],"player_record_list":{},"player_record":{"solved":false,"date":-8585439463643952992,"seconds":0.0,"name":"TechDemo B_save"}}
\ No newline at end of file
diff --git a/Assets/Stages/ValidationSets/FactStateMachines.meta b/Assets/Stages/ValidationSets/FactStateMachines.meta
deleted file mode 100644
index 68a821ae6e3583c321ba3eeca2f1db3497cbe36b..0000000000000000000000000000000000000000
--- a/Assets/Stages/ValidationSets/FactStateMachines.meta
+++ /dev/null
@@ -1,8 +0,0 @@
-fileFormatVersion: 2
-guid: a751eddeb4588f44f83b26062e18ef32
-folderAsset: yes
-DefaultImporter:
-  externalObjects: {}
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 
diff --git a/Assets/Stages/ValidationSets/FactStateMachines/TechDemo A_sol.JSON b/Assets/Stages/ValidationSets/FactStateMachines/TechDemo A_sol.JSON
deleted file mode 100644
index bb70def42423fc33cc6da907f24baf07390b79ec..0000000000000000000000000000000000000000
--- a/Assets/Stages/ValidationSets/FactStateMachines/TechDemo A_sol.JSON	
+++ /dev/null
@@ -1 +0,0 @@
-{"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?fact146","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?fact147","Label":"B","hasCustomLabel":false,"LabelId":2}],"LineFacts":[{"Distance":6.0,"Pid1":"http://mathhub.info/FrameIT/frameworld/integrationtests?SampleSituationSpace/Root?fact146","Pid2":"http://mathhub.info/FrameIT/frameworld/integrationtests?SampleSituationSpace/Root?fact147","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?fact148","Label":"[AB]","hasCustomLabel":false,"LabelId":0}],"RayFacts":[],"OnLineFacts":[],"AngleFacts":[],"MetaInf":{"http://mathhub.info/FrameIT/frameworld/integrationtests?SampleSituationSpace/Root?fact146":{"workflow_id":0,"active":true},"http://mathhub.info/FrameIT/frameworld/integrationtests?SampleSituationSpace/Root?fact147":{"workflow_id":1,"active":true},"http://mathhub.info/FrameIT/frameworld/integrationtests?SampleSituationSpace/Root?fact148":{"workflow_id":2,"active":true}},"Workflow":[{"Id":"http://mathhub.info/FrameIT/frameworld/integrationtests?SampleSituationSpace/Root?fact146","samestep":false,"steplink":3,"creation":true},{"Id":"http://mathhub.info/FrameIT/frameworld/integrationtests?SampleSituationSpace/Root?fact147","samestep":true,"steplink":0,"creation":true},{"Id":"http://mathhub.info/FrameIT/frameworld/integrationtests?SampleSituationSpace/Root?fact148","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/FactStateMachines/TechDemo A_sol.JSON.meta b/Assets/Stages/ValidationSets/FactStateMachines/TechDemo A_sol.JSON.meta
deleted file mode 100644
index 33a84c6201ed5542f3b37d8952a2f72aa183e3ab..0000000000000000000000000000000000000000
--- a/Assets/Stages/ValidationSets/FactStateMachines/TechDemo A_sol.JSON.meta	
+++ /dev/null
@@ -1,7 +0,0 @@
-fileFormatVersion: 2
-guid: bcd408b32febdb349a56082aca96f36d
-TextScriptImporter:
-  externalObjects: {}
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 
diff --git a/Assets/Stages/ValidationSets/FactStateMachines/TechDemo B_sol.JSON b/Assets/Stages/ValidationSets/FactStateMachines/TechDemo B_sol.JSON
deleted file mode 100644
index 158ef3dbab977c624865eb75a92dcbb216cd550d..0000000000000000000000000000000000000000
--- a/Assets/Stages/ValidationSets/FactStateMachines/TechDemo B_sol.JSON	
+++ /dev/null
@@ -1 +0,0 @@
-{"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?fact149","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?fact150","Label":"B","hasCustomLabel":false,"LabelId":2}],"LineFacts":[{"Distance":6.0,"Pid1":"http://mathhub.info/FrameIT/frameworld/integrationtests?SampleSituationSpace/Root?fact149","Pid2":"http://mathhub.info/FrameIT/frameworld/integrationtests?SampleSituationSpace/Root?fact150","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?fact151","Label":"[AB]","hasCustomLabel":false,"LabelId":0}],"RayFacts":[],"OnLineFacts":[],"AngleFacts":[],"MetaInf":{"http://mathhub.info/FrameIT/frameworld/integrationtests?SampleSituationSpace/Root?fact149":{"workflow_id":0,"active":true},"http://mathhub.info/FrameIT/frameworld/integrationtests?SampleSituationSpace/Root?fact150":{"workflow_id":1,"active":true},"http://mathhub.info/FrameIT/frameworld/integrationtests?SampleSituationSpace/Root?fact151":{"workflow_id":2,"active":true}},"Workflow":[{"Id":"http://mathhub.info/FrameIT/frameworld/integrationtests?SampleSituationSpace/Root?fact149","samestep":false,"steplink":3,"creation":true},{"Id":"http://mathhub.info/FrameIT/frameworld/integrationtests?SampleSituationSpace/Root?fact150","samestep":true,"steplink":0,"creation":true},{"Id":"http://mathhub.info/FrameIT/frameworld/integrationtests?SampleSituationSpace/Root?fact151","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/FactStateMachines/TechDemo B_sol.JSON.meta b/Assets/Stages/ValidationSets/FactStateMachines/TechDemo B_sol.JSON.meta
deleted file mode 100644
index 9ebf9eea69da244d7f3171ded5804565cdfd98dc..0000000000000000000000000000000000000000
--- a/Assets/Stages/ValidationSets/FactStateMachines/TechDemo B_sol.JSON.meta	
+++ /dev/null
@@ -1,7 +0,0 @@
-fileFormatVersion: 2
-guid: 34ecf0b680adf5646b4c1d9c99a01533
-TextScriptImporter:
-  externalObjects: {}
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 
diff --git a/Assets/Stages/ValidationSets/Stages.meta b/Assets/Stages/ValidationSets/Stages.meta
deleted file mode 100644
index 43bcc7a08fec79b3e3ff890f27c4b6c66e0a86c5..0000000000000000000000000000000000000000
--- a/Assets/Stages/ValidationSets/Stages.meta
+++ /dev/null
@@ -1,8 +0,0 @@
-fileFormatVersion: 2
-guid: c728017971edf724ebda5a064b672466
-folderAsset: yes
-DefaultImporter:
-  externalObjects: {}
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 
diff --git a/Assets/Stages/ValidationSets/Stages/Stages.meta b/Assets/Stages/ValidationSets/Stages/Stages.meta
deleted file mode 100644
index 6bb7e222f2a2684d66ca5257d5fe66f80d831a93..0000000000000000000000000000000000000000
--- a/Assets/Stages/ValidationSets/Stages/Stages.meta
+++ /dev/null
@@ -1,8 +0,0 @@
-fileFormatVersion: 2
-guid: 580fe9dede781264387b75a16475fb84
-folderAsset: yes
-DefaultImporter:
-  externalObjects: {}
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 
diff --git a/Assets/Stages/ValidationSets/Stages/Stages/Stages.meta b/Assets/Stages/ValidationSets/Stages/Stages/Stages.meta
deleted file mode 100644
index acef2c93fd00969a6d94afde7fb130178bf7ead9..0000000000000000000000000000000000000000
--- a/Assets/Stages/ValidationSets/Stages/Stages/Stages.meta
+++ /dev/null
@@ -1,8 +0,0 @@
-fileFormatVersion: 2
-guid: 15db50aef163ca140bd83ffd46dd85e2
-folderAsset: yes
-DefaultImporter:
-  externalObjects: {}
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 
diff --git a/Assets/Stages/ValidationSets/Stages/Stages/Stages/Stages.meta b/Assets/Stages/ValidationSets/Stages/Stages/Stages/Stages.meta
deleted file mode 100644
index 34ebcdbc402f51c080c884db6b8e163b84025643..0000000000000000000000000000000000000000
--- a/Assets/Stages/ValidationSets/Stages/Stages/Stages/Stages.meta
+++ /dev/null
@@ -1,8 +0,0 @@
-fileFormatVersion: 2
-guid: 75770b352d605dd4eb408d8728296ab5
-folderAsset: yes
-DefaultImporter:
-  externalObjects: {}
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 
diff --git a/Assets/Stages/ValidationSets/Stages/Stages/Stages/Stages/Stages.meta b/Assets/Stages/ValidationSets/Stages/Stages/Stages/Stages/Stages.meta
deleted file mode 100644
index d7e05a83f35f441680e10a7599241184f6c7e7c9..0000000000000000000000000000000000000000
--- a/Assets/Stages/ValidationSets/Stages/Stages/Stages/Stages/Stages.meta
+++ /dev/null
@@ -1,8 +0,0 @@
-fileFormatVersion: 2
-guid: 1e05a5c0fd704cb4f8d0b3f9751cf2f1
-folderAsset: yes
-DefaultImporter:
-  externalObjects: {}
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 
diff --git a/Assets/Stages/ValidationSets/Stages/Stages/Stages/Stages/Stages/Stages.meta b/Assets/Stages/ValidationSets/Stages/Stages/Stages/Stages/Stages/Stages.meta
deleted file mode 100644
index 51c9d814c2585b49ac5e5164a15cba3bfad44ce4..0000000000000000000000000000000000000000
--- a/Assets/Stages/ValidationSets/Stages/Stages/Stages/Stages/Stages/Stages.meta
+++ /dev/null
@@ -1,8 +0,0 @@
-fileFormatVersion: 2
-guid: a447e5b38e428d347be7ec57c607a63c
-folderAsset: yes
-DefaultImporter:
-  externalObjects: {}
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 
diff --git a/Assets/Stages/ValidationSets/Stages/Stages/Stages/Stages/Stages/Stages/Stages.meta b/Assets/Stages/ValidationSets/Stages/Stages/Stages/Stages/Stages/Stages/Stages.meta
deleted file mode 100644
index 3adb9551cf1bfd7fb8345d811dbbfba267721664..0000000000000000000000000000000000000000
--- a/Assets/Stages/ValidationSets/Stages/Stages/Stages/Stages/Stages/Stages/Stages.meta
+++ /dev/null
@@ -1,8 +0,0 @@
-fileFormatVersion: 2
-guid: f46292ad2a0396e4899cc23be8204d54
-folderAsset: yes
-DefaultImporter:
-  externalObjects: {}
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 
diff --git a/Assets/Stages/ValidationSets/Stages/Stages/Stages/Stages/Stages/Stages/Stages/Stages.meta b/Assets/Stages/ValidationSets/Stages/Stages/Stages/Stages/Stages/Stages/Stages/Stages.meta
deleted file mode 100644
index b9ce28139dc13fe9897df151a310b6a8d98232d1..0000000000000000000000000000000000000000
--- a/Assets/Stages/ValidationSets/Stages/Stages/Stages/Stages/Stages/Stages/Stages/Stages.meta
+++ /dev/null
@@ -1,8 +0,0 @@
-fileFormatVersion: 2
-guid: 33138b02432422d4e90f3b9b357368ca
-folderAsset: yes
-DefaultImporter:
-  externalObjects: {}
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 
diff --git a/Assets/Stages/ValidationSets/Stages/Stages/Stages/Stages/Stages/Stages/Stages/Stages/Stages.meta b/Assets/Stages/ValidationSets/Stages/Stages/Stages/Stages/Stages/Stages/Stages/Stages/Stages.meta
deleted file mode 100644
index 9e5a5a4a2eb9f7a9049cb725ee16cbcfaa13ef15..0000000000000000000000000000000000000000
--- a/Assets/Stages/ValidationSets/Stages/Stages/Stages/Stages/Stages/Stages/Stages/Stages/Stages.meta
+++ /dev/null
@@ -1,8 +0,0 @@
-fileFormatVersion: 2
-guid: f2cb7fbd4a9300d4583eee633c40766f
-folderAsset: yes
-DefaultImporter:
-  externalObjects: {}
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 
diff --git a/Assets/Stages/ValidationSets/Stages/Stages/Stages/Stages/Stages/Stages/Stages/Stages/Stages/ValidationSets.meta b/Assets/Stages/ValidationSets/Stages/Stages/Stages/Stages/Stages/Stages/Stages/Stages/Stages/ValidationSets.meta
deleted file mode 100644
index b40365457556e1fa0aac3b9c7c6a3f780ef32989..0000000000000000000000000000000000000000
--- a/Assets/Stages/ValidationSets/Stages/Stages/Stages/Stages/Stages/Stages/Stages/Stages/Stages/ValidationSets.meta
+++ /dev/null
@@ -1,8 +0,0 @@
-fileFormatVersion: 2
-guid: c93175ed604e10847bd5acd7f1a40dd1
-folderAsset: yes
-DefaultImporter:
-  externalObjects: {}
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 
diff --git a/Assets/Stages/ValidationSets/Stages/Stages/Stages/Stages/Stages/Stages/Stages/Stages/ValidationSets.meta b/Assets/Stages/ValidationSets/Stages/Stages/Stages/Stages/Stages/Stages/Stages/Stages/ValidationSets.meta
deleted file mode 100644
index c5bb674bacf7619fd1ce586efaf6b0fc835d3a03..0000000000000000000000000000000000000000
--- a/Assets/Stages/ValidationSets/Stages/Stages/Stages/Stages/Stages/Stages/Stages/Stages/ValidationSets.meta
+++ /dev/null
@@ -1,8 +0,0 @@
-fileFormatVersion: 2
-guid: 68199428fdd13d2449e55e59faa7d9ac
-folderAsset: yes
-DefaultImporter:
-  externalObjects: {}
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 
diff --git a/Assets/Stages/ValidationSets/Stages/Stages/Stages/Stages/Stages/Stages/Stages/ValidationSets.meta b/Assets/Stages/ValidationSets/Stages/Stages/Stages/Stages/Stages/Stages/Stages/ValidationSets.meta
deleted file mode 100644
index e32678a206262ec72b1e38732926cc0bb9d894ec..0000000000000000000000000000000000000000
--- a/Assets/Stages/ValidationSets/Stages/Stages/Stages/Stages/Stages/Stages/Stages/ValidationSets.meta
+++ /dev/null
@@ -1,8 +0,0 @@
-fileFormatVersion: 2
-guid: 91c36af12a4d2d049bb604b52262b702
-folderAsset: yes
-DefaultImporter:
-  externalObjects: {}
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 
diff --git a/Assets/Stages/ValidationSets/Stages/Stages/Stages/Stages/Stages/Stages/ValidationSets.meta b/Assets/Stages/ValidationSets/Stages/Stages/Stages/Stages/Stages/Stages/ValidationSets.meta
deleted file mode 100644
index be3ae191a6096ce81ef38d0af870387229c10678..0000000000000000000000000000000000000000
--- a/Assets/Stages/ValidationSets/Stages/Stages/Stages/Stages/Stages/Stages/ValidationSets.meta
+++ /dev/null
@@ -1,8 +0,0 @@
-fileFormatVersion: 2
-guid: ac9a01c266cef764689ce898f8fbcc8e
-folderAsset: yes
-DefaultImporter:
-  externalObjects: {}
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 
diff --git a/Assets/Stages/ValidationSets/Stages/Stages/Stages/Stages/Stages/ValidationSets.meta b/Assets/Stages/ValidationSets/Stages/Stages/Stages/Stages/Stages/ValidationSets.meta
deleted file mode 100644
index 995fc376756db02d84472390b7af015addcbdb88..0000000000000000000000000000000000000000
--- a/Assets/Stages/ValidationSets/Stages/Stages/Stages/Stages/Stages/ValidationSets.meta
+++ /dev/null
@@ -1,8 +0,0 @@
-fileFormatVersion: 2
-guid: 09ead5cabd40bd840a123716fbcce6d9
-folderAsset: yes
-DefaultImporter:
-  externalObjects: {}
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 
diff --git a/Assets/Stages/ValidationSets/Stages/Stages/Stages/Stages/ValidationSets.meta b/Assets/Stages/ValidationSets/Stages/Stages/Stages/Stages/ValidationSets.meta
deleted file mode 100644
index 63236119d4162e6be02a21ec5ea7c4b55f6d5e5a..0000000000000000000000000000000000000000
--- a/Assets/Stages/ValidationSets/Stages/Stages/Stages/Stages/ValidationSets.meta
+++ /dev/null
@@ -1,8 +0,0 @@
-fileFormatVersion: 2
-guid: 15571408de5775743975430bd32004a7
-folderAsset: yes
-DefaultImporter:
-  externalObjects: {}
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 
diff --git a/Assets/Stages/ValidationSets/Stages/Stages/Stages/ValidationSets.meta b/Assets/Stages/ValidationSets/Stages/Stages/Stages/ValidationSets.meta
deleted file mode 100644
index 76e38e7b3a43e347a7c55647fa0d9dd2f36fd03e..0000000000000000000000000000000000000000
--- a/Assets/Stages/ValidationSets/Stages/Stages/Stages/ValidationSets.meta
+++ /dev/null
@@ -1,8 +0,0 @@
-fileFormatVersion: 2
-guid: e23e1c671dd25c64884669c0224a23e7
-folderAsset: yes
-DefaultImporter:
-  externalObjects: {}
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 
diff --git a/Assets/Stages/ValidationSets/Stages/Stages/ValidationSets.meta b/Assets/Stages/ValidationSets/Stages/Stages/ValidationSets.meta
deleted file mode 100644
index 0583db3739e12d97144aca37a2657eea2899ccb0..0000000000000000000000000000000000000000
--- a/Assets/Stages/ValidationSets/Stages/Stages/ValidationSets.meta
+++ /dev/null
@@ -1,8 +0,0 @@
-fileFormatVersion: 2
-guid: 85c6939345942fe418d5c4c1f6797be2
-folderAsset: yes
-DefaultImporter:
-  externalObjects: {}
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 
diff --git a/Assets/Stages/ValidationSets/Stages/ValidationSets.meta b/Assets/Stages/ValidationSets/Stages/ValidationSets.meta
deleted file mode 100644
index 7ad7acc0c8a396d52a1f1770ecc0938ca6c2b85d..0000000000000000000000000000000000000000
--- a/Assets/Stages/ValidationSets/Stages/ValidationSets.meta
+++ /dev/null
@@ -1,8 +0,0 @@
-fileFormatVersion: 2
-guid: 779619f39a4d0d842bd7c55991c5d711
-folderAsset: yes
-DefaultImporter:
-  externalObjects: {}
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 
diff --git a/Assets/Stages/ValidationSets/TechDemo A_val.JSON b/Assets/Stages/ValidationSets/TechDemo A_val.JSON
index d64ef7038ca138c6f878e16424599f87442decfe..da10b443369fc915b1da4fc6673b2d566a88c1d2 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/Root?fact148"],"SolutionIndex":[],"RelationIndex":[],"ComparerString":"LineFactHightDirectionComparer"}]
\ No newline at end of file
+{"ValidationSet":[{"MasterIDs":["http://mathhub.info/FrameIT/frameworld/integrationtests?SampleSituationSpace/Root?fact262"],"SolutionIndex":[],"RelationIndex":[],"ComparerString":"LineFactHightDirectionComparer"}],"FactDict":{"http://mathhub.info/FrameIT/frameworld/integrationtests?SampleSituationSpace/Root?fact260":{"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/integrationtests?SampleSituationSpace/Root?fact260","Label":"A","hasCustomLabel":false,"LabelId":1},"http://mathhub.info/FrameIT/frameworld/integrationtests?SampleSituationSpace/Root?fact261":{"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/integrationtests?SampleSituationSpace/Root?fact261","Label":"B","hasCustomLabel":false,"LabelId":2},"http://mathhub.info/FrameIT/frameworld/integrationtests?SampleSituationSpace/Root?fact262":{"s_type":"LineFact","Distance":6.0,"Pid1":"http://mathhub.info/FrameIT/frameworld/integrationtests?SampleSituationSpace/Root?fact260","Pid2":"http://mathhub.info/FrameIT/frameworld/integrationtests?SampleSituationSpace/Root?fact261","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?fact262","Label":"[AB]","hasCustomLabel":false,"LabelId":0}},"MetaInf":{"http://mathhub.info/FrameIT/frameworld/integrationtests?SampleSituationSpace/Root?fact260":{"workflow_id":0,"active":true},"http://mathhub.info/FrameIT/frameworld/integrationtests?SampleSituationSpace/Root?fact261":{"workflow_id":1,"active":true},"http://mathhub.info/FrameIT/frameworld/integrationtests?SampleSituationSpace/Root?fact262":{"workflow_id":2,"active":true}},"Workflow":[{"Id":"http://mathhub.info/FrameIT/frameworld/integrationtests?SampleSituationSpace/Root?fact260","samestep":false,"steplink":3,"creation":true},{"Id":"http://mathhub.info/FrameIT/frameworld/integrationtests?SampleSituationSpace/Root?fact261","samestep":true,"steplink":0,"creation":true},{"Id":"http://mathhub.info/FrameIT/frameworld/integrationtests?SampleSituationSpace/Root?fact262","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 B_val.JSON b/Assets/Stages/ValidationSets/TechDemo B_val.JSON
index f620ff128b57ffa6a7cc6bc449ae4de6927122d5..53d4c077d4fec323afe506b82d48e1f2d2c99245 100644
--- a/Assets/Stages/ValidationSets/TechDemo B_val.JSON	
+++ b/Assets/Stages/ValidationSets/TechDemo B_val.JSON	
@@ -1 +1 @@
-[{"MasterIDs":["http://mathhub.info/FrameIT/frameworld/integrationtests?SampleSituationSpace/Root?fact151"],"SolutionIndex":[],"RelationIndex":[],"ComparerString":"LineFactHightDirectionComparer"},{"MasterIDs":["http://mathhub.info/FrameIT/frameworld/integrationtests?SampleSituationSpace/Root?fact151"],"SolutionIndex":[],"RelationIndex":[],"ComparerString":"LineSpanningOverRiverWorldComparer"},{"MasterIDs":[],"SolutionIndex":[1],"RelationIndex":[0],"ComparerString":"LineFactHightComparer"}]
\ No newline at end of file
+{"ValidationSet":[{"MasterIDs":["http://mathhub.info/FrameIT/frameworld/integrationtests?SampleSituationSpace/Root?fact265"],"SolutionIndex":[],"RelationIndex":[],"ComparerString":"LineFactHightDirectionComparer"},{"MasterIDs":["http://mathhub.info/FrameIT/frameworld/integrationtests?SampleSituationSpace/Root?fact265"],"SolutionIndex":[],"RelationIndex":[],"ComparerString":"LineSpanningOverRiverWorldComparer"},{"MasterIDs":[],"SolutionIndex":[1],"RelationIndex":[0],"ComparerString":"LineFactHightComparer"}],"FactDict":{"http://mathhub.info/FrameIT/frameworld/integrationtests?SampleSituationSpace/Root?fact263":{"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/integrationtests?SampleSituationSpace/Root?fact263","Label":"A","hasCustomLabel":false,"LabelId":1},"http://mathhub.info/FrameIT/frameworld/integrationtests?SampleSituationSpace/Root?fact264":{"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/integrationtests?SampleSituationSpace/Root?fact264","Label":"B","hasCustomLabel":false,"LabelId":2},"http://mathhub.info/FrameIT/frameworld/integrationtests?SampleSituationSpace/Root?fact265":{"s_type":"LineFact","Distance":6.0,"Pid1":"http://mathhub.info/FrameIT/frameworld/integrationtests?SampleSituationSpace/Root?fact263","Pid2":"http://mathhub.info/FrameIT/frameworld/integrationtests?SampleSituationSpace/Root?fact264","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?fact265","Label":"[AB]","hasCustomLabel":false,"LabelId":0}},"MetaInf":{"http://mathhub.info/FrameIT/frameworld/integrationtests?SampleSituationSpace/Root?fact263":{"workflow_id":0,"active":true},"http://mathhub.info/FrameIT/frameworld/integrationtests?SampleSituationSpace/Root?fact264":{"workflow_id":1,"active":true},"http://mathhub.info/FrameIT/frameworld/integrationtests?SampleSituationSpace/Root?fact265":{"workflow_id":2,"active":true}},"Workflow":[{"Id":"http://mathhub.info/FrameIT/frameworld/integrationtests?SampleSituationSpace/Root?fact263","samestep":false,"steplink":3,"creation":true},{"Id":"http://mathhub.info/FrameIT/frameworld/integrationtests?SampleSituationSpace/Root?fact264","samestep":true,"steplink":0,"creation":true},{"Id":"http://mathhub.info/FrameIT/frameworld/integrationtests?SampleSituationSpace/Root?fact265","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