diff --git a/src/DynamicModel.cc b/src/DynamicModel.cc
index 6a7b5dd6841cc5c6a5b1b2e3654f01b6696a4d94..1d79f5823c2812c3773c4d10b34707714648b4e8 100644
--- a/src/DynamicModel.cc
+++ b/src/DynamicModel.cc
@@ -4832,15 +4832,15 @@ DynamicModel::computingPass(bool jacobianExo, int derivsOrder, int paramsDerivsO
       tie(blocks, equation_lag_lead, variable_lag_lead, n_static, n_forward, n_backward, n_mixed)
         = select_non_linear_equations_and_variables(is_equation_linear);
 
-      equation_type_and_normalized_equation = equationTypeDetermination(first_order_endo_derivatives, 0);
+      equationTypeDetermination(first_order_endo_derivatives, 0);
       prologue = 0;
       epilogue = 0;
 
-      block_type_firstequation_size_mfs = reduceBlocksAndTypeDetermination(blocks, equation_type_and_normalized_equation, n_static, n_forward, n_backward, n_mixed, linear_decomposition);
+      reduceBlocksAndTypeDetermination(blocks, equation_type_and_normalized_equation, n_static, n_forward, n_backward, n_mixed, linear_decomposition);
 
       computeChainRuleJacobian();
 
-      blocks_linear = BlockLinear();
+      determineLinearBlocks();
 
       collect_block_first_order_derivatives();
 
@@ -4861,7 +4861,7 @@ DynamicModel::computingPass(bool jacobianExo, int derivsOrder, int paramsDerivsO
 
       first_order_endo_derivatives = collect_first_order_derivatives_endogenous();
 
-      equation_type_and_normalized_equation = equationTypeDetermination(first_order_endo_derivatives, mfs);
+      equationTypeDetermination(first_order_endo_derivatives, mfs);
 
       cout << "Finding the optimal block decomposition of the model ..." << endl;
 
@@ -4869,13 +4869,13 @@ DynamicModel::computingPass(bool jacobianExo, int derivsOrder, int paramsDerivsO
 
       tie(blocks, equation_lag_lead, variable_lag_lead, n_static, n_forward, n_backward, n_mixed) = computeBlockDecompositionAndFeedbackVariablesForEachBlock(static_jacobian, equation_type_and_normalized_equation, false, true);
 
-      block_type_firstequation_size_mfs = reduceBlocksAndTypeDetermination(blocks, equation_type_and_normalized_equation, n_static, n_forward, n_backward, n_mixed, linear_decomposition);
+      reduceBlocksAndTypeDetermination(blocks, equation_type_and_normalized_equation, n_static, n_forward, n_backward, n_mixed, linear_decomposition);
 
       printBlockDecomposition(blocks);
 
       computeChainRuleJacobian();
 
-      blocks_linear = BlockLinear();
+      determineLinearBlocks();
 
       collect_block_first_order_derivatives();
 
diff --git a/src/ModelTree.cc b/src/ModelTree.cc
index 71b8550d104a08c7a70d533fbf76346fc6a25441..e9b08abb578ac0446a4fc25530112fbece0c0d7c 100644
--- a/src/ModelTree.cc
+++ b/src/ModelTree.cc
@@ -728,13 +728,14 @@ ModelTree::computePrologueAndEpilogue(const jacob_map_t &static_jacobian_arg)
     }
 }
 
-equation_type_and_normalized_equation_t
-ModelTree::equationTypeDetermination(const map<tuple<int, int, int>, expr_t> &first_order_endo_derivatives, int mfs) const
+void
+ModelTree::equationTypeDetermination(const map<tuple<int, int, int>, expr_t> &first_order_endo_derivatives, int mfs)
 {
   expr_t lhs;
   BinaryOpNode *eq_node;
   EquationType Equation_Simulation_Type;
-  equation_type_and_normalized_equation_t V_Equation_Simulation_Type(equations.size());
+  equation_type_and_normalized_equation.clear();
+  equation_type_and_normalized_equation.resize(equations.size());
   for (unsigned int i = 0; i < equations.size(); i++)
     {
       int eq = equation_reordered[i];
@@ -768,9 +769,8 @@ ModelTree::equationTypeDetermination(const map<tuple<int, int, int>, expr_t> &fi
                 }
             }
         }
-      V_Equation_Simulation_Type[eq] = { Equation_Simulation_Type, dynamic_cast<BinaryOpNode *>(res.second) };
+      equation_type_and_normalized_equation[eq] = { Equation_Simulation_Type, dynamic_cast<BinaryOpNode *>(res.second) };
     }
