diff --git a/CSE/ApplicationEvents.vb b/CSE/ApplicationEvents.vb
index 682717e5ef0352b98ee4446c7a14960a8c478eaf..7dfab40b2780a839e410270ddeaadc086525ba3c 100644
--- a/CSE/ApplicationEvents.vb
+++ b/CSE/ApplicationEvents.vb
@@ -101,7 +101,7 @@
         Private Sub MyApplication_UnhandledException(ByVal sender As Object, ByVal ev As Microsoft.VisualBasic.ApplicationServices.UnhandledExceptionEventArgs) Handles Me.UnhandledException
             Dim ex As Exception = ev.Exception
             If AppFormStarted Then
-                logme(9, False, format("Unhandled exception: \i{0}", ex.Message), ex)
+                logme(9, False, format("Unhandled exception in {0}: \i{1}", ex.Source, ex.Message), ex)
                 ev.ExitApplication = False
             Else
                 MsgBox(format("{0} failed after init due to: \n\i{1}", AppName, ex), MsgBoxStyle.Critical, format("{0} failed to Start!", AppName))
diff --git a/CSE/Classes/cVirtMSC.vb b/CSE/Classes/cVirtMSC.vb
index 2e822eaa35685a8a86d7a46d886f5a57845c13f2..b46548382f15b1f16b44c490000e1c9be1397d8b 100644
--- a/CSE/Classes/cVirtMSC.vb
+++ b/CSE/Classes/cVirtMSC.vb
@@ -18,8 +18,8 @@
 
         meID.Add(0)
         dID.Add(0)
-        KoordA.Add({0})
-        KoordE.Add({0})
+        KoordA.Add(New Integer() {0})
+        KoordE.Add(New Integer() {0})
         NewSec.Add(0)
         Head.Add(0)
     End Sub
diff --git a/CSE/GUI/F_Main.vb b/CSE/GUI/F_Main.vb
index 03ba566301802025c295bbb2fd2d192ff46ca1ab..d42ceb127e11746a862a72ec92974d7dd9655c7c 100644
--- a/CSE/GUI/F_Main.vb
+++ b/CSE/GUI/F_Main.vb
@@ -184,8 +184,8 @@ Public Class F_Main
     '#### Only HERE manage "Exec" button's state (Text, Image, etc). ####
     '####################################################################
     Private _CalibrationState As Boolean = False
-    Private _CalibrationTxts = {"Calibrate", "Cancel"}
-    Private _CalibrationImgs = {My.Resources.Resources.Play_icon, My.Resources.Resources.Stop_icon}
+    Private ReadOnly _CalibrationTxts = {"Calibrate", "Cancel"}
+    Private ReadOnly _CalibrationImgs = {My.Resources.Resources.Play_icon, My.Resources.Resources.Stop_icon}
     Private Property CalibrationState As Boolean
         Get
             Return _CalibrationState
@@ -195,7 +195,7 @@ Public Class F_Main
                 Dim indx = -CInt(value)
                 Me.ButtonCalC.Text = _CalibrationTxts(indx)
                 Me.ButtonCalC.Image = _CalibrationImgs(indx)
-                Me.ButtonCalC.UseWaitCursor = value
+                Me.UseWaitCursor = value
             End If
             _CalibrationState = value
         End Set
@@ -265,8 +265,8 @@ Public Class F_Main
     '#### Only HERE manage "Exec" button's state (Text, Image, etc). ####
     '####################################################################
     Private _EvaluationState As Boolean = False
-    Private _EvaluationTxts = {"Evaluate", "Cancel"}
-    Private _EvaluationImgs = {My.Resources.Resources.Play_icon, My.Resources.Resources.Stop_icon}
+    Private ReadOnly _EvaluationTxts = {"Evaluate", "Cancel"}
+    Private ReadOnly _EvaluationImgs = {My.Resources.Resources.Play_icon, My.Resources.Resources.Stop_icon}
     Private Property EvaluationState As Boolean
         Get
             Return _EvaluationState
