diff --git a/.gitignore b/.gitignore
index f4a77c2403534a879d05276fd19c475cac703523..e8df1add99cc25e5137741c66e654b1115d586fc 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,4 +1,5 @@
 /drag.exe
 /build/
 /srcF/*.mod
+/parser/*.mod
 .idea
diff --git a/srcF/sfx_common.f90 b/srcF/sfx_common.f90
index 160758f9e8ec7094eb52ea80bc391fc16b2c1d81..dde8b8d8104a76c133dd80e458197d639dbadfc3 100644
--- a/srcF/sfx_common.f90
+++ b/srcF/sfx_common.f90
@@ -18,7 +18,24 @@ contains
     end subroutine str2int
     ! ----------------------------------------------------------------------------
 
+    !> @brief character array to string conversion
+    function char_array2str(char_array) result(str)
+        ! ----------------------------------------------------------------------------
+        implicit none
+        character, intent(in) :: char_array(:)
+        character(len=:), allocatable :: str
+        integer :: i
+        ! ----------------------------------------------------------------------------
+
+        str = ""
+        do i = 1, size(char_array)
+            str = str(:) // char_array(i)
+        end do
+
+    end function
+    ! ----------------------------------------------------------------------------
 
+    
     !> @brief check if value is finite
     elemental function is_finite(value)
         ! ----------------------------------------------------------------------------
diff --git a/srcF/sfx_main.f90 b/srcF/sfx_main.f90
index 8117357aae9c8ddfabe1927702ad77f0bde74fe1..31ca983d6af9b0df4f708ea246ff69eaa7dadc6a 100644
--- a/srcF/sfx_main.f90
+++ b/srcF/sfx_main.f90
@@ -110,7 +110,7 @@ program sfx_main
 #ifdef USE_CONFIG_PARSER
     character, allocatable :: config_model_name(:)
     character, allocatable :: config_dataset_name(:)
-
+    
     character, allocatable :: fn_in_common(:), fn_in(:), fn_out(:)
     integer :: sfx_type
     real :: z0_m
@@ -223,13 +223,13 @@ program sfx_main
     call run("config.txt"//C_NULL_CHAR)
 
     call get_charf("model.type"//C_NULL_CHAR, config_model_name)
-    if (compare_char_arrays(config_model_name, trim(arg_key_model_esm), size(config_model_name))) then
+    if (compare_char_arrays(config_model_name, trim(arg_key_model_esm))) then
         model_id = model_esm
-    else if (compare_char_arrays(config_model_name, trim(arg_key_model_log), size(config_model_name))) then
+    else if (compare_char_arrays(config_model_name, trim(arg_key_model_log))) then
         model_id = model_log 
-    else if (compare_char_arrays(config_model_name, trim(arg_key_model_most), size(config_model_name))) then
+    else if (compare_char_arrays(config_model_name, trim(arg_key_model_most))) then
         model_id = model_most
-    else if (compare_char_arrays(config_model_name, trim(arg_key_model_sheba), size(config_model_name))) then
+    else if (compare_char_arrays(config_model_name, trim(arg_key_model_sheba))) then
         model_id = model_sheba        
     else
         write(*, *) ' FAILURE! > unknown model [key]: ', config_model_name
@@ -237,19 +237,19 @@ program sfx_main
     end if
 
     call get_charf("dataset.type"//C_NULL_CHAR, config_dataset_name)
-    if (compare_char_arrays(config_dataset_name, trim(arg_key_dataset_mosaic), size(config_dataset_name))) then
+    if (compare_char_arrays(config_dataset_name, trim(arg_key_dataset_mosaic))) then
         dataset_id = dataset_MOSAiC
-    else if (compare_char_arrays(config_dataset_name, trim(arg_key_dataset_irgason), size(config_dataset_name))) then
+    else if (compare_char_arrays(config_dataset_name, trim(arg_key_dataset_irgason))) then
         dataset_id = dataset_IRGASON
-    else if (compare_char_arrays(config_dataset_name, trim(arg_key_dataset_sheba), size(config_dataset_name))) then
+    else if (compare_char_arrays(config_dataset_name, trim(arg_key_dataset_sheba))) then
         dataset_id = dataset_SHEBA
-    else if (compare_char_arrays(config_dataset_name, trim(arg_key_dataset_lake), size(config_dataset_name))) then
+    else if (compare_char_arrays(config_dataset_name, trim(arg_key_dataset_lake))) then
         dataset_id = dataset_LAKE
-    else if (compare_char_arrays(config_dataset_name, trim(arg_key_dataset_papa), size(config_dataset_name))) then
+    else if (compare_char_arrays(config_dataset_name, trim(arg_key_dataset_papa))) then
         dataset_id = dataset_PAPA
-    else if (compare_char_arrays(config_dataset_name, trim(arg_key_dataset_toga), size(config_dataset_name))) then
+    else if (compare_char_arrays(config_dataset_name, trim(arg_key_dataset_toga))) then
         dataset_id = dataset_TOGA
-    else if (compare_char_arrays(config_dataset_name, trim(arg_key_dataset_user), size(config_dataset_name))) then
+    else if (compare_char_arrays(config_dataset_name, trim(arg_key_dataset_user))) then
         dataset_id = dataset_USER
 
         !call get_charf("dataset.filename"//C_NULL_CHAR, config_dataset_filename)