diff --git a/Assets/Scripts/GlobalBehaviour.cs b/Assets/Scripts/GlobalBehaviour.cs
index 9de3f3b6e8d29ae9fe8f91b53d3c84ad6d81f71a..a356eaa98c1ad2a2e41098f2faf7e90d1c539940 100644
--- a/Assets/Scripts/GlobalBehaviour.cs
+++ b/Assets/Scripts/GlobalBehaviour.cs
@@ -36,7 +36,7 @@ public class GlobalBehaviour : MonoBehaviour
 
     void Awake()
     {
-        //GenerateDemoFiles.GenerateAll();
+        // GenerateDemoFiles.GenerateAll();
 
         hintAnimationStartColor = _hintAnimationStartColor;
         hintAnimationEndColor = _hintAnimationEndColor;
diff --git a/Assets/Scripts/InteractionEngine/FactHandling/FactOrganizer.cs b/Assets/Scripts/InteractionEngine/FactHandling/FactOrganizer.cs
index 1f23ea11439d4969b75b01029afc3e9956c29dd3..fe4860619cfe8edafb42282c5284b2d2e6b00ced 100644
--- a/Assets/Scripts/InteractionEngine/FactHandling/FactOrganizer.cs
+++ b/Assets/Scripts/InteractionEngine/FactHandling/FactOrganizer.cs
@@ -211,17 +211,22 @@ public FactOrganizer(bool invoke = false)
     /// <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="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)
+    protected static T ReInitializeFactOrganizer<T>
+        (FactOrganizer source, bool invoke, out Dictionary<string, string> old_to_new)
+         where T : FactOrganizer, new()
     {
         // TODO: other strategy needed when MMT save/load supported
         // map old URIs to new ones
         old_to_new = new Dictionary<string, string>();
-        
+
         // initiate
-        target.invoke = invoke;
-        target.MaxLabelId = source.MaxLabelId;
-        target.UnusedLabelIds = source.UnusedLabelIds;
-        target.FactDict = new Dictionary<string, Fact>();
+        T target = new T()
+        {
+            invoke = invoke,
+            MaxLabelId = source.MaxLabelId,
+            UnusedLabelIds = source.UnusedLabelIds,
+            FactDict = new Dictionary<string, Fact>(),
+        };
 
         // work Workflow
         foreach (var sn in source.Workflow)
@@ -259,8 +264,10 @@ protected static void ReInitializeFactOrganizer(ref FactOrganizer target, FactOr
             target.undo();
 
         target.soft_resetted = source.soft_resetted;
+        return target;
     }
 
+
     /// <summary>
     /// wrappes <c><see cref="FactDict"/>[<paramref name="id"/>]</c>
     /// <seealso cref="ContainsKey(string)"/>
@@ -697,7 +704,7 @@ public static bool load(ref FactOrganizer set, bool draw, string name, List<Dire
             return false;
 
         FactOrganizer de_json = JSONManager.ReadFromJsonFile<FactOrganizer>(path);
-        ReInitializeFactOrganizer(ref set, de_json, draw, out old_to_new);
+        set = ReInitializeFactOrganizer<FactOrganizer>(de_json, draw, out old_to_new);
         set.path = path;
 
         return true;
diff --git a/Assets/Scripts/InteractionEngine/FactHandling/SolutionOrganizer.cs b/Assets/Scripts/InteractionEngine/FactHandling/SolutionOrganizer.cs
index 1aa4f8bf94243fd91884e77590ac41154959cc57..454378108c3797141db39d3fdf6690ee5206e468 100644
--- a/Assets/Scripts/InteractionEngine/FactHandling/SolutionOrganizer.cs
+++ b/Assets/Scripts/InteractionEngine/FactHandling/SolutionOrganizer.cs
@@ -177,16 +177,9 @@ public static bool load(ref SolutionOrganizer set, bool draw, string name, List<
         if (!loadable)
             return false;
 
-
-        FactOrganizer save = StageStatic.stage.factState;
-        StageStatic.stage.factState = new SolutionOrganizer(false) as FactOrganizer;
-
         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 = ReInitializeFactOrganizer<SolutionOrganizer>(JsonTmp, draw, out Dictionary<string, string> old_to_new);
         set.path = path;
-        StageStatic.stage.factState = save;
 
         foreach (var element in JsonTmp.ValidationSet)
         // Parse and add