@@ -276,7 +276,7 @@ Public Class F_Main
                 Dim indx = -CInt(value)
                 Me.ButtonEval.Text = _EvaluationTxts(indx)
                 Me.ButtonEval.Image = _EvaluationImgs(indx)
-                Me.ButtonEval.UseWaitCursor = value
+                Me.UseWaitCursor = value
             End If
             _EvaluationState = value
         End Set
diff --git a/CSE/IO/cCriteria.vb b/CSE/IO/cCriteria.vb
index 2ad4608ee1cf3a7b4cd184c6d567eb9df130c446..31f58c018a0ed07863e2f73429be2c1b46b6dd3b 100644
--- a/CSE/IO/cCriteria.vb
+++ b/CSE/IO/cCriteria.vb
@@ -12,11 +12,8 @@ Public Class cCriteria
     End Function
 
 
-    Private ForeignBody As JToken
-
-
     '' Default values are Decleration
-    Public Shared Function BuildBody() As JObject
+    Private Shared Function BuildBody() As JObject
         Dim b, g As Object
         b = New JObject()
 
@@ -252,17 +249,14 @@ Public Class cCriteria
     ''' <remarks>See cJsonFile() constructor</remarks>
     Sub New(Optional ByVal skipValidation As Boolean = False)
         MyBase.New(BuildBody, skipValidation)
-        PopulateFields()
     End Sub
     ''' <summary>Reads from file or creates defaults</summary>
     ''' <param name="inputFilePath">the fpath of the file to read data from</param>
     Sub New(ByVal inputFilePath As String, Optional ByVal skipValidation As Boolean = False)
         MyBase.New(inputFilePath, skipValidation)
-        PopulateFields()
     End Sub
     Sub New(ByVal foreignBody As JToken, Optional ByVal skipValidation As Boolean = False)
         MyBase.New(foreignBody, skipValidation)
-        PopulateFields()
     End Sub
 
 
@@ -275,8 +269,8 @@ Public Class cCriteria
     Protected Overrides Sub ValidateBody(ByVal isStrictBody As Boolean, ByVal validateMsgs As IList(Of String))
         '' Check version
         ''
-        Dim fromVersion = "1.0.0--"
-        Dim toVersion = "2.0.0--" ' The earliest pre-release.
+        Const fromVersion = "1.0.0--"
+        Const toVersion = "2.0.0--" ' The earliest pre-release.
         If Not IsSemanticVersionsSupported(Me.FileVersion, fromVersion, toVersion) Then
             validateMsgs.Add(format("Unsupported FileVersion({0}, was not in between [{1}, {2})", Me.FileVersion, fromVersion, toVersion))
             Return
@@ -337,62 +331,7 @@ Public Class cCriteria
     Public t_amb_tarmac As Single
 
 
-    ''' <summary>Override it to set custome fields</summary>
-    Overrides Sub Store(ByVal fpath As String, Optional ByVal prefs As cPreferences = Nothing)
-        Dim g, b As Object
-        b = Me.Body
-
-        g = b("Processing")
-        g.roh_air_ref = Me.roh_air_ref
-        g.accel_correction = Me.accel_correction
-        g.gradient_correction = Me.gradient_correction
-        g.hz_out = Me.hz_out
-        g.rr_corr_factor = Me.rr_corr_factor
-        g.acc_corr_avg = Me.acc_corr_avg
-        g.dist_float = Me.dist_float
-
-        g = b("Validation")
-        g.trigger_delta_x_max = Me.trigger_delta_x_max
-        g.trigger_delta_y_max = Me.trigger_delta_y_max
-        g.delta_head_max = Me.delta_head_max
-        g.segruns_min_CAL = Me.segruns_min_CAL
-        g.segruns_min_LS = Me.segruns_min_LS
-        g.segruns_min_HS = Me.segruns_min_HS
-        g.segruns_min_head_MS = Me.segruns_min_head_MS
-        g.delta_Hz_max = Me.delta_Hz_max
-        g.delta_parallel_max = Me.delta_parallel_max
-
-        g.v_wind_avg_max_CAL = Me.v_wind_avg_max_CAL
-        g.v_wind_1s_max_CAL = Me.v_wind_1s_max_CAL
-        g.beta_avg_max_CAL = Me.beta_avg_max_CAL
-
-        g.leng_crit = Me.leng_crit
-
-        g.v_wind_avg_max_LS = Me.v_wind_avg_max_LS
-        g.v_wind_1s_max_LS = Me.v_wind_1s_max_LS
-        g.v_veh_avg_min_LS = Me.v_veh_avg_min_LS
-        g.v_veh_avg_max_LS = Me.v_veh_avg_max_LS
-        g.v_veh_float_delta_LS = Me.v_veh_float_delta_LS
-        g.tq_sum_float_delta_LS = Me.tq_sum_float_delta_LS
-
-        g.v_wind_avg_max_HS = Me.v_wind_avg_max_HS
-        g.v_wind_1s_max_HS = Me.v_wind_1s_max_HS
-        g.beta_avg_max_HS = Me.beta_avg_max_HS
-        g.v_veh_avg_min_HS = Me.v_veh_avg_min_HS
-        g.v_veh_1s_delta_HS = Me.v_veh_1s_delta_HS
-        g.tq_sum_1s_delta_HS = Me.tq_sum_1s_delta_HS
-
-        g.delta_t_tyre_max = Me.delta_t_tyre_max
-        g.delta_rr_corr_max = Me.delta_rr_corr_max
-        g.t_amb_var = Me.t_amb_var
-        g.t_amb_tarmac = Me.t_amb_tarmac
-        g.t_amb_max = Me.t_amb_max
-        g.t_amb_min = Me.t_amb_min
-
-        MyBase.Store(fpath, prefs)
-    End Sub
-
-    Private Sub PopulateFields()
+    Protected Overrides Sub OnContentUpdated()
         Dim g, p As Object
         p = Me.Body
 
