diff --git a/mex/sources/bytecode/ErrorHandling.hh b/mex/sources/bytecode/ErrorHandling.hh
index 59deb438b008a1dea7da5a3633ec65a5c0a930f9..c1fe2dd101935a1664db610b9e7c5234aec7d696 100644
--- a/mex/sources/bytecode/ErrorHandling.hh
+++ b/mex/sources/bytecode/ErrorHandling.hh
@@ -180,16 +180,16 @@ public:
   double *g2, *g1, *r, *res;
   vector<s_plan> splan, spfplan;
   vector<mxArray *> jacobian_block, jacobian_other_endo_block, jacobian_exo_block, jacobian_det_exo_block;
-  map<unsigned int, double> TEF;
-  map<pair<unsigned int, unsigned int>, double> TEFD;
-  map<tuple<unsigned int, unsigned int, unsigned int>, double> TEFDD;
+  map<int, double> TEF;
+  map<pair<int, int>, double> TEFD;
+  map<tuple<int, int, int>, double> TEFDD;
 
   ExpressionType EQN_type;
   it_code_type it_code_expr;
   size_t endo_name_length; // Maximum length of endogenous names
   vector<string> P_endo_names, P_exo_names, P_param_names;
-  unsigned int EQN_equation, EQN_block, EQN_block_number;
-  unsigned int EQN_dvar1, EQN_dvar2, EQN_dvar3;
+  int EQN_equation, EQN_block, EQN_block_number;
+  int EQN_dvar1, EQN_dvar2, EQN_dvar3;
   vector<tuple<string, SymbolType, unsigned int>> Variable_list;
 
   inline
@@ -870,7 +870,7 @@ public:
           case Tags::FSTPG3:
             //store in derivative (g) variable from the processor
             double r;
