diff --git a/Assets/Resources/Prefabs/UI/Ingame/FrameITUI_mobile.prefab b/Assets/Resources/Prefabs/UI/Ingame/FrameITUI_mobile.prefab
index f854ea39e6e3c5aed1e2861d12145fc6cb11026b..dd7e4766f1a4b0a706486a5bc2126992f2d1a829 100644
--- a/Assets/Resources/Prefabs/UI/Ingame/FrameITUI_mobile.prefab
+++ b/Assets/Resources/Prefabs/UI/Ingame/FrameITUI_mobile.prefab
@@ -1894,6 +1894,7 @@ MonoBehaviour:
   modreset: mod+reset
   modsave: mod+save
   modload: mod+load
+  modfire: Fire1
   toolMode_keyBind: ToolmMenue
   MathMode_keyBind: MathMenue
   cancel_keyBind: Cancel
diff --git a/Assets/Scripts/InteractionEngine/CommunicationEvents.cs b/Assets/Scripts/InteractionEngine/CommunicationEvents.cs
index 8716fbf4a2b817d837e785e127d69164b219180f..bea5db7bb7250c9bead2ac4e5d7ada01d5f6098c 100644
--- a/Assets/Scripts/InteractionEngine/CommunicationEvents.cs
+++ b/Assets/Scripts/InteractionEngine/CommunicationEvents.cs
@@ -8,6 +8,7 @@
 public static class CommunicationEvents
 {
     public static UnityEvent<RaycastHit[]> TriggerEvent = new();
+    public static UnityEvent<RaycastHit[]> TriggerModFireEvent = new();
     //TODO check if this needs further adjustments
   //  public class HitEvent : UnityEvent<RaycastHit[]> { }
 
diff --git a/Assets/Scripts/InteractionEngine/TBD/RigidbodyFact.cs b/Assets/Scripts/InteractionEngine/TBD/RigidbodyFact.cs
new file mode 100644
index 0000000000000000000000000000000000000000..45126aeb4619310153146f9bbd3fea8156e7a5b5
--- /dev/null
+++ b/Assets/Scripts/InteractionEngine/TBD/RigidbodyFact.cs
@@ -0,0 +1,41 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+[RequireComponent(typeof(Rigidbody))]
+public class RigidbodyFact : MonoBehaviour
+{
+    Rigidbody ribot;
+    private bool isOriginal = true;
+
+    void Awake()
+    {
+        ribot = gameObject.GetComponent<Rigidbody>();
+    }
+
+    private void CloneAndSend(RaycastHit[] _)
+    {
+        if (!isOriginal) return;
+
+        GameObject clone = GameObject.Instantiate(gameObject, transform.parent);
+        var clRbF = clone.GetComponent<RigidbodyFact>();
+        clRbF.isOriginal = false;
+        clRbF.RandomMovement(null);
+    }
+
+    private void RandomMovement(RaycastHit[] _)
+    {
+        gameObject.GetComponent<SphereCollider>().enabled = true;
+        ribot.isKinematic = false;
+        ribot.AddForce(
+            Random.rotationUniform * Vector3.up,
+            ForceMode.VelocityChange
+            );
+    }
+
+    void OnEnable()
+        => CommunicationEvents.TriggerModFireEvent.AddListener(CloneAndSend);
+
+    void OnDisable()
+        => CommunicationEvents.TriggerModFireEvent.RemoveListener(CloneAndSend);
+}
diff --git a/Assets/Scripts/InteractionEngine/TBD/RigidbodyFact.cs.meta b/Assets/Scripts/InteractionEngine/TBD/RigidbodyFact.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..d52dc526016e182751bac300fd485d76a7a3c629
--- /dev/null
+++ b/Assets/Scripts/InteractionEngine/TBD/RigidbodyFact.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 04a4ac0a27312d04787dc2494b7aa690
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Scripts/InventoryStuff/Scroll.cs b/Assets/Scripts/InventoryStuff/Scroll.cs
index 4b351ebd16a7778a9f73b2eb688015064db9b1cb..adf8ce775a8671698255453a07ad58568a3bf7f4 100644
--- a/Assets/Scripts/InventoryStuff/Scroll.cs
+++ b/Assets/Scripts/InventoryStuff/Scroll.cs
@@ -65,24 +65,23 @@ public class ScrollSymbolFact : ScrollFact
 
         public override String getType()
         {
-            if (this.tp is OMS oMS)
-                return oMS.uri;
-            else if (this.tp is OMA oMA)
-                return ((OMS)((OMA) oMA.arguments[0]).applicant).uri;
-            else
-                return null;
+            return tp switch
+            {
+                OMS oMS => oMS.uri,
+                OMA oMA => ((oMA.arguments[0] as OMA).applicant as OMS).uri,
+                _ => null
+            };
         }
 
         public override String getApplicant()
         {
             //Debug.Log(" Check " + this.tp is OMS + " and " + this.tp is OMA + " and " + this.tp is OMSTR + " or " + this.tp is OMF);
             // return ((OMS)((OMA)((OMA)this.tp).arguments[0]).arguments[0]).uri;
-            if (this.df is OMA && ((OMA)this.df).applicant is OMS)
-                return ((OMS)((OMA)this.df).applicant).uri;
-            
-
-            return null ;// ((OMS)((OMA)((OMA)this.df).arguments[0]).applicant).uri;
-
+            return df switch
+            {
+                OMA oMA when oMA.applicant is OMS oMS => oMS.uri,
+                _ => null // ((OMS)((OMA)((OMA)this.df).arguments[0]).applicant).uri;
+            };
         }
     }
 
