diff --git a/src/DynamicModel.cc b/src/DynamicModel.cc
index 638b278e3248d633c29932e2172ca4fdfc075654..c0a24ef2981a166fa51367676a58b671db392d35 100644
--- a/src/DynamicModel.cc
+++ b/src/DynamicModel.cc
@@ -187,22 +187,22 @@ DynamicModel::computeTemporaryTermsOrdered()
   v_temporary_terms.clear();
   map_idx.clear();
 
-  unsigned int nb_blocks = getNbBlocks();
+  int nb_blocks = getNbBlocks();
   v_temporary_terms = vector<vector<temporary_terms_t>>(nb_blocks);
   v_temporary_terms_inuse = vector<temporary_terms_inuse_t>(nb_blocks);
   temporary_terms.clear();
 
   if (!global_temporary_terms)
     {
-      for (unsigned int block = 0; block < nb_blocks; block++)
+      for (int block = 0; block < nb_blocks; block++)
         {
           reference_count.clear();
           temporary_terms.clear();
-          unsigned int block_size = getBlockSize(block);
-          unsigned int block_nb_mfs = getBlockMfs(block);
-          unsigned int block_nb_recursives = block_size - block_nb_mfs;
+          int block_size = getBlockSize(block);
+          int block_nb_mfs = getBlockMfs(block);
+          int block_nb_recursives = block_size - block_nb_mfs;
           v_temporary_terms[block] = vector<temporary_terms_t>(block_size);
-          for (unsigned int i = 0; i < block_size; i++)
+          for (int i = 0; i < block_size; i++)
             {
               if (i < block_nb_recursives && isBlockEquationRenormalized(block, i))
                 getBlockEquationRenormalizedExpr(block, i)->computeTemporaryTerms(reference_count, temporary_terms, first_occurence, block, v_temporary_terms, i);
@@ -226,14 +226,14 @@ DynamicModel::computeTemporaryTermsOrdered()
     }
   else
     {
-      for (unsigned int block = 0; block < nb_blocks; block++)
+      for (int block = 0; block < nb_blocks; block++)
         {
           // Compute the temporary terms reordered
-          unsigned int block_size = getBlockSize(block);
-          unsigned int block_nb_mfs = getBlockMfs(block);
-          unsigned int block_nb_recursives = block_size - block_nb_mfs;
+          int block_size = getBlockSize(block);
+          int block_nb_mfs = getBlockMfs(block);
+          int block_nb_recursives = block_size - block_nb_mfs;
           v_temporary_terms[block] = vector<temporary_terms_t>(block_size);
-          for (unsigned int i = 0; i < block_size; i++)
+          for (int i = 0; i < block_size; i++)
             {
               if (i < block_nb_recursives && isBlockEquationRenormalized(block, i))
                 getBlockEquationRenormalizedExpr(block, i)->computeTemporaryTerms(reference_count, temporary_terms, first_occurence, block, v_temporary_terms, i);
@@ -253,14 +253,14 @@ DynamicModel::computeTemporaryTermsOrdered()
           for (const auto &it : derivative_other_endo[block])
             it.second->computeTemporaryTerms(reference_count, temporary_terms, first_occurence, block, v_temporary_terms, block_size-1);
         }
-      for (unsigned int block = 0; block < nb_blocks; block++)
+      for (int block = 0; block < nb_blocks; block++)
         {
           // Collect the temporary terms reordered
-          unsigned int block_size = getBlockSize(block);
-          unsigned int block_nb_mfs = getBlockMfs(block);
-          unsigned int block_nb_recursives = block_size - block_nb_mfs;
+          int block_size = getBlockSize(block);
+          int block_nb_mfs = getBlockMfs(block);
+          int block_nb_recursives = block_size - block_nb_mfs;
           set<int> temporary_terms_in_use;
-          for (unsigned int i = 0; i < block_size; i++)
+          for (int i = 0; i < block_size; i++)
             {
               if (i < block_nb_recursives && isBlockEquationRenormalized(block, i))
                 getBlockEquationRenormalizedExpr(block, i)->collectTemporary_terms(temporary_terms, temporary_terms_in_use, block);
@@ -320,7 +320,7 @@ DynamicModel::writeModelEquationsOrdered_M(const string &basename) const
 
   //----------------------------------------------------------------------
   //For each block
-  for (unsigned int block = 0; block < getNbBlocks(); block++)
+  for (int block = 0; block < getNbBlocks(); block++)
     {
 
       //recursive_variables.clear();
@@ -331,16 +331,16 @@ DynamicModel::writeModelEquationsOrdered_M(const string &basename) const
       nze_exo = derivative_exo[block].size();
       nze_exo_det = derivative_exo_det[block].size();
       BlockSimulationType simulation_type = getBlockSimulationType(block);
-      unsigned int block_size = getBlockSize(block);
-      unsigned int block_mfs = getBlockMfs(block);
-      unsigned int block_recursive = block_size - block_mfs;
+      int block_size = getBlockSize(block);
+      int block_mfs = getBlockMfs(block);
+      int block_recursive = block_size - block_mfs;
       deriv_node_temp_terms_t tef_terms;
       local_output_type = ExprNodeOutputType::matlabDynamicModelSparse;
       if (global_temporary_terms)
         local_temporary_terms = temporary_terms;
 
       int prev_lag;
-      unsigned int prev_var, count_col, count_col_endo, count_col_exo, count_col_exo_det, count_col_other_endo;
+      int prev_var, count_col, count_col_endo, count_col_exo, count_col_exo_det, count_col_other_endo;
       map<tuple<int, int, int>, expr_t> tmp_block_endo_derivative;
       for (const auto &it : blocks_derivatives[block])
         tmp_block_endo_derivative[{ get<2>(it), get<1>(it), get<0>(it) }] = get<3>(it);
@@ -349,8 +349,7 @@ DynamicModel::writeModelEquationsOrdered_M(const string &basename) const
       count_col_endo = 0;
       for (const auto &it : tmp_block_endo_derivative)
         {
-          int lag = get<0>(it.first);
-          unsigned int var = get<1>(it.first);
+          auto [lag, var, ignore] = it.first;
           if (var != prev_var || lag != prev_lag)
             {
               prev_var = var;
@@ -366,8 +365,7 @@ DynamicModel::writeModelEquationsOrdered_M(const string &basename) const
       count_col_exo = 0;
       for (const auto &it : tmp_block_exo_derivative)
         {
-          int lag = get<0>(it.first);
-          unsigned int var = get<1>(it.first);
+          auto [lag, var, ignore] = it.first;
           if (var != prev_var || lag != prev_lag)
             {
               prev_var = var;
@@ -383,8 +381,7 @@ DynamicModel::writeModelEquationsOrdered_M(const string &basename) const
       count_col_exo_det = 0;
       for (const auto &it : tmp_block_exo_det_derivative)
         {
-          int lag = get<0>(it.first);
-          unsigned int var = get<1>(it.first);
+          auto [lag, var, ignore] = it.first;
           if (var != prev_var || lag != prev_lag)
             {
               prev_var = var;
@@ -400,8 +397,7 @@ DynamicModel::writeModelEquationsOrdered_M(const string &basename) const
       count_col_other_endo = 0;
       for (const auto &it : tmp_block_other_endo_derivative)
         {
-          int lag = get<0>(it.first);
-          unsigned int var = get<1>(it.first);
+          auto [lag, var, ignore] = it.first;
           if (var != prev_var || lag != prev_lag)
             {
               prev_var = var;
@@ -449,7 +445,7 @@ DynamicModel::writeModelEquationsOrdered_M(const string &basename) const
                 || simulation_type == BlockSimulationType::solveBackwardSimple
                 || simulation_type == BlockSimulationType::evaluateBackward
                 || simulation_type == BlockSimulationType::evaluateForward)
-               && getBlockFirstEquation(block) >= equations.size() - epilogue)
+               && getBlockFirstEquation(block) >= static_cast<int>(equations.size()) - epilogue)
         block_type = BlockType::epilogue;
       else
         block_type = BlockType::simultans;
@@ -501,7 +497,7 @@ DynamicModel::writeModelEquationsOrdered_M(const string &basename) const
           || simulation_type == BlockSimulationType::solveTwoBoundariesSimple)
         {
           temporary_terms_t tt2;
-          for (int i = 0; i < static_cast<int>(block_size); i++)
+          for (int i = 0; i < block_size; i++)
             {
               if (v_temporary_terms[block][i].size() && global_temporary_terms)
                 {
@@ -548,7 +544,7 @@ DynamicModel::writeModelEquationsOrdered_M(const string &basename) const
           sps = "";
       // The equations
       temporary_terms_idxs_t temporary_terms_idxs;
-      for (unsigned int i = 0; i < block_size; i++)
+      for (int i = 0; i < block_size; i++)
         {
           temporary_terms_t tt2;
           if (v_temporary_terms[block].size())
@@ -670,9 +666,7 @@ DynamicModel::writeModelEquationsOrdered_M(const string &basename) const
       count_col = 0;
       for (const auto &it : tmp_block_endo_derivative)
         {
-          int lag;
-          unsigned int var, eq;
-          tie(lag, var, eq) = it.first;
+          auto [lag, var, eq] = it.first;
           int eqr = getBlockEquationID(block, eq);
           int varr = getBlockVariableID(block, var);
           if (var != prev_var || lag != prev_lag)
@@ -696,9 +690,7 @@ DynamicModel::writeModelEquationsOrdered_M(const string &basename) const
       count_col = 0;
       for (const auto &it : tmp_block_exo_derivative)
         {
-          int lag;
-          unsigned int var, eq;
-          tie(lag, var, eq) = it.first;
+          auto [lag, var, eq] = it.first;
           int eqr = getBlockInitialEquationID(block, eq);
           if (var != prev_var || lag != prev_lag)
             {
@@ -719,9 +711,7 @@ DynamicModel::writeModelEquationsOrdered_M(const string &basename) const
       count_col = 0;
       for (const auto &it : tmp_block_exo_det_derivative)
         {
-          int lag;
-          unsigned int var, eq;
-          tie(lag, var, eq) = it.first;
+          auto [lag, var, eq] = it.first;
           int eqr = getBlockInitialEquationID(block, eq);
           if (var != prev_var || lag != prev_lag)
             {
@@ -742,9 +732,7 @@ DynamicModel::writeModelEquationsOrdered_M(const string &basename) const
       count_col = 0;
       for (const auto &it : tmp_block_other_endo_derivative)
         {
-          int lag;
-          unsigned int var, eq;
-          tie(lag, var, eq) = it.first;
+          auto [lag, var, eq] = it.first;
           int eqr = getBlockInitialEquationID(block, eq);
           if (var != prev_var || lag != prev_lag)
             {
@@ -777,14 +765,10 @@ DynamicModel::writeModelEquationsOrdered_M(const string &basename) const
         case BlockSimulationType::solveBackwardComplete:
         case BlockSimulationType::solveForwardComplete:
           output << "  else" << endl;
-          for (const auto &it : blocks_derivatives[block])
+          for (const auto &[eq, var, lag, id] : blocks_derivatives[block])
             {
-              unsigned int eq, var;
-              expr_t id;
-              int lag;
-              tie(eq, var, lag, id) = it;
-              unsigned int eqr = getBlockEquationID(block, eq);
-              unsigned int varr = getBlockVariableID(block, var);
+              int eqr = getBlockEquationID(block, eq);
+              int varr = getBlockVariableID(block, var);
               if (lag == 0)
                 {
                   output << "    g1(" << eq+1 << ", " << var+1-block_recursive << ") = ";
@@ -801,14 +785,10 @@ DynamicModel::writeModelEquationsOrdered_M(const string &basename) const
         case BlockSimulationType::solveTwoBoundariesSimple:
         case BlockSimulationType::solveTwoBoundariesComplete:
           output << "    else" << endl;
-          for (const auto &it : blocks_derivatives[block])
+          for (const auto &[eq, var, lag, id] : blocks_derivatives[block])
             {
-              unsigned int eq, var;
-              int lag;
-              expr_t id;
-              tie(eq, var, lag, id) = it;
-              unsigned int eqr = getBlockEquationID(block, eq);
-              unsigned int varr = getBlockVariableID(block, var);
+              int eqr = getBlockEquationID(block, eq);
+              int varr = getBlockVariableID(block, var);
               ostringstream tmp_output;
               if (eq >= block_recursive && var >= block_recursive)
                 {
@@ -856,7 +836,7 @@ DynamicModel::writeModelEquationsOrdered_M(const string &basename) const
                      << "    condition(" << eqr << ")=u(" << u << "+Per_u_);" << endl;
 #endif
             }
-          for (unsigned int i = 0; i < block_size; i++)
+          for (int i = 0; i < block_size; i++)
             {
               if (i >= block_recursive)
                 output << "  " << Uf[getBlockEquationID(block, i)] << ";" << endl;
@@ -871,10 +851,10 @@ DynamicModel::writeModelEquationsOrdered_M(const string &basename) const
               k = m-ModelBlock->Block_List[block].Max_Lag;
               for (i = 0; i < ModelBlock->Block_List[block].IM_lead_lag[m].size; i++)
                 {
-                  unsigned int eq = ModelBlock->Block_List[block].IM_lead_lag[m].Equ_Index[i];
-                  unsigned int var = ModelBlock->Block_List[block].IM_lead_lag[m].Var_Index[i];
-                  unsigned int u = ModelBlock->Block_List[block].IM_lead_lag[m].u[i];
-                  unsigned int eqr = ModelBlock->Block_List[block].IM_lead_lag[m].Equ[i];
+                  int eq = ModelBlock->Block_List[block].IM_lead_lag[m].Equ_Index[i];
+                  int var = ModelBlock->Block_List[block].IM_lead_lag[m].Var_Index[i];
+                  int u = ModelBlock->Block_List[block].IM_lead_lag[m].u[i];
+                  int eqr = ModelBlock->Block_List[block].IM_lead_lag[m].Equ[i];
                   output << "  u(" << u+1 << "+Per_u_) = u(" << u+1 << "+Per_u_) / condition(" << eqr+1 << ");" << endl;
                 }
             }
@@ -940,9 +920,9 @@ DynamicModel::writeModelEquationsCode(const string &basename, const map_idx_t &m
   for (const auto & [indices, d1] : derivatives[1])
     {
       int deriv_id = indices[1];
-      unsigned int eq = indices[0];
+      int eq = indices[0];
       int symb = getSymbIDByDerivID(deriv_id);
-      unsigned int var = symbol_table.getTypeSpecificID(symb);
+      int var = symbol_table.getTypeSpecificID(symb);
       int lag = getLagByDerivID(deriv_id);
       if (getTypeByDerivID(deriv_id) == SymbolType::endogenous)
         first_derivatives_reordered_endo[{ lag, var, eq }] = d1;
@@ -1030,9 +1010,9 @@ DynamicModel::writeModelEquationsCode(const string &basename, const map_idx_t &m
       int deriv_id = indices[1];
       if (getTypeByDerivID(deriv_id) == SymbolType::endogenous)
         {
-          unsigned int eq = indices[0];
+          int eq = indices[0];
           int symb = getSymbIDByDerivID(deriv_id);
-          unsigned int var = symbol_table.getTypeSpecificID(symb);
+          int var = symbol_table.getTypeSpecificID(symb);
           int lag = getLagByDerivID(deriv_id);
           FNUMEXPR_ fnumexpr(FirstEndoDerivative, eq, var, lag);
           fnumexpr.write(code_file, instruction_number);
@@ -1091,9 +1071,7 @@ DynamicModel::writeModelEquationsCode(const string &basename, const map_idx_t &m
   count_col_endo = 0;
   for (const auto &it : first_derivatives_reordered_endo)
     {
-      unsigned int eq;
-      int var, lag;
-      tie(lag, var, eq) = it.first;
+      auto [lag, var, eq] = it.first;
       expr_t d1 = it.second;
       FNUMEXPR_ fnumexpr(FirstEndoDerivative, eq, var, lag);
       fnumexpr.write(code_file, instruction_number);
@@ -1112,8 +1090,7 @@ DynamicModel::writeModelEquationsCode(const string &basename, const map_idx_t &m
   count_col_exo = 0;
   for (const auto &it : first_derivatives_reordered_exo)
     {
-      int lag, var, eq;
-      tie(lag, ignore, var, eq) = it.first;
+      auto [lag, ignore, var, eq] = it.first;
       expr_t d1 = it.second;
       FNUMEXPR_ fnumexpr(FirstExoDerivative, eq, var, lag);
       fnumexpr.write(code_file, instruction_number);
@@ -1184,7 +1161,7 @@ DynamicModel::writeModelEquationsCode_Block(const string &basename, const map_id
   FDIMT_ fdimt(temporary_terms.size());
   fdimt.write(code_file, instruction_number);
 
-  for (unsigned int block = 0; block < getNbBlocks(); block++)
+  for (int block = 0; block < getNbBlocks(); block++)
     {
       feedback_variables.clear();
       if (block > 0)
@@ -1195,9 +1172,9 @@ DynamicModel::writeModelEquationsCode_Block(const string &basename, const map_id
       int count_u;
       int u_count_int = 0;
       BlockSimulationType simulation_type = getBlockSimulationType(block);
-      unsigned int block_size = getBlockSize(block);
-      unsigned int block_mfs = getBlockMfs(block);
-      unsigned int block_recursive = block_size - block_mfs;
+      int block_size = getBlockSize(block);
+      int block_mfs = getBlockMfs(block);
+      int block_recursive = block_size - block_mfs;
       int block_max_lag = max_leadlag_block[block].first;
       int block_max_lead = max_leadlag_block[block].second;
 
@@ -1236,7 +1213,7 @@ DynamicModel::writeModelEquationsCode_Block(const string &basename, const map_id
               count_col_endo++;
             }
         }
-      unsigned int count_col_det_exo = 0;
+      int count_col_det_exo = 0;
       vector<unsigned int> exo_det;
       for (const auto &it : exo_det_block[block])
         for (const auto &it1 : it.second)
@@ -1246,7 +1223,7 @@ DynamicModel::writeModelEquationsCode_Block(const string &basename, const map_id
               exo_det.push_back(it1);
           }
 
-      unsigned int count_col_exo = 0;
+      int count_col_exo = 0;
       vector<unsigned int> exo;
       for (const auto &it : exo_block[block])
         for (const auto &it1 : it.second)
@@ -1257,7 +1234,7 @@ DynamicModel::writeModelEquationsCode_Block(const string &basename, const map_id
           }
 
       vector<unsigned int> other_endo;
-      unsigned int count_col_other_endo = 0;
+      int count_col_other_endo = 0;
       for (const auto &it : other_endo_block[block])
         for (const auto &it1 : it.second)
           {
@@ -1294,7 +1271,7 @@ DynamicModel::writeModelEquationsCode_Block(const string &basename, const map_id
         compileTemporaryTerms(code_file, instruction_number, temporary_terms, map_idx, true, false);
 
       // The equations
-      for (i = 0; i < static_cast<int>(block_size); i++)
+      for (i = 0; i < block_size; i++)
         {
           //The Temporary terms
           temporary_terms_t tt2;
@@ -1364,7 +1341,7 @@ DynamicModel::writeModelEquationsCode_Block(const string &basename, const map_id
             case BlockSimulationType::solveForwardComplete:
             case BlockSimulationType::solveTwoBoundariesComplete:
             case BlockSimulationType::solveTwoBoundariesSimple:
-              if (i < static_cast<int>(block_recursive))
+              if (i < block_recursive)
                 goto evaluation;
               variable_ID = getBlockVariableID(block, i);
               equation_ID = getBlockEquationID(block, i);
@@ -1419,13 +1396,10 @@ DynamicModel::writeModelEquationsCode_Block(const string &basename, const map_id
             case BlockSimulationType::solveTwoBoundariesComplete:
             case BlockSimulationType::solveTwoBoundariesSimple:
               count_u = feedback_variables.size();
-              for (const auto &it : blocks_derivatives[block])
+              for (const auto &[eq, var, lag, ignore] : blocks_derivatives[block])
                 {
-                  unsigned int eq, var;
-                  int lag;
-                  tie(eq, var, lag, ignore) = it;
-                  unsigned int eqr = getBlockEquationID(block, eq);
-                  unsigned int varr = getBlockVariableID(block, var);
+                  int eqr = getBlockEquationID(block, eq);
+                  int varr = getBlockVariableID(block, var);
                   if (eq >= block_recursive and var >= block_recursive)
                     {
                       if (lag != 0
@@ -1454,9 +1428,9 @@ DynamicModel::writeModelEquationsCode_Block(const string &basename, const map_id
                       count_u++;
                     }
                 }
-              for (i = 0; i < static_cast<int>(block_size); i++)
+              for (i = 0; i < block_size; i++)
                 {
-                  if (i >= static_cast<int>(block_recursive))
+                  if (i >= block_recursive)
                     {
                       FLDR_ fldr(i-block_recursive);
                       fldr.write(code_file, instruction_number);
@@ -1515,11 +1489,9 @@ DynamicModel::writeModelEquationsCode_Block(const string &basename, const map_id
       count_col_endo = 0;
       for (const auto &it : tmp_block_endo_derivative)
         {
-          int lag, var;
-          unsigned int eq;
-          tie(lag, var, eq) = it.first;
-          unsigned int eqr = getBlockEquationID(block, eq);
-          unsigned int varr = getBlockVariableID(block, var);
+          auto [lag, var, eq] = it.first;
+          int eqr = getBlockEquationID(block, eq);
+          int varr = getBlockVariableID(block, var);
           if (prev_var != var || prev_lag != lag)
             {
               prev_var = var;
@@ -1537,8 +1509,7 @@ DynamicModel::writeModelEquationsCode_Block(const string &basename, const map_id
       count_col_exo = 0;
       for (const auto &it : tmp_exo_derivative)
         {
-          int lag, eq, var;
-          tie(lag, var, eq) = it.first;
+          auto [lag, var, eq] = it.first;
           int eqr = getBlockInitialEquationID(block, eq);
           int varr = getBlockInitialExogenousID(block, var);
           if (prev_var != var || prev_lag != lag)
@@ -1560,8 +1531,7 @@ DynamicModel::writeModelEquationsCode_Block(const string &basename, const map_id
       int count_col_exo_det = 0;
       for (const auto &it : tmp_exo_det_derivative)
         {
-          int lag, eq, var;
-          tie(lag, var, eq) = it.first;
+          auto [lag, var, eq] = it.first;
           int eqr = getBlockInitialEquationID(block, eq);
           int varr = getBlockInitialDetExogenousID(block, var);
           if (prev_var != var || prev_lag != lag)
@@ -1583,8 +1553,7 @@ DynamicModel::writeModelEquationsCode_Block(const string &basename, const map_id
       count_col_other_endo = 0;
       for (const auto &it : tmp_other_endo_derivative)
         {
-          int lag, eq, var;
-          tie(lag, var, eq) = it.first;
+          auto [lag, var, eq] = it.first;
           int eqr = getBlockInitialEquationID(block, eq);
           int varr = getBlockInitialOtherEndogenousID(block, var);;
           if (prev_var != var || prev_lag != lag)
@@ -1839,14 +1808,11 @@ DynamicModel::Write_Inf_To_Bin_File_Block(const string &basename, int num,
       exit(EXIT_FAILURE);
     }
   u_count_int = 0;
-  unsigned int block_size = getBlockSize(num);
-  unsigned int block_mfs = getBlockMfs(num);
-  unsigned int block_recursive = block_size - block_mfs;
-  for (const auto &it : blocks_derivatives[num])
-    {
-      unsigned int eq, var;
-      int lag;
-      tie(eq, var, lag, ignore) = it;
+  int block_size = getBlockSize(num);
+  int block_mfs = getBlockMfs(num);
+  int block_recursive = block_size - block_mfs;
+  for (const auto &[eq, var, lag, ignore] : blocks_derivatives[num])
+    {
       if (lag != 0 && !is_two_boundaries)
         continue;
       if (eq >= block_recursive && var >= block_recursive)
@@ -1855,7 +1821,7 @@ DynamicModel::Write_Inf_To_Bin_File_Block(const string &basename, int num,
           SaveCode.write(reinterpret_cast<char *>(&v), sizeof(v));
           int varr = var - block_recursive + lag * block_mfs;
           SaveCode.write(reinterpret_cast<char *>(&varr), sizeof(varr));
-          SaveCode.write(reinterpret_cast<char *>(&lag), sizeof(lag));
+          SaveCode.write(reinterpret_cast<const char *>(&lag), sizeof(lag));
           int u = u_count_int + block_mfs;
           SaveCode.write(reinterpret_cast<char *>(&u), sizeof(u));
           u_count_int++;
@@ -1864,14 +1830,14 @@ DynamicModel::Write_Inf_To_Bin_File_Block(const string &basename, int num,
 
   if (is_two_boundaries)
     u_count_int += block_mfs;
-  for (j = block_recursive; j < static_cast<int>(block_size); j++)
+  for (j = block_recursive; j < block_size; j++)
     {
-      unsigned int varr = getBlockVariableID(num, j);
+      int varr = getBlockVariableID(num, j);
       SaveCode.write(reinterpret_cast<char *>(&varr), sizeof(varr));
     }
-  for (j = block_recursive; j < static_cast<int>(block_size); j++)
+  for (j = block_recursive; j < block_size; j++)
     {
-      unsigned int eqr = getBlockEquationID(num, j);
+      int eqr = getBlockEquationID(num, j);
       SaveCode.write(reinterpret_cast<char *>(&eqr), sizeof(eqr));
     }
   SaveCode.close();
@@ -1945,11 +1911,11 @@ DynamicModel::writeSparseDynamicMFile(const string &basename) const
                     << "    ys=y(it_,:);" << endl;
   tmp.str("");
   tmp_eq.str("");
-  unsigned int nb_blocks = getNbBlocks();
-  unsigned int block = 0;
+  int nb_blocks = getNbBlocks();
+  int block = 0;
   for (int count_call = 1; block < nb_blocks; block++, count_call++)
     {
-      unsigned int block_size = getBlockSize(block),
+      int block_size = getBlockSize(block),
         block_mfs = getBlockMfs(block),
         block_recursive = block_size - block_mfs;
       BlockSimulationType simulation_type = getBlockSimulationType(block);
@@ -1957,7 +1923,7 @@ DynamicModel::writeSparseDynamicMFile(const string &basename) const
       if (simulation_type == BlockSimulationType::evaluateForward
           || simulation_type == BlockSimulationType::evaluateBackward)
         {
-          for (unsigned int ik = 0; ik < block_size; ik++)
+          for (int ik = 0; ik < block_size; ik++)
             {
               tmp << " " << getBlockVariableID(block, ik)+1;
               tmp_eq << " " << getBlockEquationID(block, ik)+1;
@@ -1965,7 +1931,7 @@ DynamicModel::writeSparseDynamicMFile(const string &basename) const
         }
       else
         {
-          for (unsigned int ik = block_recursive; ik < block_size; ik++)
+          for (int ik = block_recursive; ik < block_size; ik++)
             {
               tmp << " " << getBlockVariableID(block, ik)+1;
               tmp_eq << " " << getBlockEquationID(block, ik)+1;
@@ -2040,9 +2006,9 @@ DynamicModel::writeSparseDynamicMFile(const string &basename) const
                     << "  oo_.deterministic_simulation.status = 0;" << endl;
   for (block = 0; block < nb_blocks; block++)
     {
-      unsigned int block_size = getBlockSize(block);
-      unsigned int block_mfs = getBlockMfs(block);
-      unsigned int block_recursive = block_size - block_mfs;
+      int block_size = getBlockSize(block);
+      int block_mfs = getBlockMfs(block);
+      int block_recursive = block_size - block_mfs;
       BlockSimulationType simulation_type = getBlockSimulationType(block);
 
       if (simulation_type == BlockSimulationType::evaluateForward && block_size)
@@ -2106,7 +2072,7 @@ DynamicModel::writeSparseDynamicMFile(const string &basename) const
           mDynamicModelFile << "  g1=0;" << endl
                             << "  r=0;" << endl;
           tmp.str("");
-          for (unsigned int ik = block_recursive; ik < block_size; ik++)
+          for (int ik = block_recursive; ik < block_size; ik++)
             tmp << " " << getBlockVariableID(block, ik)+1;
           mDynamicModelFile << "  y_index = [" << tmp.str() << "];" << endl;
           int nze = blocks_derivatives[block].size();
@@ -2137,7 +2103,7 @@ DynamicModel::writeSparseDynamicMFile(const string &basename) const
           mDynamicModelFile << "  g1=0;" << endl
                             << "  r=0;" << endl;
           tmp.str("");
-          for (unsigned int ik = block_recursive; ik < block_size; ik++)
+          for (int ik = block_recursive; ik < block_size; ik++)
             tmp << " " << getBlockVariableID(block, ik)+1;
           mDynamicModelFile << "  y_index = [" << tmp.str() << "];" << endl;
           int nze = blocks_derivatives[block].size();
@@ -2169,7 +2135,7 @@ DynamicModel::writeSparseDynamicMFile(const string &basename) const
           Nb_SGE++;
           int nze = blocks_derivatives[block].size();
           mDynamicModelFile << "  y_index=[";
-          for (unsigned int ik = block_recursive; ik < block_size; ik++)
+          for (int ik = block_recursive; ik < block_size; ik++)
             mDynamicModelFile << " " << getBlockVariableID(block, ik)+1;
           mDynamicModelFile << "  ];" << endl
                             << "  if(isfield(oo_.deterministic_simulation,'block'))" << endl
@@ -3169,8 +3135,8 @@ DynamicModel::writeOutput(ostream &output, const string &basename, bool block_de
       vector<int> state_equ;
       int count_lead_lag_incidence = 0;
       int max_lead, max_lag, max_lag_endo, max_lead_endo, max_lag_exo, max_lead_exo, max_lag_exo_det, max_lead_exo_det;
-      unsigned int nb_blocks = getNbBlocks();
-      for (unsigned int block = 0; block < nb_blocks; block++)
+      int nb_blocks = getNbBlocks();
+      for (int block = 0; block < nb_blocks; block++)
         {
           //For a block composed of a single equation determines wether we have to evaluate or to solve the equation
           count_lead_lag_incidence = 0;
@@ -3252,9 +3218,9 @@ DynamicModel::writeOutput(ostream &output, const string &basename, bool block_de
             if (other_endo >= 0)
               {
                 bool OK = true;
-                unsigned int j;
+                int j;
                 for (j = 0; j < block && OK; j++)
-                  for (unsigned int k = 0; k < getBlockSize(j) && OK; k++)
+                  for (int k = 0; k < getBlockSize(j) && OK; k++)
                     OK = other_endo != getBlockVariableID(j, k);
                 if (!OK)
                   output << " " << j;
@@ -3353,7 +3319,7 @@ DynamicModel::writeOutput(ostream &output, const string &basename, bool block_de
                   bool done = false;
                   for (int i = 0; i < block_size; i++)
                     {
-                      unsigned int eq = getBlockEquationID(block, i);
+                      int eq = getBlockEquationID(block, i);
                       if (derivative_other_endo[block].find({ lag, eq, other_endo })
                           != derivative_other_endo[block].end())
                         {
@@ -3438,9 +3404,9 @@ DynamicModel::writeOutput(ostream &output, const string &basename, bool block_de
           vector<int> i_nz_state_var(n);
           for (int i = 0; i < n_obs; i++)
             i_nz_state_var[i] = n;
-          unsigned int lp = n_obs;
+          int lp = n_obs;
 
-          for (unsigned int block = 0; block < nb_blocks; block++)
+          for (int block = 0; block < nb_blocks; block++)
             {
               int block_size = getBlockSize(block);
               int nze = 0;
@@ -3501,7 +3467,7 @@ DynamicModel::writeOutput(ostream &output, const string &basename, bool block_de
               lp += nze;
             }
           output << modstruct << "nz_state_var = [";
-          for (unsigned int i = 0; i < lp; i++)
+          for (int i = 0; i < lp; i++)
             output << i_nz_state_var[i] << " ";
           output << "];" << endl;
           output << modstruct << "n_diag = " << nb_diag << ";" << endl;
@@ -4846,7 +4812,7 @@ DynamicModel::computingPass(bool jacobianExo, int derivsOrder, int paramsDerivsO
   map<tuple<int, int, int>, expr_t> first_order_endo_derivatives;
   // for each block contains pair<Size, Feddback_variable>
   vector<pair<int, int>> blocks;
-  vector<unsigned int> n_static, n_forward, n_backward, n_mixed;
+  vector<int> n_static, n_forward, n_backward, n_mixed;
 
   if (linear_decomposition)
     {
@@ -4919,9 +4885,9 @@ DynamicModel::computingPass(bool jacobianExo, int derivsOrder, int paramsDerivsO
       equation_block.resize(equations.size());
       variable_block_lead_lag.clear();
       variable_block_lead_lag.resize(equations.size());
-      for (unsigned int i = 0; i < getNbBlocks(); i++)
+      for (int i = 0; i < getNbBlocks(); i++)
         {
-          for (unsigned int j = 0; j < getBlockSize(i); j++)
+          for (int j = 0; j < getBlockSize(i); j++)
             {
               equation_block[equation_reordered[k]] = i;
               int l = variable_reordered[k];
@@ -5107,9 +5073,9 @@ void
 DynamicModel::computeChainRuleJacobian()
 {
   map<int, expr_t> recursive_variables;
-  unsigned int nb_blocks = getNbBlocks();
+  int nb_blocks = getNbBlocks();
   blocks_derivatives.resize(nb_blocks);
-  for (unsigned int block = 0; block < nb_blocks; block++)
+  for (int block = 0; block < nb_blocks; block++)
     {
       block_derivatives_equation_variable_laglead_nodeid_t tmp_derivatives;
       recursive_variables.clear();
@@ -5151,11 +5117,11 @@ DynamicModel::collect_block_first_order_derivatives()
 {
   //! vector for an equation or a variable indicates the block number
   vector<int> equation_2_block(equation_reordered.size()), variable_2_block(variable_reordered.size());
-  unsigned int nb_blocks = getNbBlocks();
-  for (unsigned int block = 0; block < nb_blocks; block++)
+  int nb_blocks = getNbBlocks();
+  for (int block = 0; block < nb_blocks; block++)
     {
-      unsigned int block_size = getBlockSize(block);
-      for (unsigned int i = 0; i < block_size; i++)
+      int block_size = getBlockSize(block);
+      for (int i = 0; i < block_size; i++)
         {
           equation_2_block[getBlockEquationID(block, i)] = block;
           variable_2_block[getBlockVariableID(block, i)] = block;
@@ -5289,7 +5255,7 @@ DynamicModel::collect_block_first_order_derivatives()
 void
 DynamicModel::collectBlockVariables()
 {
-  for (unsigned int block = 0; block < getNbBlocks(); block++)
+  for (int block = 0; block < getNbBlocks(); block++)
     {
       int prev_var = -1;
       int prev_lag = -999999999;
diff --git a/src/DynamicModel.hh b/src/DynamicModel.hh
index 36eee44829822aee1b6c514ba76a5db3163aa416..b834310dfd93a67a382b89ca8cae463eb51f1127 100644
--- a/src/DynamicModel.hh
+++ b/src/DynamicModel.hh
@@ -556,7 +556,7 @@ public:
   };
 
   //! Return the number of blocks
-  unsigned int
+  int
   getNbBlocks() const override
   {
     return block_type_firstequation_size_mfs.size();
@@ -568,43 +568,43 @@ public:
     return get<0>(block_type_firstequation_size_mfs[block_number]);
   };
   //! Return the first equation number of a block
-  unsigned int
+  int
   getBlockFirstEquation(int block_number) const override
   {
     return get<1>(block_type_firstequation_size_mfs[block_number]);
   };
   //! Return the size of the block block_number
-  unsigned int
+  int
   getBlockSize(int block_number) const override
   {
     return get<2>(block_type_firstequation_size_mfs[block_number]);
   };
   //! Return the number of exogenous variable in the block block_number
-  unsigned int
+  int
   getBlockExoSize(int block_number) const override
   {
     return block_var_exo[block_number].first.size();
   };
   //! Return the number of colums in the jacobian matrix for exogenous variable in the block block_number
-  unsigned int
+  int
   getBlockExoColSize(int block_number) const override
   {
     return block_var_exo[block_number].second;
   };
   //! Return the number of feedback variable of the block block_number
-  unsigned int
+  int
   getBlockMfs(int block_number) const override
   {
     return get<3>(block_type_firstequation_size_mfs[block_number]);
   };
   //! Return the maximum lag in a block
-  unsigned int
+  int
   getBlockMaxLag(int block_number) const override
   {
     return block_lag_lead[block_number].first;
   };
   //! Return the maximum lead in a block
-  unsigned int
+  int
   getBlockMaxLead(int block_number) const override
   {
     return block_lag_lead[block_number].second;
@@ -655,13 +655,13 @@ public:
   int
   getBlockInitialEquationID(int block_number, int equation_number) const override
   {
-    return static_cast<int>(inv_equation_reordered[equation_number]) - static_cast<int>(get<1>(block_type_firstequation_size_mfs[block_number]));
+    return inv_equation_reordered[equation_number] - get<1>(block_type_firstequation_size_mfs[block_number]);
   };
   //! Return the position of variable_number in the block number belonging to the block block_number
   int
   getBlockInitialVariableID(int block_number, int variable_number) const override
   {
-    return static_cast<int>(inv_variable_reordered[variable_number]) - static_cast<int>(get<1>(block_type_firstequation_size_mfs[block_number]));
+    return inv_variable_reordered[variable_number] - get<1>(block_type_firstequation_size_mfs[block_number]);
   };
   //! Return the block number containing the endogenous variable variable_number
   int
diff --git a/src/ExprNode.cc b/src/ExprNode.cc
index 2e262a306c1cadec195e59e5de7d621ab56bbe00..e555224dfedf900b94be4175643ce76bdb6942ed 100644
--- a/src/ExprNode.cc
+++ b/src/ExprNode.cc
@@ -8163,7 +8163,7 @@ FirstDerivExternalFunctionNode::compileExternalFunctionOutput(ostream &CompileCo
     {
       unsigned int nb_input_arguments = 0;
       unsigned int nb_output_arguments = 1;
-      unsigned int indx = getIndxInTefTerms(symb_id, tef_terms);
+      int indx = getIndxInTefTerms(symb_id, tef_terms);
       FCALL_ fcall(nb_output_arguments, nb_input_arguments, "jacob_element", indx);
       fcall.set_arg_func_name(datatree.symbol_table.getName(symb_id));
       fcall.set_row(inputIndex);
diff --git a/src/MinimumFeedbackSet.cc b/src/MinimumFeedbackSet.cc
index bdeb3221bcf3a04c7fd41161b973b72cd13e004f..a162ce33b4de92485e9a3dd6c4a8a0ea747fc94f 100644
--- a/src/MinimumFeedbackSet.cc
+++ b/src/MinimumFeedbackSet.cc
@@ -123,18 +123,18 @@ namespace MFS
   }
 
   AdjacencyList_t
-  AM_2_AdjacencyList(bool *AM, unsigned int n)
+  AM_2_AdjacencyList(bool *AM, int n)
   {
     AdjacencyList_t G(n);
     auto v_index = get(vertex_index, G);
     auto v_index1 = get(vertex_index1, G);
-    for (unsigned int i = 0; i < n; i++)
+    for (int i = 0; i < n; i++)
       {
         put(v_index, vertex(i, G), i);
         put(v_index1, vertex(i, G), i);
       }
-    for (unsigned int i = 0; i < n; i++)
-      for (unsigned int j = 0; j < n; j++)
+    for (int i = 0; i < n; i++)
+      for (int j = 0; j < n; j++)
         if (AM[i*n+j])
           add_edge(vertex(j, G), vertex(i, G), G);
     return G;
@@ -143,14 +143,14 @@ namespace MFS
   AdjacencyList_t
   extract_subgraph(AdjacencyList_t &G1, set<int> select_index)
   {
-    unsigned int n = select_index.size();
+    int n = select_index.size();
     AdjacencyList_t G(n);
     auto v_index = get(vertex_index, G);
     auto v_index1 = get(vertex_index1, G);
     auto v1_index = get(vertex_index, G1);
     map<int, int> reverse_index;
     set<int>::iterator it;
-    unsigned int i;
+    int i;
     for (it = select_index.begin(), i = 0; i < n; i++, ++it)
       {
         reverse_index[get(v1_index, vertex(*it, G1))] = i;
@@ -205,11 +205,11 @@ namespace MFS
       {
         if (it_in != in_end || it_out != out_end)
           agree = false;
-        unsigned int i = 1;
-        while (i < liste.size() && agree)
+        int i = 1;
+        while (i < static_cast<int>(liste.size()) && agree)
           {
-            unsigned int j = i + 1;
-            while (j < liste.size() && agree)
+            int j = i + 1;
+            while (j < static_cast<int>(liste.size()) && agree)
               {
                 AdjacencyList_t::edge_descriptor ed;
                 bool exist1, exist2;
@@ -379,10 +379,10 @@ namespace MFS
         if (num_vertices(G) > 0)
           {
             /*if nothing has been done in the five previous rule then cut the vertex with the maximum in_degree+out_degree*/
-            unsigned int max_degree = 0, num = 0;
+            int max_degree = 0, num = 0;
             AdjacencyList_t::vertex_iterator it, it_end, max_degree_index;
             for (tie(it, it_end) = vertices(G); it != it_end; ++it, num++)
-              if (in_degree(*it, G) + out_degree(*it, G) > max_degree)
+              if (static_cast<int>(in_degree(*it, G) + out_degree(*it, G)) > max_degree)
                 {
                   max_degree = in_degree(*it, G) + out_degree(*it, G);
                   max_degree_index = it;
diff --git a/src/ModelTree.cc b/src/ModelTree.cc
index 54cb93eec6e2cea3de3f39a0d60dfa0bc42e7661..ec93b9d6c544a13a890c27651413afd1526cfdfe 100644
--- a/src/ModelTree.cc
+++ b/src/ModelTree.cc
@@ -465,11 +465,11 @@ ModelTree::evaluateAndReduceJacobian(const eval_context_t &eval_context, double
 }
 
 tuple<vector<pair<int, int>>, lag_lead_vector_t, lag_lead_vector_t,
-      vector<unsigned int>, vector<unsigned int>, vector<unsigned int>, vector<unsigned int>>
+      vector<int>, vector<int>, vector<int>, vector<int>>
 ModelTree::select_non_linear_equations_and_variables(const vector<bool> &is_equation_linear)
 {
   vector<int> eq2endo(equations.size(), 0);
-  unsigned int num = 0;
+  int num = 0;
   for (auto it : endo2eq)
     if (!is_equation_linear[it])
       num++;
@@ -487,9 +487,9 @@ ModelTree::select_non_linear_equations_and_variables(const vector<bool> &is_equa
         j++;
       }
   auto [equation_lag_lead, variable_lag_lead] = getVariableLeadLagByBlock(endo2block, endo2block.size());
-  vector<unsigned int> n_static(endo2eq.size(), 0), n_forward(endo2eq.size(), 0),
+  vector<int> n_static(endo2eq.size(), 0), n_forward(endo2eq.size(), 0),
     n_backward(endo2eq.size(), 0), n_mixed(endo2eq.size(), 0);
-  for (unsigned int i = 0; i < endo2eq.size(); i++)
+  for (int i = 0; i < static_cast<int>(endo2eq.size()); i++)
     {
       if (variable_lag_lead[variable_reordered[i]].first != 0 && variable_lag_lead[variable_reordered[i]].second != 0)
         n_mixed[i]++;
@@ -621,7 +621,7 @@ ModelTree::computePrologueAndEpilogue(const jacob_map_t &static_jacobian)
     {
       something_has_been_done = false;
       int new_epilogue = epilogue;
-      for (int i = prologue; i < n - static_cast<int>(epilogue); i++)
+      for (int i = prologue; i < n - epilogue; i++)
         {
           int nze = 0;
           int k = 0;
@@ -658,7 +658,7 @@ ModelTree::equationTypeDetermination(const map<tuple<int, int, int>, expr_t> &fi
   EquationType Equation_Simulation_Type;
   equation_type_and_normalized_equation.clear();
   equation_type_and_normalized_equation.resize(equations.size());
-  for (unsigned int i = 0; i < equations.size(); i++)
+  for (int i = 0; i < static_cast<int>(equations.size()); i++)
     {
       int eq = equation_reordered[i];
       int var = variable_reordered[i];
@@ -703,12 +703,12 @@ ModelTree::getVariableLeadLagByBlock(const vector<int> &components_set, int nb_b
   vector<int> variable_blck(nb_endo), equation_blck(nb_endo);
   for (int i = 0; i < nb_endo; i++)
     {
-      if (i < static_cast<int>(prologue))
+      if (i < prologue)
         {
           variable_blck[variable_reordered[i]] = i;
           equation_blck[equation_reordered[i]] = i;
         }
-      else if (i < static_cast<int>(components_set.size() + prologue))
+      else if (i < static_cast<int>(components_set.size()) + prologue)
         {
           variable_blck[variable_reordered[i]] = components_set[i-prologue] + prologue;
           equation_blck[equation_reordered[i]] = components_set[i-prologue] + prologue;
@@ -738,7 +738,7 @@ ModelTree::getVariableLeadLagByBlock(const vector<int> &components_set, int nb_b
 }
 
 tuple<vector<pair<int, int>>, lag_lead_vector_t, lag_lead_vector_t,
-      vector<unsigned int>, vector<unsigned int>, vector<unsigned int>, vector<unsigned int>>
+      vector<int>, vector<int>, vector<int>, vector<int>>
 ModelTree::computeBlockDecompositionAndFeedbackVariablesForEachBlock(const jacob_map_t &static_jacobian, const equation_type_and_normalized_equation_t &Equation_Type, bool verbose_, bool select_feedback_variable)
 {
   int nb_var = variable_reordered.size();
@@ -773,8 +773,8 @@ ModelTree::computeBlockDecompositionAndFeedbackVariablesForEachBlock(const jacob
   else
     tmp_normalized_contemporaneous_jacobian = static_jacobian;
   for (const auto &[key, value] : tmp_normalized_contemporaneous_jacobian)
-    if (reverse_equation_reordered[key.first] >= static_cast<int>(prologue) && reverse_equation_reordered[key.first] < static_cast<int>(nb_var - epilogue)
-        && reverse_variable_reordered[key.second] >= static_cast<int>(prologue) && reverse_variable_reordered[key.second] < static_cast<int>(nb_var - epilogue)
+    if (reverse_equation_reordered[key.first] >= prologue && reverse_equation_reordered[key.first] < nb_var - epilogue
+        && reverse_variable_reordered[key.second] >= prologue && reverse_variable_reordered[key.second] < nb_var - epilogue
         && key.first != endo2eq[key.second])
       add_edge(vertex(reverse_equation_reordered[endo2eq[key.second]]-prologue, G2),
                vertex(reverse_equation_reordered[key.first]-prologue, G2),
@@ -792,7 +792,7 @@ ModelTree::computeBlockDecompositionAndFeedbackVariablesForEachBlock(const jacob
   using DirectedGraph = boost::adjacency_list<boost::vecS, boost::vecS, boost::directedS>;
   DirectedGraph dag(num);
 
-  for (unsigned int i = 0; i < num_vertices(G2); i++)
+  for (int i = 0; i < static_cast<int>(num_vertices(G2)); i++)
     {
       MFS::AdjacencyList_t::out_edge_iterator it_out, out_end;
       MFS::AdjacencyList_t::vertex_descriptor vi = vertex(i, G2);
@@ -819,7 +819,7 @@ ModelTree::computeBlockDecompositionAndFeedbackVariablesForEachBlock(const jacob
   //   - second set = the feeback variables,
   //   - third vector = the reordered non-feedback variables.
   vector<tuple<set<int>, set<int>, vector<int>>> components_set(num);
-  for (unsigned int i = 0; i < endo2block.size(); i++)
+  for (int i = 0; i < static_cast<int>(endo2block.size()); i++)
     {
       endo2block[i] = unordered2ordered[endo2block[i]];
       blocks[endo2block[i]].first++;
@@ -848,10 +848,10 @@ ModelTree::computeBlockDecompositionAndFeedbackVariablesForEachBlock(const jacob
         add_edge(vertex(i, G2), vertex(i, G2), G2);
 
   //Determines the dynamic structure of each equation
-  vector<unsigned int> n_static(prologue+num+epilogue, 0), n_forward(prologue+num+epilogue, 0),
+  vector<int> n_static(prologue+num+epilogue, 0), n_forward(prologue+num+epilogue, 0),
     n_backward(prologue+num+epilogue, 0), n_mixed(prologue+num+epilogue, 0);
 
-  for (int i = 0; i < static_cast<int>(prologue); i++)
+  for (int i = 0; i < prologue; i++)
     if (variable_lag_lead[tmp_variable_reordered[i]].first != 0 && variable_lag_lead[tmp_variable_reordered[i]].second != 0)
       n_mixed[i]++;
     else if (variable_lag_lead[tmp_variable_reordered[i]].first == 0 && variable_lag_lead[tmp_variable_reordered[i]].second != 0)
@@ -944,7 +944,7 @@ ModelTree::computeBlockDecompositionAndFeedbackVariablesForEachBlock(const jacob
           }
     }
 
-  for (int i = 0; i < static_cast<int>(epilogue); i++)
+  for (int i = 0; i < epilogue; i++)
     if (variable_lag_lead[tmp_variable_reordered[prologue+n+i]].first != 0 && variable_lag_lead[tmp_variable_reordered[prologue+n+i]].second != 0)
       n_mixed[prologue+num+i]++;
     else if (variable_lag_lead[tmp_variable_reordered[prologue+n+i]].first == 0 && variable_lag_lead[tmp_variable_reordered[prologue+n+i]].second != 0)
@@ -971,8 +971,8 @@ ModelTree::printBlockDecomposition(const vector<pair<int, int>> &blocks) const
   int largest_block = 0,
     Nb_SimulBlocks = 0,
     Nb_feedback_variable = 0;
-  unsigned int Nb_TotalBlocks = getNbBlocks();
-  for (unsigned int block = 0; block < Nb_TotalBlocks; block++)
+  int Nb_TotalBlocks = getNbBlocks();
+  for (int block = 0; block < Nb_TotalBlocks; block++)
     {
       BlockSimulationType simulation_type = getBlockSimulationType(block);
       if (simulation_type == BlockSimulationType::solveForwardComplete
@@ -997,7 +997,7 @@ ModelTree::printBlockDecomposition(const vector<pair<int, int>> &blocks) const
 }
 
 void
-ModelTree::reduceBlocksAndTypeDetermination(const vector<pair<int, int>> &blocks, const equation_type_and_normalized_equation_t &Equation_Type, const vector<unsigned int> &n_static, const vector<unsigned int> &n_forward, const vector<unsigned int> &n_backward, const vector<unsigned int> &n_mixed, bool linear_decomposition)
+ModelTree::reduceBlocksAndTypeDetermination(const vector<pair<int, int>> &blocks, const equation_type_and_normalized_equation_t &Equation_Type, const vector<int> &n_static, const vector<int> &n_forward, const vector<int> &n_backward, const vector<int> &n_mixed, bool linear_decomposition)
 {
   int i = 0;
   int count_equ = 0, blck_count_simult = 0;
@@ -1006,22 +1006,22 @@ ModelTree::reduceBlocksAndTypeDetermination(const vector<pair<int, int>> &blocks
   block_type_firstequation_size_mfs.clear();
   BlockSimulationType Simulation_Type, prev_Type = BlockSimulationType::unknown;
   int eq = 0;
-  unsigned int l_n_static = 0, l_n_forward = 0, l_n_backward = 0, l_n_mixed = 0;
-  for (i = 0; i < static_cast<int>(prologue+blocks.size()+epilogue); i++)
+  int l_n_static = 0, l_n_forward = 0, l_n_backward = 0, l_n_mixed = 0;
+  for (i = 0; i < prologue+static_cast<int>(blocks.size())+epilogue; i++)
     {
       int first_count_equ = count_equ;
-      if (i < static_cast<int>(prologue))
+      if (i < prologue)
         {
           Blck_Size = 1;
           MFS_Size = 1;
         }
-      else if (i < static_cast<int>(prologue+blocks.size()))
+      else if (i < prologue+static_cast<int>(blocks.size()))
         {
           Blck_Size = blocks[blck_count_simult].first;
           MFS_Size = blocks[blck_count_simult].second;
           blck_count_simult++;
         }
-      else if (i < static_cast<int>(prologue+blocks.size()+epilogue))
+      else if (i < prologue+static_cast<int>(blocks.size())+epilogue)
         {
           Blck_Size = 1;
           MFS_Size = 1;
@@ -1176,10 +1176,10 @@ ModelTree::equationLinear(const map<tuple<int, int, int>, expr_t> &first_order_e
 void
 ModelTree::determineLinearBlocks()
 {
-  unsigned int nb_blocks = getNbBlocks();
+  int nb_blocks = getNbBlocks();
   blocks_linear.clear();
   blocks_linear.resize(nb_blocks, true);
-  for (unsigned int block = 0; block < nb_blocks; block++)
+  for (int block = 0; block < nb_blocks; block++)
     {
       BlockSimulationType simulation_type = getBlockSimulationType(block);
       int block_size = getBlockSize(block);
@@ -1801,9 +1801,9 @@ ModelTree::Write_Inf_To_Bin_File(const string &filename,
     }
   if (is_two_boundaries)
     u_count_int += symbol_table.endo_nbr();
-  for (j = 0; j < static_cast<int>(symbol_table.endo_nbr()); j++)
+  for (j = 0; j < symbol_table.endo_nbr(); j++)
     SaveCode.write(reinterpret_cast<char *>(&j), sizeof(j));
-  for (j = 0; j < static_cast<int>(symbol_table.endo_nbr()); j++)
+  for (j = 0; j < symbol_table.endo_nbr(); j++)
     SaveCode.write(reinterpret_cast<char *>(&j), sizeof(j));
   SaveCode.close();
 }
diff --git a/src/ModelTree.hh b/src/ModelTree.hh
index c083341a89161901fb19ea3092e9a6415edabf19..b6dfbc49b6eb08680270fbadd1237922776e2781 100644
--- a/src/ModelTree.hh
+++ b/src/ModelTree.hh
@@ -261,7 +261,7 @@ protected:
   vector<int> endo2eq;
 
   //! number of equation in the prologue and in the epilogue
-  unsigned int epilogue, prologue;
+  int epilogue, prologue;
 
   //! for each block contains pair< max_lag, max_lead>
   lag_lead_vector_t block_lag_lead;
@@ -290,7 +290,7 @@ protected:
   //! Select and reorder the non linear equations of the model
   /*! Returns a tuple (blocks, equation_lag_lead, variable_lag_lead, n_static,
       n_forward, n_backward, n_mixed) */
-  tuple<vector<pair<int, int>>, lag_lead_vector_t, lag_lead_vector_t, vector<unsigned int>, vector<unsigned int>, vector<unsigned int>, vector<unsigned int>> select_non_linear_equations_and_variables(const vector<bool> &is_equation_linear);
+  tuple<vector<pair<int, int>>, lag_lead_vector_t, lag_lead_vector_t, vector<int>, vector<int>, vector<int>, vector<int>> select_non_linear_equations_and_variables(const vector<bool> &is_equation_linear);
   //! Search the equations and variables belonging to the prologue and the epilogue of the model
   void computePrologueAndEpilogue(const jacob_map_t &static_jacobian);
   //! Determine the type of each equation of model and try to normalize the unnormalized equation
@@ -298,9 +298,9 @@ protected:
   //! Compute the block decomposition and for a non-recusive block find the minimum feedback set
   /*! Returns a tuple (blocks, equation_lag_lead, variable_lag_lead, n_static,
       n_forward, n_backward, n_mixed) */
-  tuple<vector<pair<int, int>>, lag_lead_vector_t, lag_lead_vector_t, vector<unsigned int>, vector<unsigned int>, vector<unsigned int>, vector<unsigned int>> computeBlockDecompositionAndFeedbackVariablesForEachBlock(const jacob_map_t &static_jacobian, const equation_type_and_normalized_equation_t &Equation_Type, bool verbose_, bool select_feedback_variable);
+  tuple<vector<pair<int, int>>, lag_lead_vector_t, lag_lead_vector_t, vector<int>, vector<int>, vector<int>, vector<int>> computeBlockDecompositionAndFeedbackVariablesForEachBlock(const jacob_map_t &static_jacobian, const equation_type_and_normalized_equation_t &Equation_Type, bool verbose_, bool select_feedback_variable);
   //! Reduce the number of block merging the same type equation in the prologue and the epilogue and determine the type of each block
-  void reduceBlocksAndTypeDetermination(const vector<pair<int, int>> &blocks, const equation_type_and_normalized_equation_t &Equation_Type, const vector<unsigned int> &n_static, const vector<unsigned int> &n_forward, const vector<unsigned int> &n_backward, const vector<unsigned int> &n_mixed, bool linear_decomposition);
+  void reduceBlocksAndTypeDetermination(const vector<pair<int, int>> &blocks, const equation_type_and_normalized_equation_t &Equation_Type, const vector<int> &n_static, const vector<int> &n_forward, const vector<int> &n_backward, const vector<int> &n_mixed, bool linear_decomposition);
   //! Determine the maximum number of lead and lag for the endogenous variable in a bloc
   /*! Returns a pair { equation_lead,lag, variable_lead_lag } */
   pair<lag_lead_vector_t, lag_lead_vector_t> getVariableLeadLagByBlock(const vector<int> &components_set, int nb_blck_sim) const;
@@ -318,21 +318,21 @@ protected:
   //! Determine the simulation type of each block
   virtual BlockSimulationType getBlockSimulationType(int block_number) const = 0;
   //! Return the number of blocks
-  virtual unsigned int getNbBlocks() const = 0;
+  virtual int getNbBlocks() const = 0;
   //! Return the first equation number of a block
-  virtual unsigned int getBlockFirstEquation(int block_number) const = 0;
+  virtual int getBlockFirstEquation(int block_number) const = 0;
   //! Return the size of the block block_number
-  virtual unsigned int getBlockSize(int block_number) const = 0;
+  virtual int getBlockSize(int block_number) const = 0;
   //! Return the number of exogenous variable in the block block_number
-  virtual unsigned int getBlockExoSize(int block_number) const = 0;
+  virtual int getBlockExoSize(int block_number) const = 0;
   //! Return the number of colums in the jacobian matrix for exogenous variable in the block block_number
-  virtual unsigned int getBlockExoColSize(int block_number) const = 0;
+  virtual int getBlockExoColSize(int block_number) const = 0;
   //! Return the number of feedback variable of the block block_number
-  virtual unsigned int getBlockMfs(int block_number) const = 0;
+  virtual int getBlockMfs(int block_number) const = 0;
   //! Return the maximum lag in a block
-  virtual unsigned int getBlockMaxLag(int block_number) const = 0;
+  virtual int getBlockMaxLag(int block_number) const = 0;
   //! Return the maximum lead in a block
-  virtual unsigned int getBlockMaxLead(int block_number) const = 0;
+  virtual int getBlockMaxLead(int block_number) const = 0;
   inline void
   setBlockLeadLag(int block, int max_lag, int max_lead)
   {
diff --git a/src/StaticModel.cc b/src/StaticModel.cc
index c0d7cd9e42b25be9ac99de20a0951b5da9112f71..c8f477738b1049fbaf3765135b53547951ad41c8 100644
--- a/src/StaticModel.cc
+++ b/src/StaticModel.cc
@@ -161,7 +161,7 @@ StaticModel::computeTemporaryTermsOrdered()
   ostringstream tmp_s;
   map_idx.clear();
 
-  unsigned int nb_blocks = getNbBlocks();
+  int nb_blocks = getNbBlocks();
   v_temporary_terms = vector< vector<temporary_terms_t>>(nb_blocks);
   v_temporary_terms_local = vector< vector<temporary_terms_t>>(nb_blocks);
 
@@ -172,18 +172,18 @@ StaticModel::computeTemporaryTermsOrdered()
   temporary_terms.clear();
 
   //local temporay terms
-  for (unsigned int block = 0; block < nb_blocks; block++)
+  for (int block = 0; block < nb_blocks; block++)
     {
       map<expr_t, int> reference_count_local;
       map<expr_t, pair<int, int>> first_occurence_local;
       temporary_terms_t temporary_terms_l;
 
-      unsigned int block_size = getBlockSize(block);
-      unsigned int block_nb_mfs = getBlockMfs(block);
-      unsigned int block_nb_recursives = block_size - block_nb_mfs;
+      int block_size = getBlockSize(block);
+      int block_nb_mfs = getBlockMfs(block);
+      int block_nb_recursives = block_size - block_nb_mfs;
       v_temporary_terms_local[block] = vector<temporary_terms_t>(block_size);
 
-      for (unsigned int i = 0; i < block_size; i++)
+      for (int i = 0; i < block_size; i++)
         {
           if (i < block_nb_recursives && isBlockEquationRenormalized(block, i))
             getBlockEquationRenormalizedExpr(block, i)->computeTemporaryTerms(reference_count_local, temporary_terms_l, first_occurence_local, block, v_temporary_terms_local, i);
@@ -203,14 +203,14 @@ StaticModel::computeTemporaryTermsOrdered()
     }
 
   // global temporay terms
-  for (unsigned int block = 0; block < nb_blocks; block++)
+  for (int block = 0; block < nb_blocks; block++)
     {
       // Compute the temporary terms reordered
-      unsigned int block_size = getBlockSize(block);
-      unsigned int block_nb_mfs = getBlockMfs(block);
-      unsigned int block_nb_recursives = block_size - block_nb_mfs;
+      int block_size = getBlockSize(block);
+      int block_nb_mfs = getBlockMfs(block);
+      int block_nb_recursives = block_size - block_nb_mfs;
       v_temporary_terms[block] = vector<temporary_terms_t>(block_size);
-      for (unsigned int i = 0; i < block_size; i++)
+      for (int i = 0; i < block_size; i++)
         {
           if (i < block_nb_recursives && isBlockEquationRenormalized(block, i))
             getBlockEquationRenormalizedExpr(block, i)->computeTemporaryTerms(reference_count, temporary_terms, first_occurence, block, v_temporary_terms, i);
@@ -227,14 +227,14 @@ StaticModel::computeTemporaryTermsOrdered()
         }
     }
 
-  for (unsigned int block = 0; block < nb_blocks; block++)
+  for (int block = 0; block < nb_blocks; block++)
     {
       // Collecte the temporary terms reordered
-      unsigned int block_size = getBlockSize(block);
-      unsigned int block_nb_mfs = getBlockMfs(block);
-      unsigned int block_nb_recursives = block_size - block_nb_mfs;
+      int block_size = getBlockSize(block);
+      int block_nb_mfs = getBlockMfs(block);
+      int block_nb_recursives = block_size - block_nb_mfs;
       set<int> temporary_terms_in_use;
-      for (unsigned int i = 0; i < block_size; i++)
+      for (int i = 0; i < block_size; i++)
         {
           if (i < block_nb_recursives && isBlockEquationRenormalized(block, i))
             getBlockEquationRenormalizedExpr(block, i)->collectTemporary_terms(temporary_terms, temporary_terms_in_use, block);
@@ -249,7 +249,7 @@ StaticModel::computeTemporaryTermsOrdered()
           expr_t id = get<3>(it);
           id->collectTemporary_terms(temporary_terms, temporary_terms_in_use, block);
         }
-      for (int i = 0; i < static_cast<int>(getBlockSize(block)); i++)
+      for (int i = 0; i < getBlockSize(block); i++)
         for (const auto &it : v_temporary_terms[block][i])
           it->collectTemporary_terms(temporary_terms, temporary_terms_in_use, block);
       v_temporary_terms_inuse[block] = temporary_terms_in_use;
@@ -286,15 +286,15 @@ StaticModel::writeModelEquationsOrdered_M(const string &basename) const
 
   //----------------------------------------------------------------------
   //For each block
-  for (unsigned int block = 0; block < getNbBlocks(); block++)
+  for (int block = 0; block < getNbBlocks(); block++)
     {
       //recursive_variables.clear();
       feedback_variables.clear();
       //For a block composed of a single equation determines wether we have to evaluate or to solve the equation
       BlockSimulationType simulation_type = getBlockSimulationType(block);
-      unsigned int block_size = getBlockSize(block);
-      unsigned int block_mfs = getBlockMfs(block);
-      unsigned int block_recursive = block_size - block_mfs;
+      int block_size = getBlockSize(block);
+      int block_mfs = getBlockMfs(block);
+      int block_recursive = block_size - block_mfs;
 
       tmp1_output.str("");
       tmp1_output << packageDir(basename + ".block") << "/static_" << block+1 << ".m";
@@ -325,7 +325,7 @@ StaticModel::writeModelEquationsOrdered_M(const string &basename) const
                 || simulation_type == BlockSimulationType::solveBackwardSimple
                 || simulation_type == BlockSimulationType::evaluateBackward
                 || simulation_type == BlockSimulationType::evaluateForward)
-               && getBlockFirstEquation(block) >= equations.size() - epilogue)
+               && getBlockFirstEquation(block) >= static_cast<int>(equations.size()) - epilogue)
         block_type = BlockType::epilogue;
       else
         block_type = BlockType::simultans;
@@ -355,7 +355,7 @@ StaticModel::writeModelEquationsOrdered_M(const string &basename) const
 
       // The equations
       temporary_terms_idxs_t temporary_terms_idxs;
-      for (unsigned int i = 0; i < block_size; i++)
+      for (int i = 0; i < block_size; i++)
         {
           if (!global_temporary_terms)
             local_temporary_terms = v_temporary_terms[block][i];
@@ -456,13 +456,10 @@ StaticModel::writeModelEquationsOrdered_M(const string &basename) const
         case BlockSimulationType::solveForwardSimple:
         case BlockSimulationType::solveBackwardComplete:
         case BlockSimulationType::solveForwardComplete:
-          for (const auto &it : blocks_derivatives[block])
+          for (const auto &[eq, var, ignore, id] : blocks_derivatives[block])
             {
-              unsigned int eq, var;
-              expr_t id;
-              tie(eq, var, ignore, id) = it;
-              unsigned int eqr = getBlockEquationID(block, eq);
-              unsigned int varr = getBlockVariableID(block, var);
+              int eqr = getBlockEquationID(block, eq);
+              int varr = getBlockVariableID(block, var);
               output << "    g1(" << eq+1-block_recursive << ", " << var+1-block_recursive << ") = ";
               id->writeOutput(output, local_output_type, local_temporary_terms, {});
               output << "; % variable=" << symbol_table.getName(symbol_table.getID(SymbolType::endogenous, varr))
@@ -544,9 +541,9 @@ StaticModel::writeModelEquationsCode(const string &basename, map_idx_t map_idx)
       int deriv_id = indices[1];
       if (getTypeByDerivID(deriv_id) == SymbolType::endogenous)
         {
-          unsigned int eq = indices[0];
+          int eq = indices[0];
           int symb = getSymbIDByDerivID(deriv_id);
-          unsigned int var = symbol_table.getTypeSpecificID(symb);
+          int var = symbol_table.getTypeSpecificID(symb);
           FNUMEXPR_ fnumexpr(FirstEndoDerivative, eq, var);
           fnumexpr.write(code_file, instruction_number);
           if (!my_derivatives[eq].size())
@@ -606,9 +603,9 @@ StaticModel::writeModelEquationsCode(const string &basename, map_idx_t map_idx)
       int deriv_id = indices[1];
       if (getTypeByDerivID(deriv_id) == SymbolType::endogenous)
         {
-          unsigned int eq = indices[0];
+          int eq = indices[0];
           int symb = getSymbIDByDerivID(deriv_id);
-          unsigned int var = symbol_table.getTypeSpecificID(symb);
+          int var = symbol_table.getTypeSpecificID(symb);
           FNUMEXPR_ fnumexpr(FirstEndoDerivative, eq, var);
           fnumexpr.write(code_file, instruction_number);
           if (!my_derivatives[eq].size())
@@ -676,7 +673,7 @@ StaticModel::writeModelEquationsCode_Block(const string &basename, map_idx_t map
   FDIMST_ fdimst(temporary_terms.size());
   fdimst.write(code_file, instruction_number);
 
-  for (unsigned int block = 0; block < getNbBlocks(); block++)
+  for (int block = 0; block < getNbBlocks(); block++)
     {
       feedback_variables.clear();
       if (block > 0)
@@ -687,9 +684,9 @@ StaticModel::writeModelEquationsCode_Block(const string &basename, map_idx_t map
       int count_u;
       int u_count_int = 0;
       BlockSimulationType simulation_type = getBlockSimulationType(block);
-      unsigned int block_size = getBlockSize(block);
-      unsigned int block_mfs = getBlockMfs(block);
-      unsigned int block_recursive = block_size - block_mfs;
+      int block_size = getBlockSize(block);
+      int block_mfs = getBlockMfs(block);
+      int block_recursive = block_size - block_mfs;
 
       if (simulation_type == BlockSimulationType::solveTwoBoundariesSimple
           || simulation_type == BlockSimulationType::solveTwoBoundariesComplete
@@ -721,7 +718,7 @@ StaticModel::writeModelEquationsCode_Block(const string &basename, map_idx_t map
       fjmp_if_eval.write(code_file, instruction_number);
       int prev_instruction_number = instruction_number;
 
-      for (i = 0; i < static_cast<int>(block_size); i++)
+      for (i = 0; i < block_size; i++)
         {
           //The Temporary terms
           temporary_terms_t tt2;
@@ -774,7 +771,7 @@ StaticModel::writeModelEquationsCode_Block(const string &basename, map_idx_t map
               break;
             case BlockSimulationType::solveBackwardComplete:
             case BlockSimulationType::solveForwardComplete:
-              if (i < static_cast<int>(block_recursive))
+              if (i < block_recursive)
                 goto evaluation;
               variable_ID = getBlockVariableID(block, i);
               equation_ID = getBlockEquationID(block, i);
@@ -823,12 +820,10 @@ StaticModel::writeModelEquationsCode_Block(const string &basename, map_idx_t map
             case BlockSimulationType::solveBackwardComplete:
             case BlockSimulationType::solveForwardComplete:
               count_u = feedback_variables.size();
-              for (const auto &it : blocks_derivatives[block])
+              for (const auto &[eq, var, ignore, ignore2] : blocks_derivatives[block])
                 {
-                  unsigned int eq, var;
-                  tie(eq, var, ignore, ignore) = it;
-                  unsigned int eqr = getBlockEquationID(block, eq);
-                  unsigned int varr = getBlockVariableID(block, var);
+                  int eqr = getBlockEquationID(block, eq);
+                  int varr = getBlockVariableID(block, var);
                   if (eq >= block_recursive && var >= block_recursive)
                     {
                       if (!Uf[eqr].Ufl)
@@ -852,9 +847,9 @@ StaticModel::writeModelEquationsCode_Block(const string &basename, map_idx_t map
                       count_u++;
                     }
                 }
-              for (i = 0; i < static_cast<int>(block_size); i++)
+              for (i = 0; i < block_size; i++)
                 {
-                  if (i >= static_cast<int>(block_recursive))
+                  if (i >= block_recursive)
                     {
                       FLDR_ fldr(i-block_recursive);
                       fldr.write(code_file, instruction_number);
@@ -912,7 +907,7 @@ StaticModel::writeModelEquationsCode_Block(const string &basename, map_idx_t map
       temporary_terms_t tt2, tt3;
       deriv_node_temp_terms_t tef_terms2;
 
-      for (i = 0; i < static_cast<int>(block_size); i++)
+      for (i = 0; i < block_size; i++)
         {
           if (v_temporary_terms_local[block].size())
             {
@@ -966,7 +961,7 @@ StaticModel::writeModelEquationsCode_Block(const string &basename, map_idx_t map
               break;
             case BlockSimulationType::solveBackwardComplete:
             case BlockSimulationType::solveForwardComplete:
-              if (i < static_cast<int>(block_recursive))
+              if (i < block_recursive)
                 goto evaluation_l;
               variable_ID = getBlockVariableID(block, i);
               equation_ID = getBlockEquationID(block, i);
@@ -1013,12 +1008,10 @@ StaticModel::writeModelEquationsCode_Block(const string &basename, map_idx_t map
         case BlockSimulationType::solveBackwardComplete:
         case BlockSimulationType::solveForwardComplete:
           count_u = feedback_variables.size();
-          for (const auto &it : blocks_derivatives[block])
+          for (const auto &[eq, var, ignore, ignore2] : blocks_derivatives[block])
             {
-              unsigned int eq, var;
-              tie(eq, var, ignore, ignore) = it;
-              unsigned int eqr = getBlockEquationID(block, eq);
-              unsigned int varr = getBlockVariableID(block, var);
+              int eqr = getBlockEquationID(block, eq);
+              int varr = getBlockVariableID(block, var);
               FNUMEXPR_ fnumexpr(FirstEndoDerivative, eqr, varr, 0);
               fnumexpr.write(code_file, instruction_number);
 
@@ -1062,13 +1055,11 @@ StaticModel::Write_Inf_To_Bin_File_Block(const string &basename, int num,
       exit(EXIT_FAILURE);
     }
   u_count_int = 0;
-  unsigned int block_size = getBlockSize(num);
-  unsigned int block_mfs = getBlockMfs(num);
-  unsigned int block_recursive = block_size - block_mfs;
-  for (const auto &it : blocks_derivatives[num])
+  int block_size = getBlockSize(num);
+  int block_mfs = getBlockMfs(num);
+  int block_recursive = block_size - block_mfs;
+  for (const auto &[eq, var, ignore, ignore2] : blocks_derivatives[num])
     {
-      unsigned int eq, var;
-      tie(eq, var, ignore, ignore) = it;
       int lag = 0;
       if (eq >= block_recursive && var >= block_recursive)
         {
@@ -1083,14 +1074,14 @@ StaticModel::Write_Inf_To_Bin_File_Block(const string &basename, int num,
         }
     }
 
-  for (j = block_recursive; j < static_cast<int>(block_size); j++)
+  for (j = block_recursive; j < block_size; j++)
     {
-      unsigned int varr = getBlockVariableID(num, j);
+      int varr = getBlockVariableID(num, j);
       SaveCode.write(reinterpret_cast<char *>(&varr), sizeof(varr));
     }
-  for (j = block_recursive; j < static_cast<int>(block_size); j++)
+  for (j = block_recursive; j < block_size; j++)
     {
-      unsigned int eqr = getBlockEquationID(num, j);
+      int eqr = getBlockEquationID(num, j);
       SaveCode.write(reinterpret_cast<char *>(&eqr), sizeof(eqr));
     }
   SaveCode.close();
@@ -1119,7 +1110,7 @@ StaticModel::computingPass(int derivsOrder, int paramsDerivsOrder, const eval_co
   initializeVariablesAndEquations();
 
   vector<BinaryOpNode *> neweqs;
-  for (unsigned int eq = 0; eq < equations.size() - aux_equations.size(); eq++)
+  for (int eq = 0; eq < static_cast<int>(equations.size() - aux_equations.size()); eq++)
     {
       expr_t eq_tmp = equations[eq]->substituteStaticAuxiliaryVariable();
       neweqs.push_back(dynamic_cast<BinaryOpNode *>(eq_tmp->toStatic(*this)));
@@ -1996,9 +1987,9 @@ StaticModel::writeStaticBlockMFSFile(const string &basename) const
          << "  var_index = [];" << endl << endl
          << "  switch nblock" << endl;
 
-  unsigned int nb_blocks = getNbBlocks();
+  int nb_blocks = getNbBlocks();
 
-  for (int b = 0; b < static_cast<int>(nb_blocks); b++)
+  for (int b = 0; b < nb_blocks; b++)
     {
       set<int> local_var;
 
@@ -2011,7 +2002,7 @@ StaticModel::writeStaticBlockMFSFile(const string &basename) const
         {
           output << "      y_tmp = " << basename << ".block.static_" << b+1 << "(y, x, params);" << endl;
           ostringstream tmp;
-          for (int i = 0; i < static_cast<int>(getBlockSize(b)); i++)
+          for (int i = 0; i < getBlockSize(b); i++)
             tmp << " " << getBlockVariableID(b, i)+1;
           output << "      var_index = [" << tmp.str() << "];" << endl
                  << "      residual  = y(var_index) - y_tmp(var_index);" << endl
@@ -2037,15 +2028,15 @@ StaticModel::writeOutput(ostream &output, bool block) const
   if (!block)
     return;
 
-  unsigned int nb_blocks = getNbBlocks();
-  for (int b = 0; b < static_cast<int>(nb_blocks); b++)
+  int nb_blocks = getNbBlocks();
+  for (int b = 0; b < nb_blocks; b++)
     {
       BlockSimulationType simulation_type = getBlockSimulationType(b);
-      unsigned int block_size = getBlockSize(b);
+      int block_size = getBlockSize(b);
       ostringstream tmp_s, tmp_s_eq;
       tmp_s.str("");
       tmp_s_eq.str("");
-      for (unsigned int i = 0; i < block_size; i++)
+      for (int i = 0; i < block_size; i++)
         {
           tmp_s << " " << getBlockVariableID(b, i)+1;
           tmp_s_eq << " " << getBlockEquationID(b, i)+1;
@@ -2185,9 +2176,9 @@ void
 StaticModel::computeChainRuleJacobian()
 {
   map<int, expr_t> recursive_variables;
-  unsigned int nb_blocks = getNbBlocks();
+  int nb_blocks = getNbBlocks();
   blocks_derivatives.resize(nb_blocks);
-  for (unsigned int block = 0; block < nb_blocks; block++)
+  for (int block = 0; block < nb_blocks; block++)
     {
       block_derivatives_equation_variable_laglead_nodeid_t tmp_derivatives;
       recursive_variables.clear();
@@ -2257,11 +2248,11 @@ StaticModel::collect_block_first_order_derivatives()
 {
   //! vector for an equation or a variable indicates the block number
   vector<int> equation_2_block(equation_reordered.size()), variable_2_block(variable_reordered.size());
-  unsigned int nb_blocks = getNbBlocks();
-  for (unsigned int block = 0; block < nb_blocks; block++)
+  int nb_blocks = getNbBlocks();
+  for (int block = 0; block < nb_blocks; block++)
     {
-      unsigned int block_size = getBlockSize(block);
-      for (unsigned int i = 0; i < block_size; i++)
+      int block_size = getBlockSize(block);
+      for (int i = 0; i < block_size; i++)
         {
           equation_2_block[getBlockEquationID(block, i)] = block;
           variable_2_block[getBlockVariableID(block, i)] = block;
diff --git a/src/StaticModel.hh b/src/StaticModel.hh
index 3c85d9a70f3ed82a6749272266921ac1f2b70361..d44febc477d8de12e4230bc90eff7c51276bc6cf 100644
--- a/src/StaticModel.hh
+++ b/src/StaticModel.hh
@@ -193,7 +193,7 @@ public:
   void addAllParamDerivId(set<int> &deriv_id_set) override;
 
   //! Return the number of blocks
-  unsigned int
+  int
   getNbBlocks() const override
   {
     return (block_type_firstequation_size_mfs.size());
@@ -205,43 +205,43 @@ public:
     return (get<0>(block_type_firstequation_size_mfs[block_number]));
   };
   //! Return the first equation number of a block
-  unsigned int
+  int
   getBlockFirstEquation(int block_number) const override
   {
     return (get<1>(block_type_firstequation_size_mfs[block_number]));
   };
   //! Return the size of the block block_number
-  unsigned int
+  int
   getBlockSize(int block_number) const override
   {
     return (get<2>(block_type_firstequation_size_mfs[block_number]));
   };
   //! Return the number of exogenous variable in the block block_number
-  unsigned int
+  int
   getBlockExoSize(int block_number) const override
   {
     return 0;
   };
   //! Return the number of colums in the jacobian matrix for exogenous variable in the block block_number
-  unsigned int
+  int
   getBlockExoColSize(int block_number) const override
   {
     return 0;
   }
   //! Return the number of feedback variable of the block block_number
-  unsigned int
+  int
   getBlockMfs(int block_number) const override
   {
     return (get<3>(block_type_firstequation_size_mfs[block_number]));
   };
   //! Return the maximum lag in a block
-  unsigned int
+  int
   getBlockMaxLag(int block_number) const override
   {
     return (block_lag_lead[block_number].first);
   };
   //! Return the maximum lead in a block
-  unsigned int
+  int
   getBlockMaxLead(int block_number) const override
   {
     return (block_lag_lead[block_number].second);
@@ -292,13 +292,13 @@ public:
   int
   getBlockInitialEquationID(int block_number, int equation_number) const override
   {
-    return (static_cast<int>(inv_equation_reordered[equation_number]) - static_cast<int>(get<1>(block_type_firstequation_size_mfs[block_number])));
+    return inv_equation_reordered[equation_number] - get<1>(block_type_firstequation_size_mfs[block_number]);
   };
   //! Return the position of variable_number in the block number belonging to the block block_number
   int
   getBlockInitialVariableID(int block_number, int variable_number) const override
   {
-    return (static_cast<int>(inv_variable_reordered[variable_number]) - static_cast<int>(get<1>(block_type_firstequation_size_mfs[block_number])));
+    return inv_variable_reordered[variable_number] - get<1>(block_type_firstequation_size_mfs[block_number]);
   };
   //! Return the position of variable_number in the block number belonging to the block block_number
   int