-  return V_Equation_Simulation_Type;
 }
 
 pair<lag_lead_vector_t, lag_lead_vector_t>
@@ -1072,14 +1072,14 @@ ModelTree::printBlockDecomposition(const vector<pair<int, int>> &blocks) const
        << "                                 and " << Nb_feedback_variable << " feedback variable(s)." << endl;
 }
 
-block_type_firstequation_size_mfs_t
+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)
 {
   int i = 0;
   int count_equ = 0, blck_count_simult = 0;
   int Blck_Size, MFS_Size;
   int Lead, Lag;
-  block_type_firstequation_size_mfs_t block_type_size_mfs;
+  block_type_firstequation_size_mfs.clear();
   BlockSimulationType Simulation_Type, prev_Type = UNKNOWN;
   int eq = 0;
   unsigned int l_n_static = 0, l_n_forward = 0, l_n_backward = 0, l_n_mixed = 0;
@@ -1174,8 +1174,8 @@ ModelTree::reduceBlocksAndTypeDetermination(const vector<pair<int, int>> &blocks
           if (i > 0)
             {
               bool is_lead = false, is_lag = false;
-              int c_Size = get<2>(block_type_size_mfs[block_type_size_mfs.size()-1]);
-              int first_equation = get<1>(block_type_size_mfs[block_type_size_mfs.size()-1]);
+              int c_Size = get<2>(block_type_firstequation_size_mfs[block_type_firstequation_size_mfs.size()-1]);
+              int first_equation = get<1>(block_type_firstequation_size_mfs[block_type_firstequation_size_mfs.size()-1]);
               if (c_Size > 0 && ((prev_Type == EVALUATE_FORWARD && Simulation_Type == EVALUATE_FORWARD && !is_lead)
                                  || (prev_Type == EVALUATE_BACKWARD && Simulation_Type == EVALUATE_BACKWARD && !is_lag)))
                 {
@@ -1193,41 +1193,40 @@ ModelTree::reduceBlocksAndTypeDetermination(const vector<pair<int, int>> &blocks
                   || (prev_Type == EVALUATE_BACKWARD && Simulation_Type == EVALUATE_BACKWARD && !is_lag))
                 {
                   //merge the current block with the previous one
-                  BlockSimulationType c_Type = get<0>(block_type_size_mfs[block_type_size_mfs.size()-1]);
+                  BlockSimulationType c_Type = get<0>(block_type_firstequation_size_mfs[block_type_firstequation_size_mfs.size()-1]);
                   c_Size++;
-                  block_type_size_mfs[block_type_size_mfs.size()-1] = { c_Type, first_equation, c_Size, c_Size };
-                  if (block_lag_lead[block_type_size_mfs.size()-1].first > Lag)
-                    Lag = block_lag_lead[block_type_size_mfs.size()-1].first;
-                  if (block_lag_lead[block_type_size_mfs.size()-1].second > Lead)
-                    Lead = block_lag_lead[block_type_size_mfs.size()-1].second;
-                  block_lag_lead[block_type_size_mfs.size()-1] = { Lag, Lead };
+                  block_type_firstequation_size_mfs[block_type_firstequation_size_mfs.size()-1] = { c_Type, first_equation, c_Size, c_Size };
+                  if (block_lag_lead[block_type_firstequation_size_mfs.size()-1].first > Lag)
+                    Lag = block_lag_lead[block_type_firstequation_size_mfs.size()-1].first;
+                  if (block_lag_lead[block_type_firstequation_size_mfs.size()-1].second > Lead)
+                    Lead = block_lag_lead[block_type_firstequation_size_mfs.size()-1].second;
+                  block_lag_lead[block_type_firstequation_size_mfs.size()-1] = { Lag, Lead };
                   auto tmp = block_col_type[block_col_type.size()-1];
                   block_col_type[block_col_type.size()-1] = { get<0>(tmp)+l_n_static, get<1>(tmp)+l_n_forward, get<2>(tmp)+l_n_backward, get<3>(tmp)+l_n_mixed };
                 }
               else
                 {
-                  block_type_size_mfs.emplace_back(Simulation_Type, eq, Blck_Size, MFS_Size);
+                  block_type_firstequation_size_mfs.emplace_back(Simulation_Type, eq, Blck_Size, MFS_Size);
                   block_lag_lead.emplace_back(Lag, Lead);
                   block_col_type.emplace_back(l_n_static, l_n_forward, l_n_backward, l_n_mixed);
                 }
             }
           else
             {
-              block_type_size_mfs.emplace_back(Simulation_Type, eq, Blck_Size, MFS_Size);
+              block_type_firstequation_size_mfs.emplace_back(Simulation_Type, eq, Blck_Size, MFS_Size);
               block_lag_lead.emplace_back(Lag, Lead);
               block_col_type.emplace_back(l_n_static, l_n_forward, l_n_backward, l_n_mixed);
             }
         }
       else
         {
-          block_type_size_mfs.emplace_back(Simulation_Type, eq, Blck_Size, MFS_Size);
+          block_type_firstequation_size_mfs.emplace_back(Simulation_Type, eq, Blck_Size, MFS_Size);
           block_lag_lead.emplace_back(Lag, Lead);
           block_col_type.emplace_back(l_n_static, l_n_forward, l_n_backward, l_n_mixed);
         }
       prev_Type = Simulation_Type;
       eq += Blck_Size;
     }
-  return block_type_size_mfs;
 }
 
 vector<bool>
