diff --git a/src/Bytecode.hh b/src/Bytecode.hh
index 4d8c7b1af5d41085ca46d0754973d01f1a5cec2e..ea4e56c3478e800ed728336f59547e9b1100be1d 100644
--- a/src/Bytecode.hh
+++ b/src/Bytecode.hh
@@ -21,7 +21,6 @@
 #define _BYTECODE_HH
 
 #include <fstream>
-#include <cstdint>
 #include <vector>
 #include <utility>
 
@@ -239,26 +238,26 @@ public:
   };
 };
 
-class FDIMT_ : public TagWithOneArgument<unsigned int>
+class FDIMT_ : public TagWithOneArgument<int>
 {
 public:
-  explicit FDIMT_(unsigned int size_arg) : TagWithOneArgument<unsigned int>::TagWithOneArgument{Tags::FDIMT, size_arg}
+  explicit FDIMT_(int size_arg) : TagWithOneArgument::TagWithOneArgument{Tags::FDIMT, size_arg}
   {
   };
-  unsigned int
+  int
   get_size()
   {
     return arg1;
   };
 };
 
-class FDIMST_ : public TagWithOneArgument<unsigned int>
+class FDIMST_ : public TagWithOneArgument<int>
 {
 public:
-  explicit FDIMST_(const unsigned int size_arg) : TagWithOneArgument<unsigned int>::TagWithOneArgument{Tags::FDIMST, size_arg}
+  explicit FDIMST_(int size_arg) : TagWithOneArgument::TagWithOneArgument{Tags::FDIMST, size_arg}
   {
   };
-  unsigned int
+  int
   get_size()
   {
     return arg1;
@@ -268,7 +267,7 @@ public:
 class FLDC_ : public TagWithOneArgument<double>
 {
 public:
-  explicit FLDC_(double value_arg) : TagWithOneArgument<double>::TagWithOneArgument{Tags::FLDC, value_arg}
+  explicit FLDC_(double value_arg) : TagWithOneArgument::TagWithOneArgument{Tags::FLDC, value_arg}
   {
   };
   double
@@ -278,179 +277,179 @@ public:
   };
 };
 
-class FLDU_ : public TagWithOneArgument<unsigned int>
+class FLDU_ : public TagWithOneArgument<int>
 {
 public:
-  explicit FLDU_(unsigned int pos_arg) : TagWithOneArgument<unsigned int>::TagWithOneArgument{Tags::FLDU, pos_arg}
+  explicit FLDU_(int pos_arg) : TagWithOneArgument::TagWithOneArgument{Tags::FLDU, pos_arg}
   {
   };
-  unsigned int
+  int
   get_pos()
   {
     return arg1;
   };
 };
 
-class FLDSU_ : public TagWithOneArgument<unsigned int>
+class FLDSU_ : public TagWithOneArgument<int>
 {
 public:
-  explicit FLDSU_(unsigned int pos_arg) : TagWithOneArgument<unsigned int>::TagWithOneArgument{Tags::FLDSU, pos_arg}
+  explicit FLDSU_(int pos_arg) : TagWithOneArgument::TagWithOneArgument{Tags::FLDSU, pos_arg}
   {
   };
-  unsigned int
+  int
   get_pos()
   {
     return arg1;
   };
 };
 
-class FLDR_ : public TagWithOneArgument<unsigned int>
+class FLDR_ : public TagWithOneArgument<int>
 {
 public:
-  explicit FLDR_(unsigned int pos_arg) : TagWithOneArgument<unsigned int>::TagWithOneArgument{Tags::FLDR, pos_arg}
+  explicit FLDR_(int pos_arg) : TagWithOneArgument::TagWithOneArgument{Tags::FLDR, pos_arg}
   {
   };
-  unsigned int
+  int
   get_pos()
   {
     return arg1;
   };
 };
 
-class FLDT_ : public TagWithOneArgument<unsigned int>
+class FLDT_ : public TagWithOneArgument<int>
 {
 public:
-  explicit FLDT_(unsigned int pos_arg) : TagWithOneArgument<unsigned int>::TagWithOneArgument{Tags::FLDT, pos_arg}
+  explicit FLDT_(int pos_arg) : TagWithOneArgument::TagWithOneArgument{Tags::FLDT, pos_arg}
   {
   };
-  unsigned int
+  int
   get_pos()
   {
     return arg1;
   };
 };
 
-class FLDST_ : public TagWithOneArgument<unsigned int>
+class FLDST_ : public TagWithOneArgument<int>
 {
 public:
-  explicit FLDST_(unsigned int pos_arg) : TagWithOneArgument<unsigned int>::TagWithOneArgument{Tags::FLDST, pos_arg}
+  explicit FLDST_(int pos_arg) : TagWithOneArgument::TagWithOneArgument{Tags::FLDST, pos_arg}
   {
   };
-  unsigned int
+  int
   get_pos()
   {
     return arg1;
   };
 };
 
-class FSTPT_ : public TagWithOneArgument<unsigned int>
+class FSTPT_ : public TagWithOneArgument<int>
 {
 public:
-  explicit FSTPT_(unsigned int pos_arg) : TagWithOneArgument<unsigned int>::TagWithOneArgument{Tags::FSTPT, pos_arg}
+  explicit FSTPT_(int pos_arg) : TagWithOneArgument::TagWithOneArgument{Tags::FSTPT, pos_arg}
   {
   };
-  unsigned int
+  int
   get_pos()
   {
     return arg1;
   };
 };
 
-class FSTPST_ : public TagWithOneArgument<unsigned int>
+class FSTPST_ : public TagWithOneArgument<int>
 {
 public:
-  explicit FSTPST_(unsigned int pos_arg) : TagWithOneArgument<unsigned int>::TagWithOneArgument{Tags::FSTPST, pos_arg}
+  explicit FSTPST_(int pos_arg) : TagWithOneArgument::TagWithOneArgument{Tags::FSTPST, pos_arg}
   {
   };
-  unsigned int
+  int
   get_pos()
   {
     return arg1;
   };
 };
 
-class FSTPR_ : public TagWithOneArgument<unsigned int>
+class FSTPR_ : public TagWithOneArgument<int>
 {
 public:
-  explicit FSTPR_(unsigned int pos_arg) : TagWithOneArgument<unsigned int>::TagWithOneArgument{Tags::FSTPR, pos_arg}
+  explicit FSTPR_(int pos_arg) : TagWithOneArgument::TagWithOneArgument{Tags::FSTPR, pos_arg}
   {
   };
-  unsigned int
+  int
   get_pos()
   {
     return arg1;
   };
 };
 
-class FSTPU_ : public TagWithOneArgument<unsigned int>
+class FSTPU_ : public TagWithOneArgument<int>
 {
 public:
-  explicit FSTPU_(unsigned int pos_arg) : TagWithOneArgument<unsigned int>::TagWithOneArgument{Tags::FSTPU, pos_arg}
+  explicit FSTPU_(int pos_arg) : TagWithOneArgument::TagWithOneArgument{Tags::FSTPU, pos_arg}
   {
   };
-  unsigned int
+  int
   get_pos()
   {
     return arg1;
   };
 };
 
-class FSTPSU_ : public TagWithOneArgument<unsigned int>
+class FSTPSU_ : public TagWithOneArgument<int>
 {
 public:
-  explicit FSTPSU_(unsigned int pos_arg) : TagWithOneArgument<unsigned int>::TagWithOneArgument{Tags::FSTPSU, pos_arg}
+  explicit FSTPSU_(int pos_arg) : TagWithOneArgument::TagWithOneArgument{Tags::FSTPSU, pos_arg}
   {
   };
-  unsigned int
+  int
   get_pos()
   {
     return arg1;
   };
 };
 
-class FSTPG_ : public TagWithOneArgument<unsigned int>
+class FSTPG_ : public TagWithOneArgument<int>
 {
 public:
-  explicit FSTPG_(unsigned int pos_arg) : TagWithOneArgument<unsigned int>::TagWithOneArgument{Tags::FSTPG, pos_arg}
+  explicit FSTPG_(int pos_arg) : TagWithOneArgument::TagWithOneArgument{Tags::FSTPG, pos_arg}
   {
   };
-  unsigned int
+  int
   get_pos()
   {
     return arg1;
   };
 };
 
-class FSTPG2_ : public TagWithTwoArguments<unsigned int, unsigned int>
+class FSTPG2_ : public TagWithTwoArguments<int, int>
 {
 public:
-  FSTPG2_(unsigned int pos_arg1, unsigned int pos_arg2) : TagWithTwoArguments<unsigned int, unsigned int>::TagWithTwoArguments{Tags::FSTPG2, pos_arg1, pos_arg2}
+  FSTPG2_(int row_arg, int col_arg) : TagWithTwoArguments::TagWithTwoArguments{Tags::FSTPG2, row_arg, col_arg}
   {
   };
-  unsigned int
+  int
   get_row()
   {
     return arg1;
   };
-  unsigned int
+  int
   get_col()
   {
     return arg2;
   };
 };
 
-class FSTPG3_ : public TagWithFourArguments<unsigned int, unsigned int, int, unsigned int>
+class FSTPG3_ : public TagWithFourArguments<int, int, int, int>
 {
 public:
-  FSTPG3_(unsigned int pos_arg1, unsigned int pos_arg2, int pos_arg3, unsigned int pos_arg4) : TagWithFourArguments<unsigned int, unsigned int, int, unsigned int>::TagWithFourArguments{Tags::FSTPG3, pos_arg1, pos_arg2, pos_arg3, pos_arg4}
+  FSTPG3_(int row_arg, int col_arg, int lag_arg, int col_pos_arg) : TagWithFourArguments::TagWithFourArguments{Tags::FSTPG3, row_arg, col_arg, lag_arg, col_pos_arg}
   {
   };
-  unsigned int
+  int
   get_row()
   {
     return arg1;
   };
-  unsigned int
+  int
   get_col()
   {
     return arg2;
@@ -460,7 +459,7 @@ public:
   {
     return arg2;
   };
-  unsigned int
+  int
   get_col_pos()
   {
     return arg4;
@@ -506,144 +505,144 @@ public:
   };
 };
 
-class FJMPIFEVAL_ : public TagWithOneArgument<unsigned int>
+class FJMPIFEVAL_ : public TagWithOneArgument<int>
 {
 public:
-  explicit FJMPIFEVAL_(unsigned int arg_pos) : TagWithOneArgument<unsigned int>::TagWithOneArgument{Tags::FJMPIFEVAL, arg_pos}
+  explicit FJMPIFEVAL_(int arg_pos) : TagWithOneArgument::TagWithOneArgument{Tags::FJMPIFEVAL, arg_pos}
   {
   };
-  unsigned int
+  int
   get_pos()
   {
     return arg1;
   }
 };
 
-class FJMP_ : public TagWithOneArgument<unsigned int>
+class FJMP_ : public TagWithOneArgument<int>
 {
 public:
-  explicit FJMP_(unsigned int arg_pos) : TagWithOneArgument<unsigned int>::TagWithOneArgument{Tags::FJMP, arg_pos}
+  explicit FJMP_(int arg_pos) : TagWithOneArgument::TagWithOneArgument{Tags::FJMP, arg_pos}
   {
   };
-  unsigned int
+  int
   get_pos()
   {
     return arg1;
   }
 };
 
-class FLDTEF_ : public TagWithOneArgument<unsigned int>
+class FLDTEF_ : public TagWithOneArgument<int>
 {
 public:
-  explicit FLDTEF_(unsigned int number) : TagWithOneArgument<unsigned int>::TagWithOneArgument{Tags::FLDTEF, number}
+  explicit FLDTEF_(int number) : TagWithOneArgument::TagWithOneArgument{Tags::FLDTEF, number}
   {
   };
-  unsigned int
+  int
   get_number()
   {
     return arg1;
   }
 };
 
-class FSTPTEF_ : public TagWithOneArgument<unsigned int>
+class FSTPTEF_ : public TagWithOneArgument<int>
 {
 public:
-  explicit FSTPTEF_(unsigned int number) : TagWithOneArgument<unsigned int>::TagWithOneArgument{Tags::FSTPTEF, number}
+  explicit FSTPTEF_(int number) : TagWithOneArgument::TagWithOneArgument{Tags::FSTPTEF, number}
   {
   };
-  unsigned int
+  int
   get_number()
   {
     return arg1;
   }
 };
 
-class FLDTEFD_ : public TagWithTwoArguments<unsigned int, unsigned int>
+class FLDTEFD_ : public TagWithTwoArguments<int, int>
 {
 public:
-  FLDTEFD_(unsigned int indx, unsigned int row) : TagWithTwoArguments<unsigned int, unsigned int>::TagWithTwoArguments{Tags::FLDTEFD, indx, row}
+  FLDTEFD_(int indx, int row) : TagWithTwoArguments::TagWithTwoArguments{Tags::FLDTEFD, indx, row}
   {
   };
-  unsigned int
+  int
   get_indx()
   {
     return arg1;
   };
-  unsigned int
+  int
   get_row()
   {
     return arg2;
   };
 };
 
-class FSTPTEFD_ : public TagWithTwoArguments<unsigned int, unsigned int>
+class FSTPTEFD_ : public TagWithTwoArguments<int, int>
 {
 public:
-  FSTPTEFD_(unsigned int indx, unsigned int row) : TagWithTwoArguments<unsigned int, unsigned int>::TagWithTwoArguments{Tags::FSTPTEFD, indx, row}
+  FSTPTEFD_(int indx, int row) : TagWithTwoArguments::TagWithTwoArguments{Tags::FSTPTEFD, indx, row}
   {
   };
-  unsigned int
+  int
   get_indx()
   {
     return arg1;
   };
-  unsigned int
+  int
   get_row()
   {
     return arg2;
   };
 };
 
-class FLDTEFDD_ : public TagWithThreeArguments<unsigned int, unsigned int, unsigned int>
+class FLDTEFDD_ : public TagWithThreeArguments<int, int, int>
 {
 public:
-  FLDTEFDD_(unsigned int indx, unsigned int row, unsigned int col) : TagWithThreeArguments<unsigned int, unsigned int, unsigned int>::TagWithThreeArguments{Tags::FLDTEFDD, indx, row, col}
+  FLDTEFDD_(int indx, int row, int col) : TagWithThreeArguments::TagWithThreeArguments{Tags::FLDTEFDD, indx, row, col}
   {
   };
-  unsigned int
+  int
   get_indx()
   {
     return arg1;
   };
-  unsigned int
+  int
   get_row()
   {
     return arg2;
   };
-  unsigned int
+  int
   get_col()
   {
     return arg3;
   };
 };
 
-class FSTPTEFDD_ : public TagWithThreeArguments<unsigned int, unsigned int, unsigned int>
+class FSTPTEFDD_ : public TagWithThreeArguments<int, int, int>
 {
 public:
-  FSTPTEFDD_(unsigned int indx, unsigned int row, unsigned int col) : TagWithThreeArguments<unsigned int, unsigned int, unsigned int>::TagWithThreeArguments{Tags::FSTPTEF, indx, row, col}
+  FSTPTEFDD_(int indx, int row, int col) : TagWithThreeArguments::TagWithThreeArguments{Tags::FSTPTEF, indx, row, col}
   {
   };
-  unsigned int
+  int
   get_indx()
   {
     return arg1;
   };
-  unsigned int
+  int
   get_row()
   {
     return arg2;
   };
-  unsigned int
+  int
   get_col()
   {
     return arg3;
   };
 };
 
-class FLDVS_ : public TagWithTwoArguments<SymbolType, unsigned int>
+class FLDVS_ : public TagWithTwoArguments<SymbolType, int>
 {
 public:
-  FLDVS_(SymbolType type_arg, unsigned int pos_arg) : TagWithTwoArguments::TagWithTwoArguments{Tags::FLDVS, type_arg, pos_arg}
+  FLDVS_(SymbolType type_arg, int pos_arg) : TagWithTwoArguments::TagWithTwoArguments{Tags::FLDVS, type_arg, pos_arg}
   {
   };
   SymbolType
@@ -651,17 +650,17 @@ public:
   {
     return arg1;
   };
-  unsigned int
+  int
   get_pos()
   {
     return arg2;
   };
 };
 
-class FLDSV_ : public TagWithTwoArguments<SymbolType, unsigned int>
+class FLDSV_ : public TagWithTwoArguments<SymbolType, int>
 {
 public:
-  FLDSV_(SymbolType type_arg, unsigned int pos_arg) : TagWithTwoArguments::TagWithTwoArguments{Tags::FLDSV, type_arg, pos_arg}
+  FLDSV_(SymbolType type_arg, int pos_arg) : TagWithTwoArguments::TagWithTwoArguments{Tags::FLDSV, type_arg, pos_arg}
   {
   };
   SymbolType
@@ -669,17 +668,17 @@ public:
   {
     return arg1;
   };
-  unsigned int
+  int
   get_pos()
   {
     return arg2;
   };
 };
 
-class FSTPSV_ : public TagWithTwoArguments<SymbolType, unsigned int>
+class FSTPSV_ : public TagWithTwoArguments<SymbolType, int>
 {
 public:
-  FSTPSV_(SymbolType type_arg, unsigned int pos_arg) : TagWithTwoArguments::TagWithTwoArguments{Tags::FSTPSV, type_arg, pos_arg}
+  FSTPSV_(SymbolType type_arg, int pos_arg) : TagWithTwoArguments::TagWithTwoArguments{Tags::FSTPSV, type_arg, pos_arg}
   {
   };
   SymbolType
@@ -687,20 +686,20 @@ public:
   {
     return arg1;
   };
-  unsigned int
+  int
   get_pos()
   {
     return arg2;
   };
 };
 
-class FLDV_ : public TagWithThreeArguments<SymbolType, unsigned int, int>
+class FLDV_ : public TagWithThreeArguments<SymbolType, int, int>
 {
 public:
-  FLDV_(SymbolType type_arg, unsigned int pos_arg) : TagWithThreeArguments::TagWithThreeArguments{Tags::FLDV, type_arg, pos_arg, 0}
+  FLDV_(SymbolType type_arg, int pos_arg) : TagWithThreeArguments::TagWithThreeArguments{Tags::FLDV, type_arg, pos_arg, 0}
   {
   };
-  FLDV_(SymbolType type_arg, unsigned int pos_arg, int lead_lag_arg) :
+  FLDV_(SymbolType type_arg, int pos_arg, int lead_lag_arg) :
     TagWithThreeArguments::TagWithThreeArguments{Tags::FLDV, type_arg, pos_arg, lead_lag_arg}
   {
   };
@@ -709,7 +708,7 @@ public:
   {
     return arg1;
   };
-  unsigned int
+  int
   get_pos()
   {
     return arg2;
@@ -721,14 +720,14 @@ public:
   };
 };
 
-class FSTPV_ : public TagWithThreeArguments<SymbolType, unsigned int, int>
+class FSTPV_ : public TagWithThreeArguments<SymbolType, int, int>
 {
 public:
-  FSTPV_(SymbolType type_arg, unsigned int pos_arg) :
+  FSTPV_(SymbolType type_arg, int pos_arg) :
     TagWithThreeArguments::TagWithThreeArguments{Tags::FSTPV, type_arg, pos_arg, 0}
   {
   };
-  FSTPV_(SymbolType type_arg, unsigned int pos_arg, int lead_lag_arg) :
+  FSTPV_(SymbolType type_arg, int pos_arg, int lead_lag_arg) :
     TagWithThreeArguments::TagWithThreeArguments{Tags::FSTPV, type_arg, pos_arg, lead_lag_arg}
   {
   };
@@ -737,7 +736,7 @@ public:
   {
     return arg1;
   };
-  unsigned int
+  int
   get_pos()
   {
     return arg2;
@@ -751,16 +750,16 @@ public:
 
 class FCALL_ : public BytecodeInstruction
 {
-  unsigned int nb_output_arguments, nb_input_arguments, indx;
+  int nb_output_arguments, nb_input_arguments, indx;
   string func_name;
   string arg_func_name;
-  unsigned int add_input_arguments{0}, row{0}, col{0};
+  int add_input_arguments{0}, row{0}, col{0};
   ExternalFunctionType function_type{ExternalFunctionType::withoutDerivative};
 public:
   FCALL_() : BytecodeInstruction{Tags::FCALL}
   {
   };
-  FCALL_(unsigned int nb_output_arguments_arg, unsigned int nb_input_arguments_arg, string func_name_arg, unsigned int indx_arg) :
+  FCALL_(int nb_output_arguments_arg, int nb_input_arguments_arg, string func_name_arg, int indx_arg) :
     BytecodeInstruction{Tags::FCALL},
     nb_output_arguments{nb_output_arguments_arg},
     nb_input_arguments{nb_input_arguments_arg},
@@ -774,17 +773,17 @@ public:
     //printf("get_function_name => func_name=%s\n",func_name.c_str());fflush(stdout);
     return func_name;
   };
-  unsigned int
+  int
   get_nb_output_arguments()
   {
     return nb_output_arguments;
   };
-  unsigned int
+  int
   get_nb_input_arguments()
   {
     return nb_input_arguments;
   };
-  unsigned int
+  int
   get_indx()
   {
     return indx;
@@ -800,31 +799,31 @@ public:
     return arg_func_name;
   };
   void
-  set_nb_add_input_arguments(unsigned int arg_add_input_arguments)
+  set_nb_add_input_arguments(int arg_add_input_arguments)
   {
     add_input_arguments = arg_add_input_arguments;
   };
-  unsigned int
+  int
   get_nb_add_input_arguments()
   {
     return add_input_arguments;
   };
   void
-  set_row(unsigned int arg_row)
+  set_row(int arg_row)
   {
     row = arg_row;
   };
-  unsigned int
+  int
   get_row()
   {
     return row;
   }
   void
-  set_col(unsigned int arg_col)
+  set_col(int arg_col)
   {
     col = arg_col;
   };
-  unsigned int
+  int
   get_col()
   {
     return col;
@@ -862,8 +861,8 @@ public:
   };
 #ifdef BYTECODE_MEX
 
-  uint8_t *
-  load(uint8_t *code)
+  char *
+  load(char *code)
   {
     op_code = Tags::FCALL; code += sizeof(op_code);
     memcpy(&nb_output_arguments, code, sizeof(nb_output_arguments)); code += sizeof(nb_output_arguments);
@@ -895,11 +894,9 @@ class FNUMEXPR_ : public BytecodeInstruction
 {
 private:
   ExpressionType expression_type;
-  unsigned int equation;
-  uint16_t dvariable1;
-  int lag1;
+  int equation, dvariable1, lag1;
 public:
-  FNUMEXPR_(const ExpressionType expression_type_arg, unsigned int equation_arg) :
+  FNUMEXPR_(const ExpressionType expression_type_arg, int equation_arg) :
     BytecodeInstruction{Tags::FNUMEXPR},
     expression_type{expression_type_arg},
     equation{equation_arg},
@@ -907,19 +904,19 @@ public:
     lag1{0}
   {
   };
-  FNUMEXPR_(const ExpressionType expression_type_arg, unsigned int equation_arg, unsigned int dvariable1_arg) :
+  FNUMEXPR_(const ExpressionType expression_type_arg, int equation_arg, int dvariable1_arg) :
     BytecodeInstruction{Tags::FNUMEXPR},
     expression_type{expression_type_arg},
     equation{equation_arg},
-    dvariable1{static_cast<uint16_t>(dvariable1_arg)},
+    dvariable1{dvariable1_arg},
     lag1{0}
   {
   };
-  FNUMEXPR_(const ExpressionType expression_type_arg, unsigned int equation_arg, unsigned int dvariable1_arg, int lag1_arg) :
+  FNUMEXPR_(const ExpressionType expression_type_arg, int equation_arg, int dvariable1_arg, int lag1_arg) :
     BytecodeInstruction{Tags::FNUMEXPR},
     expression_type{expression_type_arg},
     equation{equation_arg},
-    dvariable1{static_cast<uint16_t>(dvariable1_arg)},
+    dvariable1{dvariable1_arg},
     lag1{lag1_arg}
   {
   };
@@ -928,12 +925,12 @@ public:
   {
     return expression_type;
   }
-  unsigned int
+  int
   get_equation()
   {
     return equation;
   };
-  unsigned int
+  int
   get_dvariable1()
   {
     return dvariable1;
@@ -968,20 +965,20 @@ private:
   int Max_Lead{0};
   int u_count_int{0};
   int nb_col_jacob{0};
-  unsigned int det_exo_size, exo_size, other_endo_size;
-  unsigned int nb_col_det_exo_jacob, nb_col_exo_jacob, nb_col_other_endo_jacob;
+  int det_exo_size, exo_size, other_endo_size;
+  int nb_col_det_exo_jacob, nb_col_exo_jacob, nb_col_other_endo_jacob;
 public:
   FBEGINBLOCK_() : BytecodeInstruction{Tags::FBEGINBLOCK},
                    type{BlockSimulationType::unknown}
   {
   }
-  FBEGINBLOCK_(unsigned int size_arg, BlockSimulationType type_arg, int unsigned first_element, int unsigned block_size,
+  FBEGINBLOCK_(int size_arg, BlockSimulationType type_arg, int first_element, int block_size,
                const vector<int> &variable_arg, const vector<int> &equation_arg,
                bool is_linear_arg, int endo_nbr_arg, int Max_Lag_arg, int Max_Lead_arg, int &u_count_int_arg, int nb_col_jacob_arg,
-               unsigned int det_exo_size_arg, unsigned int nb_col_det_exo_jacob_arg, unsigned int exo_size_arg, unsigned int nb_col_exo_jacob_arg, unsigned int other_endo_size_arg, unsigned int nb_col_other_endo_jacob_arg,
+               int det_exo_size_arg, int nb_col_det_exo_jacob_arg, int exo_size_arg, int nb_col_exo_jacob_arg, int other_endo_size_arg, int nb_col_other_endo_jacob_arg,
                vector<int> det_exogenous_arg, vector<int> exogenous_arg, vector<int> other_endogenous_arg) :
     BytecodeInstruction{Tags::FBEGINBLOCK},
-    size{static_cast<int>(size_arg)},
+    size{size_arg},
     type{type_arg},
     variable{variable_arg.begin()+first_element, variable_arg.begin()+(first_element+block_size)},
     equation{equation_arg.begin()+first_element, equation_arg.begin()+(first_element+block_size)},
@@ -1002,11 +999,11 @@ public:
     nb_col_other_endo_jacob{nb_col_other_endo_jacob_arg}
   {
   }
-  FBEGINBLOCK_(unsigned int size_arg, BlockSimulationType type_arg, int unsigned first_element, int unsigned block_size,
+  FBEGINBLOCK_(int size_arg, BlockSimulationType type_arg, int first_element, int block_size,
                const vector<int> &variable_arg, const vector<int> &equation_arg,
                bool is_linear_arg, int endo_nbr_arg, int Max_Lag_arg, int Max_Lead_arg, int &u_count_int_arg, int nb_col_jacob_arg) :
     BytecodeInstruction{Tags::FBEGINBLOCK},
-    size{static_cast<int>(size_arg)},
+    size{size_arg},
     type{type_arg},
     variable{variable_arg.begin()+first_element, variable_arg.begin()+(first_element+block_size)},
     equation{equation_arg.begin()+first_element, equation_arg.begin()+(first_element+block_size)},
@@ -1024,7 +1021,7 @@ public:
     nb_col_other_endo_jacob{0}
   {
   }
-  unsigned int
+  int
   get_size()
   {
     return size;
@@ -1069,32 +1066,32 @@ public:
   {
     return nb_col_jacob;
   };
-  unsigned int
+  int
   get_exo_size()
   {
     return exo_size;
   };
-  unsigned int
+  int
   get_nb_col_exo_jacob()
   {
     return nb_col_exo_jacob;
   };
-  unsigned int
+  int
   get_det_exo_size()
   {
     return det_exo_size;
   };
-  unsigned int
+  int
   get_nb_col_det_exo_jacob()
   {
     return nb_col_det_exo_jacob;
   };
-  unsigned int
+  int
   get_other_endo_size()
   {
     return other_endo_size;
   };
-  unsigned int
+  int
   get_nb_col_other_endo_jacob()
   {
     return nb_col_other_endo_jacob;
@@ -1139,18 +1136,18 @@ public:
     CompileCode.write(reinterpret_cast<char *>(&other_endo_size), sizeof(other_endo_size));
     CompileCode.write(reinterpret_cast<char *>(&nb_col_other_endo_jacob), sizeof(nb_col_other_endo_jacob));
 
-    for (unsigned int i = 0; i < det_exo_size; i++)
+    for (int i{0}; i < det_exo_size; i++)
       CompileCode.write(reinterpret_cast<char *>(&det_exogenous[i]), sizeof(det_exogenous[0]));
-    for (unsigned int i = 0; i < exo_size; i++)
+    for (int i{0}; i < exo_size; i++)
       CompileCode.write(reinterpret_cast<char *>(&exogenous[i]), sizeof(exogenous[0]));
-    for (unsigned int i = 0; i < other_endo_size; i++)
+    for (int i{0}; i < other_endo_size; i++)
       CompileCode.write(reinterpret_cast<char *>(&other_endogenous[i]), sizeof(other_endogenous[0]));
     instruction_number++;
   };
 #ifdef BYTECODE_MEX
 
-  uint8_t *
-  load(uint8_t *code)
+  char *
+  load(char *code)
   {
     op_code = Tags::FBEGINBLOCK; code += sizeof(op_code);
     memcpy(&size, code, sizeof(size)); code += sizeof(size);
@@ -1181,19 +1178,19 @@ public:
     memcpy(&other_endo_size, code, sizeof(other_endo_size)); code += sizeof(other_endo_size);
     memcpy(&nb_col_other_endo_jacob, code, sizeof(nb_col_other_endo_jacob)); code += sizeof(nb_col_other_endo_jacob);
 
-    for (unsigned int i = 0; i < det_exo_size; i++)
+    for (int i{0}; i < det_exo_size; i++)
       {
         int tmp_i;
         memcpy(&tmp_i, code, sizeof(tmp_i)); code += sizeof(tmp_i);
         det_exogenous.push_back(tmp_i);
       }
-    for (unsigned int i = 0; i < exo_size; i++)
+    for (int i{0}; i < exo_size; i++)
       {
         int tmp_i;
         memcpy(&tmp_i, code, sizeof(tmp_i)); code += sizeof(tmp_i);
         exogenous.push_back(tmp_i);
       }
-    for (unsigned int i = 0; i < other_endo_size; i++)
+    for (int i{0}; i < other_endo_size; i++)
       {
         int tmp_i;
         memcpy(&tmp_i, code, sizeof(tmp_i)); code += sizeof(tmp_i);
@@ -1209,12 +1206,12 @@ using tags_liste_t = vector<pair<Tags, void * >>;
 class CodeLoad
 {
 private:
-  uint8_t *code;
-  unsigned int nb_blocks;
+  char *code;
+  int nb_blocks;
   vector<size_t> begin_block;
 public:
 
-  unsigned int
+  int
   get_block_number() const
   {
     return nb_blocks;
@@ -1241,7 +1238,7 @@ public:
       return tags_liste;
     Code_Size = CompiledCode.tellg();
     CompiledCode.seekg(ios::beg);
-    code = static_cast<uint8_t *>(mxMalloc(Code_Size));
+    code = static_cast<char *>(mxMalloc(Code_Size));
     CompiledCode.seekg(0);
     CompiledCode.read(reinterpret_cast<char *>(code), Code_Size);
     CompiledCode.close();
diff --git a/src/DynamicModel.cc b/src/DynamicModel.cc
index cf43e95bca4205f464c0df081bca41ad6646d8d5..281a885d72ee8d3f4ba11a56ed7a7d09e3d48c9b 100644
--- a/src/DynamicModel.cc
+++ b/src/DynamicModel.cc
@@ -802,7 +802,7 @@ DynamicModel::writeDynamicBytecode(const string &basename) const
   file_open = true;
 
   //Temporary variables declaration
-  FDIMT_ fdimt(temporary_terms_idxs.size());
+  FDIMT_ fdimt{static_cast<int>(temporary_terms_idxs.size())};
   fdimt.write(code_file, instruction_number);
 
   vector<int> exo, exo_det, other_endo;
@@ -935,7 +935,7 @@ DynamicModel::writeDynamicBytecode(const string &basename) const
             {
               FLDU_ fldu(get<2>(*it));
               fldu.write(code_file, instruction_number);
-              FLDV_ fldv{SymbolType::endogenous, static_cast<unsigned int>(get<0>(*it)), get<1>(*it)};
+              FLDV_ fldv{SymbolType::endogenous, get<0>(*it), get<1>(*it)};
               fldv.write(code_file, instruction_number);
               FBINARY_ fbinary{BinaryOpcode::times};
               fbinary.write(code_file, instruction_number);
@@ -1051,7 +1051,7 @@ DynamicModel::writeDynamicBlockBytecode(const string &basename) const
     }
   //Temporary variables declaration
 
-  FDIMT_ fdimt(blocks_temporary_terms_idxs.size());
+  FDIMT_ fdimt{static_cast<int>(blocks_temporary_terms_idxs.size())};
   fdimt.write(code_file, instruction_number);
 
   for (int block = 0; block < static_cast<int>(blocks.size()); block++)
@@ -1116,10 +1116,10 @@ DynamicModel::writeDynamicBlockBytecode(const string &basename) const
                                if (dynamic_cast<AbstractExternalFunctionNode *>(it))
                                  it->compileExternalFunctionOutput(code_file, instruction_number, false, temporary_terms_union, blocks_temporary_terms_idxs, true, false, tef_terms);
 
-                               FNUMEXPR_ fnumexpr(ExpressionType::TemporaryTerm, static_cast<int>(blocks_temporary_terms_idxs.at(it)));
+                               FNUMEXPR_ fnumexpr{ExpressionType::TemporaryTerm, blocks_temporary_terms_idxs.at(it)};
                                fnumexpr.write(code_file, instruction_number);
                                it->compile(code_file, instruction_number, false, temporary_terms_union, blocks_temporary_terms_idxs, true, false, tef_terms);
-                               FSTPT_ fstpt(static_cast<int>(blocks_temporary_terms_idxs.at(it)));
+                               FSTPT_ fstpt{blocks_temporary_terms_idxs.at(it)};
                                fstpt.write(code_file, instruction_number);
                                temporary_terms_union.insert(it);
                              }
@@ -1277,7 +1277,7 @@ DynamicModel::writeDynamicBlockBytecode(const string &basename) const
                         {
                           FLDU_ fldu(Uf[v].Ufl->u);
                           fldu.write(code_file, instruction_number);
-                          FLDV_ fldv{SymbolType::endogenous, static_cast<unsigned int>(Uf[v].Ufl->var), Uf[v].Ufl->lag};
+                          FLDV_ fldv{SymbolType::endogenous, Uf[v].Ufl->var, Uf[v].Ufl->lag};
                           fldv.write(code_file, instruction_number);
 
                           FBINARY_ fbinary{BinaryOpcode::times};
diff --git a/src/ExprNode.cc b/src/ExprNode.cc
index c660ed91b1bf0ba0d519c08c3c673460e7fdec75..7038847407275afe79d499b2227c2c6cebd12a74 100644
--- a/src/ExprNode.cc
+++ b/src/ExprNode.cc
@@ -1244,26 +1244,26 @@ VariableNode::compile(ostream &CompileCode, unsigned int &instruction_number,
             {
               if (steady_dynamic) // steady state values in a dynamic model
                 {
-                  FLDVS_ fldvs{type, static_cast<unsigned int>(tsid)};
+                  FLDVS_ fldvs{type, tsid};
                   fldvs.write(CompileCode, instruction_number);
                 }
               else
                 {
                   if (type == SymbolType::parameter)
                     {
-                      FLDV_ fldv{type, static_cast<unsigned int>(tsid)};
+                      FLDV_ fldv{type, tsid};
                       fldv.write(CompileCode, instruction_number);
                     }
                   else
                     {
-                      FLDV_ fldv{type, static_cast<unsigned int>(tsid), lag};
+                      FLDV_ fldv{type, tsid, lag};
                       fldv.write(CompileCode, instruction_number);
                     }
                 }
             }
           else
             {
-              FLDSV_ fldsv{type, static_cast<unsigned int>(tsid)};
+              FLDSV_ fldsv{type, tsid};
               fldsv.write(CompileCode, instruction_number);
             }
         }
@@ -1280,19 +1280,19 @@ VariableNode::compile(ostream &CompileCode, unsigned int &instruction_number,
                 {
                   if (type == SymbolType::parameter)
                     {
-                      FSTPV_ fstpv{type, static_cast<unsigned int>(tsid)};
+                      FSTPV_ fstpv{type, tsid};
                       fstpv.write(CompileCode, instruction_number);
                     }
                   else
                     {
-                      FSTPV_ fstpv{type, static_cast<unsigned int>(tsid), lag};
+                      FSTPV_ fstpv{type, tsid, lag};
                       fstpv.write(CompileCode, instruction_number);
                     }
                 }
             }
           else
             {
-              FSTPSV_ fstpsv{type, static_cast<unsigned int>(tsid)};
+              FSTPSV_ fstpsv{type, tsid};
               fstpsv.write(CompileCode, instruction_number);
             }
         }
@@ -6654,7 +6654,7 @@ AbstractExternalFunctionNode::getChainRuleDerivative(int deriv_id, const map<int
   return composeDerivatives(dargs);
 }
 
-unsigned int
+int
 AbstractExternalFunctionNode::compileExternalFunctionArguments(ostream &CompileCode, unsigned int &instruction_number,
                                                                bool lhs_rhs, const temporary_terms_t &temporary_terms,
                                                                const temporary_terms_idxs_t &temporary_terms_idxs, bool dynamic, bool steady_dynamic,
@@ -6663,7 +6663,7 @@ AbstractExternalFunctionNode::compileExternalFunctionArguments(ostream &CompileC
   for (auto argument : arguments)
     argument->compile(CompileCode, instruction_number, lhs_rhs, temporary_terms,
                       temporary_terms_idxs, dynamic, steady_dynamic, tef_terms);
-  return (arguments.size());
+  return static_cast<int>(arguments.size());
 }
 
 void
@@ -7259,7 +7259,7 @@ ExternalFunctionNode::compileExternalFunctionOutput(ostream &CompileCode, unsign
       int second_deriv_symb_id = datatree.external_functions_table.getSecondDerivSymbID(symb_id);
       assert(second_deriv_symb_id != ExternalFunctionsTable::IDSetButNoNameProvided);
 
-      unsigned int nb_output_arguments = 0;
+      int nb_output_arguments{0};
       if (symb_id == first_deriv_symb_id
           && symb_id == second_deriv_symb_id)
         nb_output_arguments = 3;
@@ -7267,8 +7267,8 @@ ExternalFunctionNode::compileExternalFunctionOutput(ostream &CompileCode, unsign
         nb_output_arguments = 2;
       else
         nb_output_arguments = 1;
-      unsigned int nb_input_arguments = compileExternalFunctionArguments(CompileCode, instruction_number, lhs_rhs, temporary_terms,
-                                                                         temporary_terms_idxs, dynamic, steady_dynamic, tef_terms);
+      int nb_input_arguments{compileExternalFunctionArguments(CompileCode, instruction_number, lhs_rhs, temporary_terms,
+                                                              temporary_terms_idxs, dynamic, steady_dynamic, tef_terms)};
 
       FCALL_ fcall(nb_output_arguments, nb_input_arguments, datatree.symbol_table.getName(symb_id), indx);
       switch (nb_output_arguments)
@@ -7782,12 +7782,12 @@ FirstDerivExternalFunctionNode::compileExternalFunctionOutput(ostream &CompileCo
   if (alreadyWrittenAsTefTerm(first_deriv_symb_id, tef_terms))
     return;
 
-  unsigned int nb_add_input_arguments = compileExternalFunctionArguments(CompileCode, instruction_number, lhs_rhs, temporary_terms,
-                                                                         temporary_terms_idxs, dynamic, steady_dynamic, tef_terms);
+  int nb_add_input_arguments{compileExternalFunctionArguments(CompileCode, instruction_number, lhs_rhs, temporary_terms,
+                                                              temporary_terms_idxs, dynamic, steady_dynamic, tef_terms)};
   if (first_deriv_symb_id == ExternalFunctionsTable::IDNotSet)
     {
-      unsigned int nb_input_arguments = 0;
-      unsigned int nb_output_arguments = 1;
+      int nb_input_arguments{0};
+      int nb_output_arguments{1};
       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));
@@ -7805,7 +7805,7 @@ FirstDerivExternalFunctionNode::compileExternalFunctionOutput(ostream &CompileCo
       int second_deriv_symb_id = datatree.external_functions_table.getSecondDerivSymbID(symb_id);
       assert(second_deriv_symb_id != ExternalFunctionsTable::IDSetButNoNameProvided);
 
-      unsigned int nb_output_arguments = 1;
+      int nb_output_arguments{1};
 
       FCALL_ fcall(nb_output_arguments, nb_add_input_arguments, datatree.symbol_table.getName(first_deriv_symb_id), indx);
       fcall.set_function_type(ExternalFunctionType::firstDerivative);
@@ -8197,12 +8197,12 @@ SecondDerivExternalFunctionNode::compileExternalFunctionOutput(ostream &CompileC
   if (alreadyWrittenAsTefTerm(second_deriv_symb_id, tef_terms))
     return;
 
-  unsigned int nb_add_input_arguments = compileExternalFunctionArguments(CompileCode, instruction_number, lhs_rhs, temporary_terms,
-                                                                         temporary_terms_idxs, dynamic, steady_dynamic, tef_terms);
+  int nb_add_input_arguments{compileExternalFunctionArguments(CompileCode, instruction_number, lhs_rhs, temporary_terms,
+                                                              temporary_terms_idxs, dynamic, steady_dynamic, tef_terms)};
   if (second_deriv_symb_id == ExternalFunctionsTable::IDNotSet)
     {
-      unsigned int nb_input_arguments = 0;
-      unsigned int nb_output_arguments = 1;
+      int nb_input_arguments{0};
+      int nb_output_arguments{1};
       int indx = getIndxInTefTerms(symb_id, tef_terms);
       FCALL_ fcall(nb_output_arguments, nb_input_arguments, "hess_element", indx);
       fcall.set_arg_func_name(datatree.symbol_table.getName(symb_id));
@@ -8219,7 +8219,7 @@ SecondDerivExternalFunctionNode::compileExternalFunctionOutput(ostream &CompileC
       tef_terms[{ second_deriv_symb_id, arguments }] = static_cast<int>(tef_terms.size());
       int indx = getIndxInTefTerms(symb_id, tef_terms);
 
-      unsigned int nb_output_arguments = 1;
+      int nb_output_arguments{1};
 
       FCALL_ fcall(nb_output_arguments, nb_add_input_arguments, datatree.symbol_table.getName(second_deriv_symb_id), indx);
       fcall.set_function_type(ExternalFunctionType::secondDerivative);
diff --git a/src/ExprNode.hh b/src/ExprNode.hh
index b02fc0b703976676d34c24c7cf724ec26b88f626..97d58d4cf17bcdfe81ef5d1bcb227b13cc9ad84d 100644
--- a/src/ExprNode.hh
+++ b/src/ExprNode.hh
@@ -1314,10 +1314,10 @@ public:
   void collectVARLHSVariable(set<expr_t> &result) const override;
   void collectDynamicVariables(SymbolType type_arg, set<pair<int, int>> &result) const override;
   double eval(const eval_context_t &eval_context) const noexcept(false) override;
-  unsigned int compileExternalFunctionArguments(ostream &CompileCode, unsigned int &instruction_number,
-                                                bool lhs_rhs, const temporary_terms_t &temporary_terms,
-                                                const temporary_terms_idxs_t &temporary_terms_idxs, bool dynamic, bool steady_dynamic,
-                                                const deriv_node_temp_terms_t &tef_terms) const;
+  int compileExternalFunctionArguments(ostream &CompileCode, unsigned int &instruction_number,
+                                       bool lhs_rhs, const temporary_terms_t &temporary_terms,
+                                       const temporary_terms_idxs_t &temporary_terms_idxs, bool dynamic, bool steady_dynamic,
+                                       const deriv_node_temp_terms_t &tef_terms) const;
 
   void compile(ostream &CompileCode, unsigned int &instruction_number, bool lhs_rhs, const temporary_terms_t &temporary_terms, const temporary_terms_idxs_t &temporary_terms_idxs, bool dynamic, bool steady_dynamic, const deriv_node_temp_terms_t &tef_terms) const override = 0;
   expr_t toStatic(DataTree &static_datatree) const override = 0;
diff --git a/src/StaticModel.cc b/src/StaticModel.cc
index 417b5e3e5b4afdb0f2ace27e9eb0a0464533930e..f016a2c9ff0dc399e4dcc726a805d8b5cdbc26d7 100644
--- a/src/StaticModel.cc
+++ b/src/StaticModel.cc
@@ -403,7 +403,7 @@ StaticModel::writeStaticBytecode(const string &basename) const
   temporary_terms.insert(temporary_terms_derivatives[1].begin(), temporary_terms_derivatives[1].end());
 
   //Temporary variables declaration
-  FDIMST_ fdimst(temporary_terms.size());
+  FDIMST_ fdimst{static_cast<int>(temporary_terms.size())};
   fdimst.write(code_file, instruction_number);
   FBEGINBLOCK_ fbeginblock(symbol_table.endo_nbr(),
                            BlockSimulationType::solveForwardComplete,
@@ -469,7 +469,7 @@ StaticModel::writeStaticBytecode(const string &basename) const
             {
               FLDSU_ fldsu(it.second);
               fldsu.write(code_file, instruction_number);
-              FLDSV_ fldsv{SymbolType::endogenous, static_cast<unsigned int>(it.first)};
+              FLDSV_ fldsv{SymbolType::endogenous, it.first};
               fldsv.write(code_file, instruction_number);
               FBINARY_ fbinary{BinaryOpcode::times};
               fbinary.write(code_file, instruction_number);
@@ -569,7 +569,7 @@ StaticModel::writeStaticBlockBytecode(const string &basename) const
     }
   //Temporary variables declaration
 
-  FDIMST_ fdimst(blocks_temporary_terms_idxs.size());
+  FDIMST_ fdimst{static_cast<int>(blocks_temporary_terms_idxs.size())};
   fdimst.write(code_file, instruction_number);
 
   temporary_terms_t temporary_terms_union;
@@ -632,10 +632,10 @@ StaticModel::writeStaticBlockBytecode(const string &basename) const
                                if (dynamic_cast<AbstractExternalFunctionNode *>(it))
                                  it->compileExternalFunctionOutput(code_file, instruction_number, false, temporary_terms_union, blocks_temporary_terms_idxs, false, false, tef_terms);
 
-                               FNUMEXPR_ fnumexpr(ExpressionType::TemporaryTerm, static_cast<int>(blocks_temporary_terms_idxs.at(it)));
+                               FNUMEXPR_ fnumexpr{ExpressionType::TemporaryTerm, blocks_temporary_terms_idxs.at(it)};
                                fnumexpr.write(code_file, instruction_number);
                                it->compile(code_file, instruction_number, false, temporary_terms_union, blocks_temporary_terms_idxs, false, false, tef_terms);
-                               FSTPST_ fstpst(static_cast<int>(blocks_temporary_terms_idxs.at(it)));
+                               FSTPST_ fstpst{blocks_temporary_terms_idxs.at(it)};
                                fstpst.write(code_file, instruction_number);
                                temporary_terms_union.insert(it);
                              }
@@ -771,7 +771,7 @@ StaticModel::writeStaticBlockBytecode(const string &basename) const
                       {
                         FLDSU_ fldsu(Uf[v].Ufl->u);
                         fldsu.write(code_file, instruction_number);
-                        FLDSV_ fldsv{SymbolType::endogenous, static_cast<unsigned int>(Uf[v].Ufl->var)};
+                        FLDSV_ fldsv{SymbolType::endogenous, Uf[v].Ufl->var};
                         fldsv.write(code_file, instruction_number);
 
                         FBINARY_ fbinary{BinaryOpcode::times};