diff --git a/mex/sources/bytecode/ErrorHandling.hh b/mex/sources/bytecode/ErrorHandling.hh
index 30992aa5cf1f4573646dd6c933ae68da06a0a77f..0ddd5c69e141a64a84b92ac0c74ca8a7c6539f8c 100644
--- a/mex/sources/bytecode/ErrorHandling.hh
+++ b/mex/sources/bytecode/ErrorHandling.hh
@@ -435,7 +435,7 @@ public:
     ExpressionType equation_type = ExpressionType::TemporaryTerm;
     size_t found;
     double *jacob = nullptr, *jacob_other_endo = nullptr, *jacob_exo = nullptr, *jacob_exo_det = nullptr;
-    ExternalFunctionType function_type = ExternalFunctionType::withoutDerivative;
+    ExternalFunctionCallType call_type{ExternalFunctionCallType::levelWithoutDerivative};
 
     if (evaluate)
       {
@@ -1383,13 +1383,13 @@ public:
               mxArray *output_arguments[3];
               string arg_func_name = fc->get_arg_func_name();
               int nb_add_input_arguments{fc->get_nb_add_input_arguments()};
-              function_type = fc->get_function_type();
+              call_type = fc->get_call_type();
               mxArray **input_arguments;
-              switch (function_type)
+              switch (call_type)
                 {
-                case ExternalFunctionType::withoutDerivative:
-                case ExternalFunctionType::withFirstDerivative:
-                case ExternalFunctionType::withFirstAndSecondDerivative:
+                case ExternalFunctionCallType::levelWithoutDerivative:
+                case ExternalFunctionCallType::levelWithFirstDerivative:
+                case ExternalFunctionCallType::levelWithFirstAndSecondDerivative:
                   {
                     if (compute)
                       {
@@ -1422,7 +1422,7 @@ public:
                     Stack.push(tmp_out.str());
                   }
                   break;
-                case ExternalFunctionType::numericalFirstDerivative:
+                case ExternalFunctionCallType::numericalFirstDerivative:
                   {
                     if (compute)
                       {
@@ -1463,7 +1463,7 @@ public:
                     Stack.push(tmp_out.str());
                   }
                   break;
-                case ExternalFunctionType::firstDerivative:
+                case ExternalFunctionCallType::separatelyProvidedFirstDerivative:
                   {
                     if (compute)
                       {
@@ -1494,7 +1494,7 @@ public:
                     Stack.push(tmp_out.str());
                   }
                   break;
-                case ExternalFunctionType::numericalSecondDerivative:
+                case ExternalFunctionCallType::numericalSecondDerivative:
                   {
                     if (compute)
                       {
@@ -1537,7 +1537,7 @@ public:
                     Stack.push(tmp_out.str());
                   }
                   break;
-                case ExternalFunctionType::secondDerivative:
+                case ExternalFunctionCallType::separatelyProvidedSecondDerivative:
                   {
                     if (compute)
                       {
@@ -1579,15 +1579,15 @@ public:
                 Stackf.pop();
               }
             tmp_out.str("");
-            switch (function_type)
+            switch (call_type)
               {
-              case ExternalFunctionType::withoutDerivative:
+              case ExternalFunctionCallType::levelWithoutDerivative:
                 tmp_out << "TEF(" << var << ") = " << Stack.top();
                 break;
-              case ExternalFunctionType::withFirstDerivative:
+              case ExternalFunctionCallType::levelWithFirstDerivative:
                 tmp_out << "[TEF(" << var << "), TEFD(" << var << ") ]= " << Stack.top();
                 break;
-              case ExternalFunctionType::withFirstAndSecondDerivative:
+              case ExternalFunctionCallType::levelWithFirstAndSecondDerivative:
                 tmp_out << "[TEF(" << var << "), TEFD(" << var << "), TEFDD(" << var << ") ]= " << Stack.top();
                 break;
               default:
@@ -1617,9 +1617,9 @@ public:
                   Stackf.pop();
                 }
               tmp_out.str("");
-              if (function_type == ExternalFunctionType::numericalFirstDerivative)
+              if (call_type == ExternalFunctionCallType::numericalFirstDerivative)
                 tmp_out << "TEFD(" << indx << ", " << row << ") = " << Stack.top();
-              else if (function_type == ExternalFunctionType::firstDerivative)
+              else if (call_type == ExternalFunctionCallType::separatelyProvidedFirstDerivative)
                 tmp_out << "TEFD(" << indx << ") = " << Stack.top();
               Stack.pop();
             }
@@ -1649,9 +1649,9 @@ public:
                   Stackf.pop();
                 }
               tmp_out.str("");
-              if (function_type == ExternalFunctionType::numericalSecondDerivative)
+              if (call_type == ExternalFunctionCallType::numericalSecondDerivative)
                 tmp_out << "TEFDD(" << indx << ", " << row << ", " << col << ") = " << Stack.top();
-              else if (function_type == ExternalFunctionType::secondDerivative)
+              else if (call_type == ExternalFunctionCallType::separatelyProvidedSecondDerivative)
                 tmp_out << "TEFDD(" << indx << ") = " << Stack.top();
               Stack.pop();
             }
diff --git a/mex/sources/bytecode/Evaluate.cc b/mex/sources/bytecode/Evaluate.cc
index f6e45b5cfe9e3e250ebacadde37ee88c847b3f70..6b5549d2fe92c5711c81336e65f83888a126884c 100644
--- a/mex/sources/bytecode/Evaluate.cc
+++ b/mex/sources/bytecode/Evaluate.cc
@@ -117,7 +117,7 @@ Evaluate::compute_block_time(int Per_u_, bool evaluate, bool no_derivative)
   double *jacob = nullptr, *jacob_other_endo = nullptr, *jacob_exo = nullptr, *jacob_exo_det = nullptr;
   EQN_block = block_num;
   stack<double> Stack;
-  ExternalFunctionType function_type = ExternalFunctionType::withoutDerivative;
+  ExternalFunctionCallType call_type{ExternalFunctionCallType::levelWithoutDerivative};
 
 #ifdef DEBUG
   mexPrintf("compute_block_time\n");
@@ -1029,17 +1029,17 @@ Evaluate::compute_block_time(int Per_u_, bool evaluate, bool no_derivative)
             mexPrintf("arg_func_name.c_str() = %s\n", arg_func_name.c_str());
 #endif
             int nb_add_input_arguments{fc->get_nb_add_input_arguments()};
-            function_type = fc->get_function_type();
+            call_type = fc->get_call_type();
 #ifdef DEBUG
-            mexPrintf("function_type=%d ExternalFunctionWithoutDerivative=%d\n", function_type, ExternalFunctionType::withoutDerivative);
+            mexPrintf("call_type=%d ExternalFunctionCallTypeWithoutDerivative=%d\n", call_type, ExternalFunctionCallType::withoutDerivative);
             mexEvalString("drawnow;");
 #endif
             mxArray **input_arguments;
-            switch (function_type)
+            switch (call_type)
               {
-              case ExternalFunctionType::withoutDerivative:
-              case ExternalFunctionType::withFirstDerivative:
-              case ExternalFunctionType::withFirstAndSecondDerivative:
+              case ExternalFunctionCallType::levelWithoutDerivative:
+              case ExternalFunctionCallType::levelWithFirstDerivative:
+              case ExternalFunctionCallType::levelWithFirstAndSecondDerivative:
                 {
                   input_arguments = static_cast<mxArray **>(mxMalloc(nb_input_arguments * sizeof(mxArray *)));
                   test_mxMalloc(input_arguments, __LINE__, __FILE__, __func__, nb_input_arguments * sizeof(mxArray *));
@@ -1058,7 +1058,8 @@ Evaluate::compute_block_time(int Per_u_, bool evaluate, bool no_derivative)
 
                   double *rr = mxGetPr(output_arguments[0]);
                   Stack.push(*rr);
-                  if (function_type == ExternalFunctionType::withFirstDerivative || function_type == ExternalFunctionType::withFirstAndSecondDerivative)
+                  if (call_type == ExternalFunctionCallType::levelWithFirstDerivative
+                      || call_type == ExternalFunctionCallType::levelWithFirstAndSecondDerivative)
                     {
                       int indx{fc->get_indx()};
                       double *FD1 = mxGetPr(output_arguments[1]);
@@ -1066,7 +1067,7 @@ Evaluate::compute_block_time(int Per_u_, bool evaluate, bool no_derivative)
                       for (int i{0}; i < static_cast<int>(rows); i++)
                         TEFD[{ indx, i }] = FD1[i];
                     }
-                  if (function_type == ExternalFunctionType::withFirstAndSecondDerivative)
+                  if (call_type == ExternalFunctionCallType::levelWithFirstAndSecondDerivative)
                     {
                       int indx{fc->get_indx()};
                       double *FD2 = mxGetPr(output_arguments[2]);
@@ -1079,7 +1080,7 @@ Evaluate::compute_block_time(int Per_u_, bool evaluate, bool no_derivative)
                     }
                 }
                 break;
-              case ExternalFunctionType::numericalFirstDerivative:
+              case ExternalFunctionCallType::numericalFirstDerivative:
                 {
                   input_arguments = static_cast<mxArray **>(mxMalloc((nb_input_arguments+1+nb_add_input_arguments) * sizeof(mxArray *)));
                   test_mxMalloc(input_arguments, __LINE__, __FILE__, __func__, (nb_input_arguments+1+nb_add_input_arguments) * sizeof(mxArray *));
@@ -1115,7 +1116,7 @@ Evaluate::compute_block_time(int Per_u_, bool evaluate, bool no_derivative)
                   Stack.push(*rr);
                 }
                 break;
-              case ExternalFunctionType::firstDerivative:
+              case ExternalFunctionCallType::separatelyProvidedFirstDerivative:
                 {
                   input_arguments = static_cast<mxArray **>(mxMalloc(nb_input_arguments * sizeof(mxArray *)));
                   test_mxMalloc(input_arguments, __LINE__, __FILE__, __func__, nb_input_arguments * sizeof(mxArray *));
@@ -1134,7 +1135,7 @@ Evaluate::compute_block_time(int Per_u_, bool evaluate, bool no_derivative)
                     TEFD[{ indx, i }] = FD1[i];
                 }
                 break;
-              case ExternalFunctionType::numericalSecondDerivative:
+              case ExternalFunctionCallType::numericalSecondDerivative:
                 {
                   input_arguments = static_cast<mxArray **>(mxMalloc((nb_input_arguments+1+nb_add_input_arguments) * sizeof(mxArray *)));
                   test_mxMalloc(input_arguments, __LINE__, __FILE__, __func__, (nb_input_arguments+1+nb_add_input_arguments) * sizeof(mxArray *));
@@ -1169,7 +1170,7 @@ Evaluate::compute_block_time(int Per_u_, bool evaluate, bool no_derivative)
                   Stack.push(*rr);
                 }
                 break;
-              case ExternalFunctionType::secondDerivative:
+              case ExternalFunctionCallType::separatelyProvidedSecondDerivative:
                 {
                   input_arguments = static_cast<mxArray **>(mxMalloc(nb_input_arguments * sizeof(mxArray *)));
                   test_mxMalloc(input_arguments, __LINE__, __FILE__, __func__, nb_input_arguments * sizeof(mxArray *));
@@ -1225,7 +1226,7 @@ Evaluate::compute_block_time(int Per_u_, bool evaluate, bool no_derivative)
             mexPrintf("FSTPTEFD\n");
             mexPrintf("indx=%d Stack.size()=%d\n", indx, Stack.size());
 #endif
-            if (function_type == ExternalFunctionType::numericalFirstDerivative)
+            if (call_type == ExternalFunctionCallType::numericalFirstDerivative)
               {
                 TEFD[{ indx, row-1 }] = Stack.top();
 #ifdef DEBUG
@@ -1259,7 +1260,7 @@ Evaluate::compute_block_time(int Per_u_, bool evaluate, bool no_derivative)
             mexPrintf("FSTPTEFD\n");
             mexPrintf("indx=%d Stack.size()=%d\n", indx, Stack.size());
 #endif
-            if (function_type == ExternalFunctionType::numericalSecondDerivative)
+            if (call_type == ExternalFunctionCallType::numericalSecondDerivative)
               {
                 TEFDD[{ indx, row-1, col-1 }] = Stack.top();
 #ifdef DEBUG
diff --git a/preprocessor b/preprocessor
index 93ef4c6febaff596d4593f06f1499a7315811074..4b30342dc2734eec326bb721b42b8b1874834e8f 160000
--- a/preprocessor
+++ b/preprocessor
@@ -1 +1 @@
-Subproject commit 93ef4c6febaff596d4593f06f1499a7315811074
+Subproject commit 4b30342dc2734eec326bb721b42b8b1874834e8f