-            unsigned int pos_col;
+            int pos_col;
             go_on = false;
             if (compute)
               {
@@ -1399,12 +1399,12 @@ public:
             {
               auto *fc = static_cast<FCALL_ *>(it_code->second);
               string function_name = fc->get_function_name();
-              unsigned int nb_input_arguments = fc->get_nb_input_arguments();
-              unsigned int nb_output_arguments = fc->get_nb_output_arguments();
+              int nb_input_arguments{fc->get_nb_input_arguments()};
+              int nb_output_arguments{fc->get_nb_output_arguments()};
 
               mxArray *output_arguments[3];
               string arg_func_name = fc->get_arg_func_name();
-              unsigned int nb_add_input_arguments = fc->get_nb_add_input_arguments();
+              int nb_add_input_arguments{fc->get_nb_add_input_arguments()};
               function_type = fc->get_function_type();
               mxArray **input_arguments;
               switch (function_type)
@@ -1416,7 +1416,7 @@ public:
                     if (compute)
                       {
                         input_arguments = static_cast<mxArray **>(mxMalloc(nb_input_arguments * sizeof(mxArray *)));
-                        for (unsigned int i = 0; i < nb_input_arguments; i++)
+                        for (int i{0}; i < nb_input_arguments; i++)
                           {
                             mxArray *vv = mxCreateDoubleScalar(Stackf.top());
                             input_arguments[nb_input_arguments - i - 1] = vv;
@@ -1429,12 +1429,12 @@ public:
                     tmp_out.str("");
                     tmp_out << function_name << "(";
                     vector<string> ss(nb_input_arguments);
-                    for (unsigned int i = 0; i < nb_input_arguments; i++)
+                    for (int i{0}; i < nb_input_arguments; i++)
                       {
                         ss[nb_input_arguments-i-1] = Stack.top();
                         Stack.pop();
                       }
-                    for (unsigned int i = 0; i < nb_input_arguments; i++)
+                    for (int i{0}; i < nb_input_arguments; i++)
                       {
                         tmp_out << ss[i];
                         if (i < nb_input_arguments - 1)
@@ -1454,7 +1454,7 @@ public:
                         vv = mxCreateDoubleScalar(fc->get_row());
                         input_arguments[1] = vv;
                         vv = mxCreateCellMatrix(1, nb_add_input_arguments);
-                        for (unsigned int i = 0; i < nb_add_input_arguments; i++)
+                        for (int i{0}; i < nb_add_input_arguments; i++)
                           {
                             double rr = Stackf.top();
                             mxSetCell(vv, nb_add_input_arguments - (i+1), mxCreateDoubleScalar(rr));
@@ -1470,12 +1470,12 @@ public:
                     tmp_out << function_name << "(";
                     tmp_out << arg_func_name.c_str() << ", " << fc->get_row() << ", {";
                     vector<string> ss(nb_input_arguments);
-                    for (unsigned int i = 0; i < nb_add_input_arguments; i++)
+                    for (int i{0}; i < nb_add_input_arguments; i++)
                       {
                         ss[nb_add_input_arguments-i-1] = Stack.top();
                         Stack.pop();
                       }
-                    for (unsigned int i = 0; i < nb_add_input_arguments; i++)
+                    for (int i{0}; i < nb_add_input_arguments; i++)
                       {
                         tmp_out << ss[i];
                         if (i < nb_add_input_arguments - 1)
@@ -1490,7 +1490,7 @@ public:
                     if (compute)
                       {
                         input_arguments = static_cast<mxArray **>(mxMalloc(nb_input_arguments * sizeof(mxArray *)));
-                        for (unsigned int i = 0; i < nb_input_arguments; i++)
+                        for (int i{0}; i < nb_input_arguments; i++)
                           {
                             mxArray *vv = mxCreateDoubleScalar(Stackf.top());
                             input_arguments[(nb_input_arguments - 1) - i] = vv;
@@ -1501,12 +1501,12 @@ public:
                     tmp_out.str("");
                     tmp_out << function_name << "(";
                     vector<string> ss(nb_input_arguments);
-                    for (unsigned int i = 0; i < nb_input_arguments; i++)
+                    for (int i{0}; i < nb_input_arguments; i++)
                       {
                         ss[nb_input_arguments-i-1] = Stack.top();
                         Stack.pop();
                       }
-                    for (unsigned int i = 0; i < nb_input_arguments; i++)
+                    for (int i{0}; i < nb_input_arguments; i++)
                       {
                         tmp_out << ss[i];
                         if (i < nb_input_arguments - 1)
@@ -1528,7 +1528,7 @@ public:
                         vv = mxCreateDoubleScalar(fc->get_col());
                         input_arguments[2] = vv;
                         vv = mxCreateCellMatrix(1, nb_add_input_arguments);
-                        for (unsigned int i = 0; i < nb_add_input_arguments; i++)
+                        for (int i{0}; i < nb_add_input_arguments; i++)
                           {
                             double rr = Stackf.top();
                             mxSetCell(vv, (nb_add_input_arguments - 1) - i, mxCreateDoubleScalar(rr));
@@ -1544,12 +1544,12 @@ public:
                     tmp_out << function_name << "(";
                     tmp_out << arg_func_name.c_str() << ", " << fc->get_row() << ", " << fc->get_col() << ", {";
                     vector<string> ss(nb_input_arguments);
-                    for (unsigned int i = 0; i < nb_add_input_arguments; i++)
+                    for (int i{0}; i < nb_add_input_arguments; i++)
                       {
                         ss[nb_add_input_arguments-i-1] = Stack.top();
                         Stack.pop();
                       }
-                    for (unsigned int i = 0; i < nb_add_input_arguments; i++)
+                    for (int i{0}; i < nb_add_input_arguments; i++)
                       {
                         tmp_out << ss[i];
                         if (i < nb_add_input_arguments - 1)
@@ -1564,7 +1564,7 @@ public:
                     if (compute)
                       {
                         input_arguments = static_cast<mxArray **>(mxMalloc(nb_input_arguments * sizeof(mxArray *)));
-                        for (unsigned int i = 0; i < nb_input_arguments; i++)
+                        for (int i{0}; i < nb_input_arguments; i++)
                           {
                             mxArray *vv = mxCreateDoubleScalar(Stackf.top());
                             input_arguments[i] = vv;
@@ -1575,12 +1575,12 @@ public:
                     tmp_out.str("");
                     tmp_out << function_name << "(";
                     vector<string> ss(nb_input_arguments);
-                    for (unsigned int i = 0; i < nb_input_arguments; i++)
+                    for (int i{0}; i < nb_input_arguments; i++)
                       {
                         ss[nb_input_arguments-i-1] = Stack.top();
                         Stack.pop();
                       }
-                    for (unsigned int i = 0; i < nb_input_arguments; i++)
+                    for (int i{0}; i < nb_input_arguments; i++)
                       {
                         tmp_out << ss[i];
                         if (i < nb_input_arguments - 1)
@@ -1632,8 +1632,8 @@ public:
           case Tags::FSTPTEFD:
             {
               go_on = false;
-              unsigned int indx = static_cast<FSTPTEFD_ *>(it_code->second)->get_indx();
-              unsigned int row = static_cast<FSTPTEFD_ *>(it_code->second)->get_row();
+              int indx{static_cast<FSTPTEFD_ *>(it_code->second)->get_indx()};
+              int row{static_cast<FSTPTEFD_ *>(it_code->second)->get_row()};
               if (compute)
                 {
                   Stackf.pop();
@@ -1648,8 +1648,8 @@ public:
             break;
           case Tags::FLDTEFD:
             {
-              unsigned int indx = static_cast<FLDTEFD_ *>(it_code->second)->get_indx();
-              unsigned int row = static_cast<FLDTEFD_ *>(it_code->second)->get_row();
+              int indx{static_cast<FLDTEFD_ *>(it_code->second)->get_indx()};
+              int row{static_cast<FLDTEFD_ *>(it_code->second)->get_row()};
               if (compute)
                 {
                   auto it = TEFD.find({ indx, row-1 });
@@ -1663,9 +1663,9 @@ public:
           case Tags::FSTPTEFDD:
             {
               go_on = false;
-              unsigned int indx = static_cast<FSTPTEFDD_ *>(it_code->second)->get_indx();
-              unsigned int row = static_cast<FSTPTEFDD_ *>(it_code->second)->get_row();
-              unsigned int col = static_cast<FSTPTEFDD_ *>(it_code->second)->get_col();
+              int indx{static_cast<FSTPTEFDD_ *>(it_code->second)->get_indx()};
+              int row{static_cast<FSTPTEFDD_ *>(it_code->second)->get_row()};
+              int col{static_cast<FSTPTEFDD_ *>(it_code->second)->get_col()};
               if (compute)
                 {
                   Stackf.pop();
@@ -1681,9 +1681,9 @@ public:
             break;
           case Tags::FLDTEFDD:
             {
-              unsigned int indx = static_cast<FLDTEFDD_ *>(it_code->second)->get_indx();
-              unsigned int row = static_cast<FLDTEFDD_ *>(it_code->second)->get_row();
-              unsigned int col = static_cast<FSTPTEFDD_ *>(it_code->second)->get_col();
+              int indx{static_cast<FLDTEFDD_ *>(it_code->second)->get_indx()};
+              int row{static_cast<FLDTEFDD_ *>(it_code->second)->get_row()};
+              int col{static_cast<FSTPTEFDD_ *>(it_code->second)->get_col()};
               if (compute)
                 {
                   auto it = TEFDD.find({ indx, row-1, col-1 });
diff --git a/mex/sources/bytecode/Evaluate.cc b/mex/sources/bytecode/Evaluate.cc
index 983f5892abf1b83ff3868d5afc934be6b935a3be..12af7224552bae2939e493a6cd6d73e74c5d7890 100644
--- a/mex/sources/bytecode/Evaluate.cc
+++ b/mex/sources/bytecode/Evaluate.cc
@@ -1027,11 +1027,11 @@ Evaluate::compute_block_time(int Per_u_, bool evaluate, bool no_derivative)
 #ifdef DEBUG
             mexPrintf("function_name=%s ", function_name.c_str()); mexEvalString("drawnow;");
 #endif
-            unsigned int nb_input_arguments = fc->get_nb_input_arguments();
+            int nb_input_arguments{fc->get_nb_input_arguments()};
 #ifdef DEBUG
             mexPrintf("nb_input_arguments=%d ", nb_input_arguments); mexEvalString("drawnow;");
 #endif
-            unsigned int nb_output_arguments = fc->get_nb_output_arguments();
+            int nb_output_arguments{fc->get_nb_output_arguments()};
 #ifdef DEBUG
             mexPrintf("nb_output_arguments=%d\n", nb_output_arguments); mexEvalString("drawnow;");
 #endif
@@ -1042,7 +1042,7 @@ Evaluate::compute_block_time(int Per_u_, bool evaluate, bool no_derivative)
             mexPrintf("arg_func_name.length() = %d\n", arg_func_name.length());
             mexPrintf("arg_func_name.c_str() = %s\n", arg_func_name.c_str());
 #endif
-            unsigned int nb_add_input_arguments = fc->get_nb_add_input_arguments();
+            int nb_add_input_arguments{fc->get_nb_add_input_arguments()};
             function_type = fc->get_function_type();
 #ifdef DEBUG
             mexPrintf("function_type=%d ExternalFunctionWithoutDerivative=%d\n", function_type, ExternalFunctionType::withoutDerivative);
@@ -1061,7 +1061,7 @@ Evaluate::compute_block_time(int Per_u_, bool evaluate, bool no_derivative)
                   mexPrintf("Stack.size()=%d\n", Stack.size());
                   mexEvalString("drawnow;");
 #endif
-                  for (unsigned int i = 0; i < nb_input_arguments; i++)
+                  for (int i{0}; i < nb_input_arguments; i++)
                     {
                       mxArray *vv = mxCreateDoubleScalar(Stack.top());
                       input_arguments[nb_input_arguments - i - 1] = vv;
@@ -1074,21 +1074,21 @@ Evaluate::compute_block_time(int Per_u_, bool evaluate, bool no_derivative)
                   Stack.push(*rr);
                   if (function_type == ExternalFunctionType::withFirstDerivative || function_type == ExternalFunctionType::withFirstAndSecondDerivative)
                     {
-                      unsigned int indx = fc->get_indx();
+                      int indx{fc->get_indx()};
                       double *FD1 = mxGetPr(output_arguments[1]);
                       size_t rows = mxGetN(output_arguments[1]);
-                      for (unsigned int i = 0; i < rows; i++)
+                      for (int i{0}; i < static_cast<int>(rows); i++)
                         TEFD[{ indx, i }] = FD1[i];
                     }
                   if (function_type == ExternalFunctionType::withFirstAndSecondDerivative)
                     {
-                      unsigned int indx = fc->get_indx();
+                      int indx{fc->get_indx()};
                       double *FD2 = mxGetPr(output_arguments[2]);
                       size_t rows = mxGetM(output_arguments[2]);
                       size_t cols = mxGetN(output_arguments[2]);
-                      unsigned int k = 0;
-                      for (unsigned int j = 0; j < cols; j++)
-                        for (unsigned int i = 0; i < rows; i++)
+                      int k{0};
+                      for (int j{0}; j < static_cast<int>(cols); j++)
+                        for (int i{0}; i < static_cast<int>(rows); i++)
                           TEFDD[{ indx, i, j }] = FD2[k++];
                     }
                 }
@@ -1102,7 +1102,7 @@ Evaluate::compute_block_time(int Per_u_, bool evaluate, bool no_derivative)
                   vv = mxCreateDoubleScalar(fc->get_row());
                   input_arguments[1] = vv;
                   vv = mxCreateCellMatrix(1, nb_add_input_arguments);
-                  for (unsigned int i = 0; i < nb_add_input_arguments; i++)
+                  for (int i = 0; i < nb_add_input_arguments; i++)
                     {
                       double rr = Stack.top();
 #ifdef DEBUG
@@ -1133,7 +1133,7 @@ Evaluate::compute_block_time(int Per_u_, bool evaluate, bool no_derivative)
                 {
                   input_arguments = static_cast<mxArray **>(mxMalloc(nb_input_arguments * sizeof(mxArray *)));
                   test_mxMalloc(input_arguments, __LINE__, __FILE__, __func__, nb_input_arguments * sizeof(mxArray *));
-                  for (unsigned int i = 0; i < nb_input_arguments; i++)
+                  for (int i{0}; i < nb_input_arguments; i++)
                     {
                       mxArray *vv = mxCreateDoubleScalar(Stack.top());
                       input_arguments[(nb_input_arguments - 1) - i] = vv;
@@ -1141,10 +1141,10 @@ Evaluate::compute_block_time(int Per_u_, bool evaluate, bool no_derivative)
                     }
                   if (mexCallMATLAB(nb_output_arguments, output_arguments, nb_input_arguments, input_arguments, function_name.c_str()))
                     throw FatalExceptionHandling(" external function: " + function_name + " not found");
-                  unsigned int indx = fc->get_indx();
+                  int indx{fc->get_indx()};
                   double *FD1 = mxGetPr(output_arguments[0]);
                   size_t rows = mxGetN(output_arguments[0]);
-                  for (unsigned int i = 0; i < rows; i++)
+                  for (int i{0}; i < static_cast<int>(rows); i++)
                     TEFD[{ indx, i }] = FD1[i];
                 }
                 break;
@@ -1159,7 +1159,7 @@ Evaluate::compute_block_time(int Per_u_, bool evaluate, bool no_derivative)
                   vv = mxCreateDoubleScalar(fc->get_col());
                   input_arguments[2] = vv;
                   vv = mxCreateCellMatrix(1, nb_add_input_arguments);
-                  for (unsigned int i = 0; i < nb_add_input_arguments; i++)
+                  for (int i{0}; i < nb_add_input_arguments; i++)
                     {
                       double rr = Stack.top();
 #ifdef DEBUG
@@ -1187,7 +1187,7 @@ Evaluate::compute_block_time(int Per_u_, bool evaluate, bool no_derivative)
                 {
                   input_arguments = static_cast<mxArray **>(mxMalloc(nb_input_arguments * sizeof(mxArray *)));
                   test_mxMalloc(input_arguments, __LINE__, __FILE__, __func__, nb_input_arguments * sizeof(mxArray *));
-                  for (unsigned int i = 0; i < nb_input_arguments; i++)
+                  for (int i{0}; i < nb_input_arguments; i++)
                     {
                       mxArray *vv = mxCreateDoubleScalar(Stack.top());
                       input_arguments[i] = vv;
@@ -1195,13 +1195,13 @@ Evaluate::compute_block_time(int Per_u_, bool evaluate, bool no_derivative)
                     }
                   if (mexCallMATLAB(nb_output_arguments, output_arguments, nb_input_arguments, input_arguments, function_name.c_str()))
                     throw FatalExceptionHandling(" external function: " + function_name + " not found");
-                  unsigned int indx = fc->get_indx();
+                  int indx{fc->get_indx()};
                   double *FD2 = mxGetPr(output_arguments[2]);
                   size_t rows = mxGetM(output_arguments[0]);
                   size_t cols = mxGetN(output_arguments[0]);
-                  unsigned int k = 0;
-                  for (unsigned int j = 0; j < cols; j++)
-                    for (unsigned int i = 0; i < rows; i++)
+                  int k{0};
+                  for (int j{0}; j < static_cast<int>(cols); j++)
+                    for (int i{0}; i < static_cast<int>(rows); i++)
                       TEFDD[{ indx, i, j }] = FD2[k++];
                 }
                 break;
@@ -1233,8 +1233,8 @@ Evaluate::compute_block_time(int Per_u_, bool evaluate, bool no_derivative)
           break;
         case Tags::FSTPTEFD:
           {
-            unsigned int indx = static_cast<FSTPTEFD_ *>(it_code->second)->get_indx();
-            unsigned int row = static_cast<FSTPTEFD_ *>(it_code->second)->get_row();
+            int indx{static_cast<FSTPTEFD_ *>(it_code->second)->get_indx()};
+            int row{static_cast<FSTPTEFD_ *>(it_code->second)->get_row()};
 #ifdef DEBUG
             mexPrintf("FSTPTEFD\n");
             mexPrintf("indx=%d Stack.size()=%d\n", indx, Stack.size());
@@ -1253,8 +1253,8 @@ Evaluate::compute_block_time(int Per_u_, bool evaluate, bool no_derivative)
           break;
         case Tags::FLDTEFD:
           {
-            unsigned int indx = static_cast<FLDTEFD_ *>(it_code->second)->get_indx();
-            unsigned int row = static_cast<FLDTEFD_ *>(it_code->second)->get_row();
+            int indx{static_cast<FLDTEFD_ *>(it_code->second)->get_indx()};
+            int row{static_cast<FLDTEFD_ *>(it_code->second)->get_row()};
 #ifdef DEBUG
             mexPrintf("FLDTEFD\n");
             mexPrintf("indx=%d row=%d Stack.size()=%d\n", indx, row, Stack.size());
@@ -1266,9 +1266,9 @@ Evaluate::compute_block_time(int Per_u_, bool evaluate, bool no_derivative)
           break;
         case Tags::FSTPTEFDD:
           {
-            unsigned int indx = static_cast<FSTPTEFDD_ *>(it_code->second)->get_indx();
-            unsigned int row = static_cast<FSTPTEFDD_ *>(it_code->second)->get_row();
-            unsigned int col = static_cast<FSTPTEFDD_ *>(it_code->second)->get_col();
+            int indx{static_cast<FSTPTEFDD_ *>(it_code->second)->get_indx()};
+            int row{static_cast<FSTPTEFDD_ *>(it_code->second)->get_row()};
+            int col{static_cast<FSTPTEFDD_ *>(it_code->second)->get_col()};
 #ifdef DEBUG
             mexPrintf("FSTPTEFD\n");
             mexPrintf("indx=%d Stack.size()=%d\n", indx, Stack.size());
@@ -1287,9 +1287,9 @@ Evaluate::compute_block_time(int Per_u_, bool evaluate, bool no_derivative)
           break;
         case Tags::FLDTEFDD:
           {
-            unsigned int indx = static_cast<FLDTEFDD_ *>(it_code->second)->get_indx();
-            unsigned int row = static_cast<FLDTEFDD_ *>(it_code->second)->get_row();
-            unsigned int col = static_cast<FSTPTEFDD_ *>(it_code->second)->get_col();
+            int indx{static_cast<FLDTEFDD_ *>(it_code->second)->get_indx()};
+            int row{static_cast<FLDTEFDD_ *>(it_code->second)->get_row()};
+            int col{static_cast<FSTPTEFDD_ *>(it_code->second)->get_col()};
 #ifdef DEBUG
             mexPrintf("FLDTEFD\n");
             mexPrintf("indx=%d Stack.size()=%d\n", indx, Stack.size());
diff --git a/mex/sources/bytecode/Interpreter.cc b/mex/sources/bytecode/Interpreter.cc
index 7690be1d58aaba5c00553c4a8c45fea19e291f79..a488b141d0a64bbe413555203d7cf4157eaf7bf4 100644
--- a/mex/sources/bytecode/Interpreter.cc
+++ b/mex/sources/bytecode/Interpreter.cc
@@ -563,7 +563,7 @@ Interpreter::ReadCodeFile(string file_name, CodeLoad &code)
   EQN_block_number = code.get_block_number();
   if (!code_liste.size())
     throw FatalExceptionHandling(" in compute_blocks, " + file_name + ".cod cannot be opened\n");
-  if (block >= static_cast<int>(code.get_block_number()))
+  if (block >= code.get_block_number())
     throw FatalExceptionHandling(" in compute_blocks, input argument block = " + to_string(block+1)
                                  + " is greater than the number of blocks in the model ("
                                  + to_string(code.get_block_number()) + " see M_.block_structure_stat.block)\n");
diff --git a/preprocessor b/preprocessor
index 5cd5676c8e937d0cb603feaf1d9f780122c13fd8..83693e4427fd003bc05cfd14a76534c2b3043da0 160000
--- a/preprocessor
+++ b/preprocessor
@@ -1 +1 @@
-Subproject commit 5cd5676c8e937d0cb603feaf1d9f780122c13fd8
+Subproject commit 83693e4427fd003bc05cfd14a76534c2b3043da0