@@ -98,17 +97,20 @@ public class ScrollValueFact : ScrollFact
 
         public override String getType()
         {
-            if (this.lhs is OMA & (((OMA)this.lhs).applicant is OMS))
-                return ((OMS)((OMA)this.lhs).applicant).uri;
-            else
-                return null;
+            return lhs switch
+            {
+                OMA oMA when oMA.applicant is OMS oMS => oMS.uri,
+                _ => null
+            };
         }
         public override String getApplicant()
         {
             // TODO Test this 
-            if (this.lhs is OMA & (((OMA)this.lhs).applicant is OMS))
-                return ((OMS)((OMA)this.lhs).applicant).uri;
-            return null; 
+            return lhs switch
+            {
+                OMA oMA when oMA.applicant is OMS oMS => oMS.uri,
+                _ => null
+            };
         }
 
     }
@@ -142,9 +144,4 @@ public class ScrollApplicationCheckingError
         public MMTTerm fact;
     }
 
-}
-
-
-
-
-
+}
\ No newline at end of file
diff --git a/Assets/Scripts/JSONManager.cs b/Assets/Scripts/JSONManager.cs
index 1d9b3f3cfbf65a563a3fc505f874f83de8e81bf9..3565766f6955e95390feda6fb65c58509b43250f 100644
--- a/Assets/Scripts/JSONManager.cs
+++ b/Assets/Scripts/JSONManager.cs
@@ -1,58 +1,249 @@
 using System.Collections.Generic;
 using Newtonsoft.Json;
 using JsonSubTypes;