@@ -445,6 +384,59 @@ Public Class cCriteria
         Me.t_amb_min = g("t_amb_min")
     End Sub
 
+    ''' <summary>Override it to set custome fields</summary>
+    Protected Overrides Sub OnBeforeContentStored()
+        Dim g, b As Object
+        b = Me.Body
+
+        g = b("Processing")
+        g.roh_air_ref = Me.roh_air_ref
+        g.accel_correction = Me.accel_correction
+        g.gradient_correction = Me.gradient_correction
+        g.hz_out = Me.hz_out
+        g.rr_corr_factor = Me.rr_corr_factor
+        g.acc_corr_avg = Me.acc_corr_avg
+        g.dist_float = Me.dist_float
+
+        g = b("Validation")
+        g.trigger_delta_x_max = Me.trigger_delta_x_max
+        g.trigger_delta_y_max = Me.trigger_delta_y_max
+        g.delta_head_max = Me.delta_head_max
+        g.segruns_min_CAL = Me.segruns_min_CAL
+        g.segruns_min_LS = Me.segruns_min_LS
+        g.segruns_min_HS = Me.segruns_min_HS
+        g.segruns_min_head_MS = Me.segruns_min_head_MS
+        g.delta_Hz_max = Me.delta_Hz_max
+        g.delta_parallel_max = Me.delta_parallel_max
+
+        g.v_wind_avg_max_CAL = Me.v_wind_avg_max_CAL
+        g.v_wind_1s_max_CAL = Me.v_wind_1s_max_CAL
+        g.beta_avg_max_CAL = Me.beta_avg_max_CAL
+
+        g.leng_crit = Me.leng_crit
+
+        g.v_wind_avg_max_LS = Me.v_wind_avg_max_LS
+        g.v_wind_1s_max_LS = Me.v_wind_1s_max_LS
+        g.v_veh_avg_min_LS = Me.v_veh_avg_min_LS
+        g.v_veh_avg_max_LS = Me.v_veh_avg_max_LS
+        g.v_veh_float_delta_LS = Me.v_veh_float_delta_LS
+        g.tq_sum_float_delta_LS = Me.tq_sum_float_delta_LS
+
+        g.v_wind_avg_max_HS = Me.v_wind_avg_max_HS
+        g.v_wind_1s_max_HS = Me.v_wind_1s_max_HS
+        g.beta_avg_max_HS = Me.beta_avg_max_HS
+        g.v_veh_avg_min_HS = Me.v_veh_avg_min_HS
+        g.v_veh_1s_delta_HS = Me.v_veh_1s_delta_HS
+        g.tq_sum_1s_delta_HS = Me.tq_sum_1s_delta_HS
+
+        g.delta_t_tyre_max = Me.delta_t_tyre_max
+        g.delta_rr_corr_max = Me.delta_rr_corr_max
+        g.t_amb_var = Me.t_amb_var
+        g.t_amb_tarmac = Me.t_amb_tarmac
+        g.t_amb_max = Me.t_amb_max
+        g.t_amb_min = Me.t_amb_min
+    End Sub
+
 #End Region ' json props
 
 End Class
diff --git a/CSE/IO/cJob.vb b/CSE/IO/cJob.vb
index f4ae487764179f88b5cf4bd8bef49b944b9d813e..3a26b1b1ba382a314030bc9f7faa127cc2a05950 100644
--- a/CSE/IO/cJob.vb
+++ b/CSE/IO/cJob.vb
@@ -98,13 +98,11 @@ Public Class cJob
     ''' <remarks>See cJsonFile() constructor</remarks>
     Sub New(Optional ByVal skipValidation As Boolean = False)
         MyBase.New(BuildBody, skipValidation)