@@ -1248,11 +1247,12 @@ ModelTree::equationLinear(const map<tuple<int, int, int>, expr_t> &first_order_e
   return is_linear;
 }
 
-vector<bool>
-ModelTree::BlockLinear() const
+void
+ModelTree::determineLinearBlocks()
 {
   unsigned int nb_blocks = getNbBlocks();
-  vector<bool> blocks_linear(nb_blocks, true);
+  blocks_linear.clear();
+  blocks_linear.resize(nb_blocks, true);
   for (unsigned int block = 0; block < nb_blocks; block++)
     {
       BlockSimulationType simulation_type = getBlockSimulationType(block);
@@ -1291,7 +1291,6 @@ ModelTree::BlockLinear() const
     the_end:
       ;
     }
-  return blocks_linear;
 }
 
 int
diff --git a/src/ModelTree.hh b/src/ModelTree.hh
index a9a32e99ec20c98220bed499ecb5a98eb82e281f..0045fc2e296c731c1af38ba6857912ecbdc343de 100644
--- a/src/ModelTree.hh
+++ b/src/ModelTree.hh
@@ -295,13 +295,13 @@ protected:
   //! 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 normalized the unnormalized equation using computeNormalizedEquations
-  equation_type_and_normalized_equation_t equationTypeDetermination(const map<tuple<int, int, int>, expr_t> &first_order_endo_derivatives, int mfs) const;
+  void equationTypeDetermination(const map<tuple<int, int, int>, expr_t> &first_order_endo_derivatives, int mfs);
   //! 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);
   //! Reduce the number of block merging the same type equation in the prologue and the epilogue and determine the type of each block
-  block_type_firstequation_size_mfs_t 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<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);
   //! 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;
@@ -310,7 +310,7 @@ protected:
   //! Print an abstract of the block structure of the model
   void printBlockDecomposition(const vector<pair<int, int>> &blocks) const;
   //! Determine for each block if it is linear or not
-  vector<bool> BlockLinear() const;
+  void determineLinearBlocks();
   //! Remove equations specified by exclude_eqs
   vector<int> includeExcludeEquations(set<pair<string, string>> &eqs, bool exclude_eqs,
                                       vector<BinaryOpNode *> &equations, vector<int> &equations_lineno,
diff --git a/src/StaticModel.cc b/src/StaticModel.cc
index eec56f50292d7f9ac2605840eb883dc7cbfc4d07..b0d49d41ac5f1c020ee997cfd0a1d918e87b98cc 100644
--- a/src/StaticModel.cc
+++ b/src/StaticModel.cc
@@ -1152,19 +1152,19 @@ StaticModel::computingPass(int derivsOrder, int paramsDerivsOrder, const eval_co
 
       auto first_order_endo_derivatives = collect_first_order_derivatives_endogenous();
 
-      equation_type_and_normalized_equation = equationTypeDetermination(first_order_endo_derivatives, mfs);
+      equationTypeDetermination(first_order_endo_derivatives, mfs);
 
       cout << "Finding the optimal block decomposition of the model ..." << endl;
 
       auto [blocks, equation_lag_lead, variable_lag_lead, n_static, n_forward, n_backward, n_mixed] = computeBlockDecompositionAndFeedbackVariablesForEachBlock(static_jacobian, equation_type_and_normalized_equation, false, false);
 
-      block_type_firstequation_size_mfs = reduceBlocksAndTypeDetermination(blocks, equation_type_and_normalized_equation, n_static, n_forward, n_backward, n_mixed, false);
+      reduceBlocksAndTypeDetermination(blocks, equation_type_and_normalized_equation, n_static, n_forward, n_backward, n_mixed, false);
 
       printBlockDecomposition(blocks);
 
       computeChainRuleJacobian();
 
-      blocks_linear = BlockLinear();
+      determineLinearBlocks();
 
       collect_block_first_order_derivatives();