-
-
-
+using System.Linq.Expressions;
+using System.Reflection;
+using UnityEngine.UIElements;
+using System;
+using static UnityEngine.Windows.Speech.PhraseRecognitionSystem;
+using System.Linq;
 
 public static class JSONManager
 {
-   
 
     public static class MMTURIs
     {
-        public const string Point = "http://mathhub.info/MitM/core/geometry?3DGeometry?point";
-        public const string Tuple = "http://gl.mathhub.info/MMT/LFX/Sigma?Symbols?Tuple";
-        public const string LineType = "http://mathhub.info/MitM/core/geometry?Geometry/Common?line_type";
-        public const string LineOf = "http://mathhub.info/MitM/core/geometry?Geometry/Common?lineOf";
-
-        public const string OnLine = "http://mathhub.info/MitM/core/geometry?Geometry/Common?onLine";
-        public const string Ded = "http://mathhub.info/MitM/Foundation?Logic?ded";
-        public const string Eq = "http://mathhub.info/MitM/Foundation?Logic?eq";
-        public const string Metric = "http://mathhub.info/MitM/core/geometry?Geometry/Common?metric";
-        public const string Angle = "http://mathhub.info/MitM/core/geometry?Geometry/Common?angle_between";
-        public const string Sketch = "http://mathhub.info/MitM/Foundation?InformalProofs?proofsketch";
-        public const string RealLit = "http://mathhub.info/MitM/Foundation?RealLiterals?real_lit";
-
-        public const string ParallelLine = "http://mathhub.info/MitM/core/geometry?Geometry/Common?parallelLine";
-        // public string RectangleFact = "http://mathhub.info/FrameIT/frameworld?FrameITRectangles?rectangleType";
-        //  public string RectangleFactmk = "http://mathhub.info/FrameIT/frameworld?FrameITRectangles?mkRectangle";
-
-        public const string CircleType3d = "http://mathhub.info/FrameIT/frameworld?FrameITCircle?circleType3D";
-        public const string MkCircle3d = "http://mathhub.info/FrameIT/frameworld?FrameITCircle?circle3D";
-        public const string TriangleMiddlePoint = "http://mathhub.info/FrameIT/frameworld?FrameITTriangles?triangleMidPointWrapper";
-        public const string RadiusCircleMetric = "http://mathhub.info/FrameIT/frameworld?FrameITCircle?circleRadius";
-
-        public const string AreaCircle = "http://mathhub.info/FrameIT/frameworld?FrameITCircle?areaCircle";
-        public const string VolumeCone = "http://mathhub.info/FrameIT/frameworld?FrameITCone?volumeCone";
-        public const string ConeOfCircleApex = "http://mathhub.info/FrameIT/frameworld?FrameITCone?circleConeOf";
-
-        public const string ParametrizedPlane = "http://mathhub.info/MitM/core/geometry?Planes?ParametrizedPlane";
-        public const string pointNormalPlane = "http://mathhub.info/MitM/core/geometry?Planes?pointNormalPlane";
-        public const string OnCircle = "http://mathhub.info/FrameIT/frameworld?FrameITCircle?pointOnCircle";
-        public const string AnglePlaneLine = "http://mathhub.info/FrameIT/frameworld?FrameITCircle?angleCircleLine";
-        public const string OrthoCircleLine = "http://mathhub.info/FrameIT/frameworld?FrameITCircle?orthogonalCircleLine";
-
-        public const string TruncatedVolumeCone = "http://mathhub.info/FrameIT/frameworld?FrameITCone?truncatedConeVolume";
-        public const string CylinderVolume = "http://mathhub.info/FrameIT/frameworld?FrameITCylinder?cylinderVolume";
-        public const string EqualityCircles = "http://mathhub.info/FrameIT/frameworld?FrameITCircle?equalityCircles";
-        public const string UnEqualityCircles = "http://mathhub.info/FrameIT/frameworld?FrameITCircle?unequalityCircles";
-
-        public const string ParallelCircles = "http://mathhub.info/FrameIT/frameworld?FrameITCone?parallelCircles";
-        public const string RightAngle = "http://mathhub.info/FrameIT/frameworld?FrameITBasics?rightAngle";
-
-        public const string TestType = "http://mathhub.info/FrameIT/frameworld?FrameITCircle?xcircleType3D";
+        public static readonly string Point = "http://mathhub.info/MitM/core/geometry?3DGeometry?point";
+        public static readonly string Tuple = "http://gl.mathhub.info/MMT/LFX/Sigma?Symbols?Tuple";
+        public static readonly string LineType = "http://mathhub.info/MitM/core/geometry?Geometry/Common?line_type";
+        public static readonly string LineOf = "http://mathhub.info/MitM/core/geometry?Geometry/Common?lineOf";
+
+        public static readonly string OnLine = "http://mathhub.info/MitM/core/geometry?Geometry/Common?onLine";
+        public static readonly string Ded = "http://mathhub.info/MitM/Foundation?Logic?ded";
+        public static readonly string Eq = "http://mathhub.info/MitM/Foundation?Logic?eq";
+        public static readonly string Metric = "http://mathhub.info/MitM/core/geometry?Geometry/Common?metric";
+        public static readonly string Angle = "http://mathhub.info/MitM/core/geometry?Geometry/Common?angle_between";
+        public static readonly string Sketch = "http://mathhub.info/MitM/Foundation?InformalProofs?proofsketch";
+        public static readonly string RealLit = "http://mathhub.info/MitM/Foundation?RealLiterals?real_lit";
+
+        public static readonly string ParallelLine = "http://mathhub.info/MitM/core/geometry?Geometry/Common?parallelLine";
+        //public static readonly string RectangleFact = "http://mathhub.info/FrameIT/frameworld?FrameITRectangles?rectangleType";
+        //public static readonly string RectangleFactmk = "http://mathhub.info/FrameIT/frameworld?FrameITRectangles?mkRectangle";
+
+        public static readonly string CircleType3d = "http://mathhub.info/FrameIT/frameworld?FrameITCircle?circleType3D";
+        public static readonly string MkCircle3d = "http://mathhub.info/FrameIT/frameworld?FrameITCircle?circle3D";
+        public static readonly string TriangleMiddlePoint = "http://mathhub.info/FrameIT/frameworld?FrameITTriangles?triangleMidPointWrapper";
+        public static readonly string RadiusCircleMetric = "http://mathhub.info/FrameIT/frameworld?FrameITCircle?circleRadius";
+
+        public static readonly string AreaCircle = "http://mathhub.info/FrameIT/frameworld?FrameITCircle?areaCircle";
+        public static readonly string VolumeCone = "http://mathhub.info/FrameIT/frameworld?FrameITCone?volumeCone";
+        public static readonly string ConeOfCircleApex = "http://mathhub.info/FrameIT/frameworld?FrameITCone?circleConeOf";
+
+        public static readonly string ParametrizedPlane = "http://mathhub.info/MitM/core/geometry?Planes?ParametrizedPlane";
+        public static readonly string pointNormalPlane = "http://mathhub.info/MitM/core/geometry?Planes?pointNormalPlane";
+        public static readonly string OnCircle = "http://mathhub.info/FrameIT/frameworld?FrameITCircle?pointOnCircle";
+        public static readonly string AnglePlaneLine = "http://mathhub.info/FrameIT/frameworld?FrameITCircle?angleCircleLine";
+        public static readonly string OrthoCircleLine = "http://mathhub.info/FrameIT/frameworld?FrameITCircle?orthogonalCircleLine";
+
+        public static readonly string TruncatedVolumeCone = "http://mathhub.info/FrameIT/frameworld?FrameITCone?truncatedConeVolume";
+        public static readonly string CylinderVolume = "http://mathhub.info/FrameIT/frameworld?FrameITCylinder?cylinderVolume";
+        public static readonly string EqualityCircles = "http://mathhub.info/FrameIT/frameworld?FrameITCircle?equalityCircles";
+        public static readonly string UnEqualityCircles = "http://mathhub.info/FrameIT/frameworld?FrameITCircle?unequalityCircles";
+
+        public static readonly string ParallelCircles = "http://mathhub.info/FrameIT/frameworld?FrameITCone?parallelCircles";
+        public static readonly string RightAngle = "http://mathhub.info/FrameIT/frameworld?FrameITBasics?rightAngle";
+
+        public static readonly string TestType = "http://mathhub.info/FrameIT/frameworld?FrameITCircle?xcircleType3D";
+    }
+
+
+    public static class MMTtoLambdaExpression<T>
+    {
+        private static LambdaExpression @default = Expression.Lambda(Expression.Default(typeof(T)), null);
+        // TODO: Populate Dictionaries
+        #region ExpressionDictionaries
+
+        private static Dictionary<string, Func<LambdaExpression>> MMTtoLambdaMaker = new()
+        {
+            { "sin", 
+                MakeSin},
+            { "cos", 
+                MakeCos},
+        };
+
+        private static Dictionary<string, ExpressionType> MMTtoBinaryExpressionType = new()
+        {
+            { "Add", 
+                ExpressionType.Add},
+            { "AddAssign", 
+                ExpressionType.AddAssign},
+            { "AddAssignChecked", 
+                ExpressionType.AddAssignChecked},
+            { "AddChecked", 
+                ExpressionType.AddChecked},
+            { "And", 
+                ExpressionType.And},
+            { "AndAlso", 
+                ExpressionType.AndAlso},
+            { "AndAssign", 
+                ExpressionType.AndAssign},
+            { "Assign", 
+                ExpressionType.Assign},
+            { "Divide", 
+                ExpressionType.Divide},
+            { "DivideAssign", 
+                ExpressionType.DivideAssign},
+            { "Equal", 
+                ExpressionType.Equal},
+            { "ExclusiveOr", 
+                ExpressionType.ExclusiveOr},
+            { "ExclusiveOrAssign", 
+                ExpressionType.ExclusiveOrAssign},
+            { "GreaterThan", 
+                ExpressionType.GreaterThan},
+            { "GreaterThanOrEqual", 
+                ExpressionType.GreaterThanOrEqual},
+            { "LeftShift", 
+                ExpressionType.LeftShift},
+            { "LeftShiftAssign", 
+                ExpressionType.LeftShiftAssign},
+            { "LessThan", 
+                ExpressionType.LessThan},
+            { "LessThanOrEqual", 
+                ExpressionType.LessThanOrEqual},
+            { "Modulo", 
+                ExpressionType.Modulo},
+            { "ModuloAssign", 
+                ExpressionType.ModuloAssign},
+            { "Multiply", 
+                ExpressionType.Multiply},
+            { "MultiplyAssign", 
+                ExpressionType.MultiplyAssign},
+            { "MultiplyAssignChecked", 
+                ExpressionType.MultiplyAssignChecked},
+            { "MultiplyChecked", 
+                ExpressionType.MultiplyChecked},
+            { "NotEqual", 
+                ExpressionType.NotEqual},
+            { "Or", 
+                ExpressionType.Or},
+            { "OrAssign", 
+                ExpressionType.OrAssign},
+            { "OrElse", 
+                ExpressionType.OrElse},
+            { "Power", 
+                ExpressionType.Power},
+            { "PowerAssign", 
+                ExpressionType.PowerAssign},
+            { "RightShift", 
+                ExpressionType.RightShift},
+            { "RightShiftAssign", 
+                ExpressionType.RightShiftAssign},
+            { "Subtract", 
+                ExpressionType.Subtract},
+            { "SubtractAssign", 
+                ExpressionType.SubtractAssign},
+            { "SubtractAssignChecked", 
+                ExpressionType.SubtractAssignChecked},
+            { "SubtractChecked", 
+                ExpressionType.SubtractChecked},
+        };
+
+        private static Dictionary<string, ExpressionType> MMTtoUnaryExpressionType = new()
+        {
+            //{ "Constant", // Not Unary
+            //    ExpressionType.Constant},
+            { "Decrement", 
+                ExpressionType.Decrement},
+            { "Increment", 
+                ExpressionType.Increment},
+            { "Negate", 
+                ExpressionType.Negate},
+            { "NegateChecked", 
+                ExpressionType.NegateChecked},
+            { "Not", 
+                ExpressionType.Not},
+            { "OnesComplement", 
+                ExpressionType.OnesComplement},
+            { "PostDecrementAssign", 
+                ExpressionType.PostDecrementAssign},
+            { "PostIncrementAssign", 
+                ExpressionType.PostIncrementAssign},
+            { "PreDecrementAssign", 
+                ExpressionType.PreDecrementAssign},
+            { "PreIncrementAssign", 
+                ExpressionType.PreIncrementAssign},
+            { "UnaryPlus", 
+                ExpressionType.UnaryPlus},
+        };
+
+        #endregion ExpressionDictionaries
+
+        public static LambdaExpression MakeLambdaExpression(string URI)
+        {
+            if (MMTtoUnaryExpressionType.TryGetValue(URI, out var unnary_type))
+            {
+                ParameterExpression[] args = new ParameterExpression[] {
+                    Expression.Parameter(typeof(T))
+                };
+                return Expression.Lambda(Expression.MakeUnary(unnary_type, args[0], typeof(T)), args);
+            }
+            else if (MMTtoBinaryExpressionType.TryGetValue(URI, out var binary_type))
+            {
+                ParameterExpression[] args = new ParameterExpression[] { 
+                    Expression.Parameter(typeof(T)),
+                    Expression.Parameter(typeof(T)) 
+                };
+                return Expression.Lambda(Expression.MakeBinary(binary_type, args[0], args[1]), args);
+            }
+            else if (MMTtoLambdaMaker.TryGetValue(URI, out var lamda_maker))
+            {
+                return lamda_maker();
+            }
+
+            throw new NotImplementedException("Could not map URI: \"" + URI + "\"");
+        }
+
+        private static Expression<Func<T, T>> ParseFuncTUUT<U>(Func<U,U> func)
+            => (T x) => 
+                (T) Convert.ChangeType(
+                        func(
+                            (U) Convert.ChangeType(
+                                x, 
+                                typeof(U)
+                            )
+                        ), 
+                        typeof(T)
+                    );
+
+        private static LambdaExpression ExpresionFuncToLambda(Expression func, uint nTargs)
+        {   
+            ParameterExpression[] args = new ParameterExpression[nTargs];
+            for (int i = 0; i < nTargs; i++)
+                args[i] = Expression.Parameter(typeof(T));
+
+            return Expression.Lambda(Expression.Invoke(func, args), args);
+        }
 
+        //TODO? more general/generics
+        private static LambdaExpression ParseFuncTUUTToLambda<U>(Func<U, U> func)
+            => ExpresionFuncToLambda(ParseFuncTUUT<U>(func), 1);
+
+        private static LambdaExpression MakeSin()
+            => default(T) switch // TODO? cleaner switch
+            {
+                float  => ParseFuncTUUTToLambda<float>(MathF.Sin),
+                double => ParseFuncTUUTToLambda<double>(Math.Sin),
+                _ => throw new NotImplementedException("Sinus for " + typeof(T))
+            };
+
+        private static LambdaExpression MakeCos()
+            => default(T) switch
+            {
+                float  => ParseFuncTUUTToLambda<float>(MathF.Cos),
+                double => ParseFuncTUUTToLambda<double>(Math.Cos),
+                _ => throw new NotImplementedException("Sinus for " + typeof(T))
+            };
     }
 
 
@@ -70,6 +261,9 @@ public URI(string uri)
     public class MMTTerm
     {
         string kind;
+
+        virtual public LambdaExpression GetLambdaExpression()
+            => Expression.Lambda(Expression.Empty(), null);
     }
 
     public class OMA : MMTTerm
@@ -77,13 +271,44 @@ public class OMA : MMTTerm
         public MMTTerm applicant;
         public List<MMTTerm> arguments;
         public string kind = "OMA";
+
         public OMA(MMTTerm applicant, List<MMTTerm> arguments)
         {
             this.applicant = applicant;
             this.arguments = arguments;
         }
 
-        
+        override public LambdaExpression GetLambdaExpression()
+        {
+            // local variable for each arguments
+            ParameterExpression[] line_variable = new ParameterExpression[arguments.Count];
+
+            // expression of computing arguments and assigning to corresponding variable
+            Expression[] line_expression = new Expression[arguments.Count + 1];
+
+            // unbound parameters a.k.a. all params of arguments
+            List<ParameterExpression> father_param = new();
+
+            for (int i = 0; i < arguments.Count; i++)
+            {
+                LambdaExpression
+                    child_lambda = arguments[i].GetLambdaExpression();
+                List<ParameterExpression>
+                    child_params = child_lambda.Parameters.ToList();
+
+                line_variable[i] = Expression.Variable(child_lambda.ReturnType);
+                line_expression[i] = Expression.Assign(line_variable[i], Expression.Invoke(child_lambda, child_params));
+
+                foreach (ParameterExpression arg in child_params)
+                    father_param.Add(arg);
+            }
+
+            // invoke applicant with computed arguments
+            line_expression[arguments.Count] = Expression.Invoke(applicant.GetLambdaExpression(), line_variable);
+
+            // compile all this into LambdaExpression
+            return Expression.Lambda(Expression.Block(line_variable, line_expression), father_param);
+        }
     }
 
     public class OMS : MMTTerm