-        PopulateFields()
     End Sub
     ''' <summary>Reads from file or creates defaults</summary>
     ''' <param name="inputFilePath">the fpath of the file to read data from</param>
     Sub New(ByVal inputFilePath As String, Optional ByVal skipValidation As Boolean = False)
         MyBase.New(inputFilePath, skipValidation)
-        PopulateFields()
     End Sub
 
 
@@ -142,7 +140,7 @@ Public Class cJob
     Public beta_f As Double
     Public beta_d As Double
 
-    Private Sub PopulateFields()
+    Protected Overrides Sub OnContentUpdated()
         Dim anem = PropOrDefault(".Anemometer")
         Me.v_air_f = anem("v_air_f")
         Me.v_air_d = anem("v_air_d")
@@ -151,15 +149,13 @@ Public Class cJob
     End Sub
 
     ''' <summary>Override it to set custome fields</summary>
-    Overrides Sub Store(ByVal fpath As String, Optional ByVal prefs As cPreferences = Nothing)
+    Protected Overrides Sub OnBeforeContentStored()
         Dim b As Object = Me.Body
 
         b.v_air_f = Me.v_air_f
         b.v_air_d = Me.v_air_d
         b.beta_f = Me.beta_f
         b.beta_d = Me.beta_d
-
-        MyBase.Store(fpath, prefs)
     End Sub
 
 
@@ -296,10 +292,10 @@ Public Class cJob
             For i = 0 To UBound(factors) - 1
                 factors(i) = Line(i)
             Next i
-            Job.v_air_f = factors(0)
-            Job.v_air_d = factors(1)
-            Job.beta_f = factors(2)
-            Job.beta_d = factors(3)
+            Me.v_air_f = factors(0)
+            Me.v_air_d = factors(1)
+            Me.beta_f = factors(2)
+            Me.beta_d = factors(3)
 
             ' Calibration test files
             calib_track_fpath = FileInVECTO.ReadLine(0)
@@ -426,6 +422,8 @@ Public Class cJob
 
         End Using
 
+        Me.OnBeforeContentStored()
+
         F_Main.UI_PopulateFromJob()
         F_Main.UI_PopulateFromCriteria()
     End Sub
diff --git a/CSE/IO/cJsonFile.vb b/CSE/IO/cJsonFile.vb
index bb012c92fb6501efca6ef5539826a294f9fab4ae..54de58676cddfd61f50ba7caac322bba81e8cd35 100644
--- a/CSE/IO/cJsonFile.vb
+++ b/CSE/IO/cJsonFile.vb
@@ -1,6 +1,4 @@
-Option Strict Off
-
-Imports Newtonsoft.Json.Linq
+Imports Newtonsoft.Json.Linq
 Imports Newtonsoft.Json.Schema
 Imports System.Globalization
 
@@ -25,7 +23,7 @@ Imports System.Globalization
 Public MustInherit Class cJsonFile
     Implements ICloneable
 
-    Shared dateFrmt As String = "yyyy/MM/dd HH:mm:ss zzz"
+    Private Const DateFrmt As String = "yyyy/MM/dd HH:mm:ss zzz"
 
     ''' <summary>The json-content for a json-file structured in Header/Body</summary>
     ''' <remarks>Note that the content is invalid according to the schema, and has to be specified by sub-classers.</remarks>
@@ -111,6 +109,11 @@ When False, it overrides Application's choice and is not replaced ever.",
     ''' <remarks>To signify validation-failure it can throw an exception or add err-messages into the supplied list</remarks>
     Protected MustOverride Sub ValidateBody(ByVal isStrict As Boolean, ByVal validateMsgs As IList(Of String))
 
+    Protected Overridable Sub OnContentUpdated()
+    End Sub
+    Protected Overridable Sub OnBeforeContentStored()
+    End Sub
+
 
     ''' <summary>The whole json-content receiving any changes, always ready to be written as is.</summary>
     Private Content As JObject
@@ -127,9 +130,8 @@ When False, it overrides Application's choice and is not replaced ever.",
     ''' <param name="skipValidation">When false (the default), validates json-contents in both cases (reading or creating-defaults)</param>
     ''' <remarks>It optionally checks version and validates its body with ValidateVersionAndBody().</remarks>
     Protected Sub New(ByVal inputFilePath As String, Optional ByVal skipValidation As Boolean = False)
-        Dim strictHeader = True
+        Dim strictHeader = False   '' Accept unknown headers.
 
-        strictHeader = False   '' Try to read even bad headers.
         logme(4, False, format("Reading JSON-file({0})...", inputFilePath))
 
         Me.Content = ReadJsonFile(inputFilePath)
@@ -139,6 +141,8 @@ When False, it overrides Application's choice and is not replaced ever.",
         If Not skipValidation Then
             Me.Validate(strictHeader)
         End If
+
+        OnContentUpdated()
     End Sub
 
     ''' <summary>Creates an instance with defaults</summary>
@@ -146,7 +150,7 @@ When False, it overrides Application's choice and is not replaced ever.",
     ''' <param name="skipValidation">When false (the default), validates json-contents in both cases (reading or creating-defaults)</param>
     ''' <remarks>When defaulting, the resulted file-version is retrieved from 'CodeVersion' prop and the body from 'BodyStr' prop.</remarks>
     Protected Sub New(ByVal body As JToken, Optional ByVal skipValidation As Boolean = False)
-        Dim strictHeader = True
+        Dim strictHeader = False   '' Accept unknown headers.
 
         Dim jstr = JsonStr_FileContents()
         Me.Content = JObject.Parse(jstr)
@@ -159,10 +163,14 @@ When False, it overrides Application's choice and is not replaced ever.",
         If Not skipValidation Then
             Me.Validate(strictHeader)
         End If
+
+        OnContentUpdated()
     End Sub
 
     ''' <summary>Validates and Writing to the config file</summary>
     Overridable Sub Store(ByVal fpath As String, Optional ByVal prefs As cPreferences = Nothing)
+        OnBeforeContentStored()
+
         logme(4, False, format("Writting JSON-file({0})...", fpath))
         Me.UpdateHeader(prefs)