@@ -95,6 +320,9 @@ public OMS(string uri)
         {
             this.uri = uri;
         }
+
+        override public LambdaExpression GetLambdaExpression() 
+            => MMTtoLambdaExpression<float>.MakeLambdaExpression(uri);
     }
 
     public class OMSTR : MMTTerm
@@ -107,6 +335,9 @@ public OMSTR(string s)
         {
             this.s = s;
         }
+
+        override public LambdaExpression GetLambdaExpression()
+            => Expression.Lambda(Expression.Constant(s, typeof(string)), null);
     }
 
     public class OMF : MMTTerm
@@ -119,11 +350,15 @@ public OMF(float f)
         {
             this.f = f;
         }
+
+        override public LambdaExpression GetLambdaExpression()
+            => Expression.Lambda(Expression.Constant(f, typeof(float)), null);
     }
 
     public class MMTDeclaration
     {
         public string label;
+
         public static MMTDeclaration FromJson(string json)
         {
             MMTDeclaration mmtDecl = JsonConvert.DeserializeObject<MMTDeclaration>(json);
@@ -132,6 +367,7 @@ public static MMTDeclaration FromJson(string json)
 
             return mmtDecl;
         }
+
         public static string ToJson(MMTDeclaration mmtDecl)
         {
             if (mmtDecl.label == null)
diff --git a/Assets/Scripts/UI/HideUI_mobile.cs b/Assets/Scripts/UI/HideUI_mobile.cs
index 80217448dae51ad5ea2d520b0965989f37c9e9ee..c48c2dfd7788ba1c7af7b4812c380eb05e1b3d35 100644
--- a/Assets/Scripts/UI/HideUI_mobile.cs
+++ b/Assets/Scripts/UI/HideUI_mobile.cs
@@ -19,7 +19,8 @@ public string
         modredo,
         modreset,
         modsave,
-        modload;
+        modload,
+        modfire;
         
     public string toolMode_keyBind;
     public string MathMode_keyBind;
@@ -620,6 +621,8 @@ void Update2()
                     StageStatic.stage.factState.softreset();
                 else if (Input.GetButtonDown(modsave))
                     StageStatic.stage.push_record();
+                else if (Input.GetButtonDown(modfire))
+                    TriggerModFireEvent.Invoke(null);
                 else if (Input.GetButtonDown(modload))
                 {
                     StageStatic.stage.factState.hardreset();
diff --git a/ProjectSettings/TimelineSettings.asset b/ProjectSettings/TimelineSettings.asset
index b4fbdb097ab44d84a11a1208e7385d3e6b53eea7..cfaebd7a3ad4fbc31dbaf44d03b608d430a973dc 100644
--- a/ProjectSettings/TimelineSettings.asset
+++ b/ProjectSettings/TimelineSettings.asset
@@ -13,3 +13,4 @@ MonoBehaviour:
   m_Name: 
   m_EditorClassIdentifier: 
   assetDefaultFramerate: 60
+  m_DefaultFrameRate: 60
diff --git a/UserSettings/EditorUserSettings.asset b/UserSettings/EditorUserSettings.asset
index 2e49119cae911d1bd871b95e5094e44ed5bba1bf..cef1bf6e8f38b2b78606cfcb18732925665ad87f 100644
--- a/UserSettings/EditorUserSettings.asset
+++ b/UserSettings/EditorUserSettings.asset
@@ -6,22 +6,22 @@ EditorUserSettings:
   serializedVersion: 4
   m_ConfigSettings:
     RecentlyUsedSceneGuid-0:
-      value: 5b5200520604510a5b5b587642270744124e4e7a7e7f2764742f1b61b0e6613a
+      value: 0702005254070d5d5d5a5d7145210f444116487c282d7f357e7a1e66b6b0313a
       flags: 0
     RecentlyUsedSceneGuid-1:
-      value: 0702005254070d5d5d5a5d7145210f444116487c282d7f357e7a1e66b6b0313a
+      value: 5b01035553515d0e0b0f5b7415725d444e4f1d2b2e782332757f4863e4e6673c
       flags: 0
     RecentlyUsedSceneGuid-2:
-      value: 5b01035553515d0e0b0f5b7415725d444e4f1d2b2e782332757f4863e4e6673c
+      value: 0502505152005e020c0d0e2446275e44144f19287f707e362c7c4b60b2b9353c
       flags: 0
     RecentlyUsedSceneGuid-3:
-      value: 0709560454055c0d0c5e5c2444740b4413154a72792d22627c714963e0b6373d
+      value: 5b5200520604510a5b5b587642270744124e4e7a7e7f2764742f1b61b0e6613a
       flags: 0
     RecentlyUsedSceneGuid-4:
-      value: 0502505152005e020c0d0e2446275e44144f19287f707e362c7c4b60b2b9353c
+      value: 57505505560608585a56557116730644404e4d7b7c7b7562787e4f66e4b1313e
       flags: 0
     RecentlyUsedSceneGuid-5:
-      value: 57505505560608585a56557116730644404e4d7b7c7b7562787e4f66e4b1313e
+      value: 0709560454055c0d0c5e5c2444740b4413154a72792d22627c714963e0b6373d
       flags: 0
     RecentlyUsedScenePath-0:
       value: 22424703114646680e0b0227036c681f041b1c39631c3435281e1221eee47a2decee22f0