diff --git a/parser.src/ComputingTasks.cc b/parser.src/ComputingTasks.cc
index a68c6e6177b15fb9c9f9e87a290d8ddf1dbe69ff..6875491b4bd0ad024400ba457fb516223a8fe809 100644
--- a/parser.src/ComputingTasks.cc
+++ b/parser.src/ComputingTasks.cc
@@ -303,18 +303,6 @@ MarkowitzStatement::writeOutput(ostream &output, const string &basename) const
   output << "options_.markowitz = " << markowitz << ";" << endl;
 }
 
-
-Simulation_MethodStatement::Simulation_MethodStatement(double simulation_method_arg) : simulation_method(simulation_method_arg)
-{
-}
-
-void
-Simulation_MethodStatement::writeOutput(ostream &output, const string &basename) const
-{
-  output << "options_.simulation_method = " << simulation_method << ";" << endl;
-}
-
-
 DsampleStatement::DsampleStatement(int val1_arg) : val1(val1_arg), val2(-1)
 {
 }
diff --git a/parser.src/ExprNode.cc b/parser.src/ExprNode.cc
index 0ed5669cf648c3275f67c921de9663ae9cc4c5b4..c26a3d9df10fe919ea5aceba6fb883807b9fb5cc 100644
--- a/parser.src/ExprNode.cc
+++ b/parser.src/ExprNode.cc
@@ -129,7 +129,6 @@ NumConstNode::eval(const eval_context_type &eval_context) const throw (EvalExcep
   return(datatree.num_constants.getDouble(id));
 }
 
-/*New*/
 void
 NumConstNode::compile(ofstream &CompileCode, bool lhs_rhs, ExprNodeOutputType output_type, const temporary_terms_type &temporary_terms, map_idx_type map_idx) const
 {
@@ -151,7 +150,6 @@ NumConstNode::compile(ofstream &CompileCode, bool lhs_rhs, ExprNodeOutputType ou
       CompileCode.write(reinterpret_cast<char *>(&vard),sizeof(vard));
     /*}*/
 }
-/*EndNew*/
 
 
 void
@@ -248,12 +246,6 @@ VariableNode::writeOutput(ostream &output, ExprNodeOutputType output_type,
         output << "T" << idx << "(it_)";
       else
         output << "T" << idx;
-      /*if (output_type != oCDynamicModelSparseDLL)
-        output << "T" << idx;
-      else if (output_type == oMatlabDynamicModelSparse)
-        output << "T" << idx << "(it_)";
-      else
-        output << "T" << idx << "[it_]";*/
       return;
     }
 
@@ -411,7 +403,6 @@ VariableNode::eval(const eval_context_type &eval_context) const throw (EvalExcep
   return it->second;
 }
 
-/*New*/
 void
 VariableNode::compile(ofstream &CompileCode, bool lhs_rhs, ExprNodeOutputType output_type, const temporary_terms_type &temporary_terms, map_idx_type map_idx) const
 {
@@ -471,7 +462,6 @@ VariableNode::compile(ofstream &CompileCode, bool lhs_rhs, ExprNodeOutputType ou
       exit(-1);
     }
 }
-/*EndNew*/
 
 void
 VariableNode::collectEndogenous(NodeID &Id)
@@ -709,12 +699,6 @@ UnaryOpNode::writeOutput(ostream &output, ExprNodeOutputType output_type,
         output << "T" << idx << "(it_)";
       else
         output << "T" << idx;
-      /*if (output_type != oCDynamicModelSparseDLL)
-        output << "T" << idx;
-      else if (output_type == oMatlabDynamicModelSparse)
-        output << "T" << idx << "(it_)";
-      else
-        output << "T" << idx << "[it_]";*/
       return;
     }
 
@@ -722,9 +706,6 @@ UnaryOpNode::writeOutput(ostream &output, ExprNodeOutputType output_type,
   if (op_code == oUminus)
     output << "(";
 
-
-
-
   switch(op_code)
     {
     case oUminus:
@@ -857,7 +838,6 @@ UnaryOpNode::eval(const eval_context_type &eval_context) const throw (EvalExcept
   return eval_opcode(op_code, v);
 }
 
-/*New*/
 void
 UnaryOpNode::compile(ofstream &CompileCode, bool lhs_rhs, ExprNodeOutputType output_type, const temporary_terms_type &temporary_terms, map_idx_type map_idx) const
 {
@@ -874,7 +854,6 @@ UnaryOpNode::compile(ofstream &CompileCode, bool lhs_rhs, ExprNodeOutputType out
   UnaryOpcode op_codel=op_code;
   CompileCode.write(reinterpret_cast<char *>(&op_codel), sizeof(op_codel));
 }
-/*EndNEw*/
 
 void
 UnaryOpNode::collectEndogenous(NodeID &Id)
@@ -982,28 +961,31 @@ BinaryOpNode::precedence(ExprNodeOutputType output_type, const temporary_terms_t
 
   switch(op_code)
     {
+    case oEqual:
+      return 0;
     case oEqualEqual:
     case oDifferent:
+      return 1;
     case oLessEqual:
     case oGreaterEqual:
     case oLess:
     case oGreater:
-    case oMin:
-    case oMax:
-      return 0;
-    case oEqual:
+      return 2;
     case oPlus:
     case oMinus:
-      return 1;
+      return 3;
     case oTimes:
     case oDivide:
-      return 2;
+      return 4;
     case oPower:
       if (!OFFSET(output_type))
         // In C, power operator is of the form pow(a, b)
         return 100;
       else
-        return 4;
+        return 5;
+    case oMin:
+    case oMax:
+      return 100;
     }
   cerr << "Impossible case!" << endl;
   exit(-1);
@@ -1143,27 +1125,27 @@ BinaryOpNode::eval_opcode(double v1, BinaryOpcode op_code, double v2) throw (Eva
     case oPower:
       return(pow(v1, v2));
     case oMax:
-      if(v1<v2)
-        return( v2);
+      if (v1 < v2)
+        return v2;
       else
-        return( v1);
+        return v1;
     case oMin:
-      if(v1>v2)
-        return( v2);
+      if (v1 > v2)
+        return v2;
       else
-        return( v1);
+        return v1;
     case oLess:
-        return( v1< v2 ? 1.0 : 0.0);
+      return (v1 < v2);
     case oGreater:
-        return( v1> v2 ? 1.0 : 0.0);
+      return (v1 > v2);
     case oLessEqual:
-        return( v1<= v2 ? 1.0 : 0.0);
+      return (v1 <= v2);
     case oGreaterEqual:
-        return( v1>= v2 ? 1.0 : 0.0);
+      return (v1 >= v2);
     case oEqualEqual:
-        return( v1== v2 ? 1.0 : 0.0);
+      return (v1 == v2);
     case oDifferent:
-        return( v1!= v2 ? 1.0 : 0.0);
+      return (v1 != v2);
     case oEqual:
       throw EvalException();
     }
@@ -1180,7 +1162,6 @@ BinaryOpNode::eval(const eval_context_type &eval_context) const throw (EvalExcep
   return eval_opcode(v1, op_code, v2);
 }
 
-/*New*/
 void
 BinaryOpNode::compile(ofstream &CompileCode, bool lhs_rhs, ExprNodeOutputType output_type, const temporary_terms_type &temporary_terms, map_idx_type map_idx) const
 {
@@ -1199,7 +1180,6 @@ BinaryOpNode::compile(ofstream &CompileCode, bool lhs_rhs, ExprNodeOutputType ou
   BinaryOpcode op_codel=op_code;
   CompileCode.write(reinterpret_cast<char *>(&op_codel),sizeof(op_codel));
 }
-/*EndNew*/
 
 void
 BinaryOpNode::writeOutput(ostream &output, ExprNodeOutputType output_type,
@@ -1215,30 +1195,25 @@ BinaryOpNode::writeOutput(ostream &output, ExprNodeOutputType output_type,
         output << "T" << idx << "(it_)";
       else
         output << "T" << idx;
-      /*if (output_type != oCDynamicModelSparseDLL)
-        output << "T" << idx;
-      else if (output_type == oMatlabDynamicModelSparse)
-        output << "T" << idx << "(it_)";
-      else
-        output << "T" << idx << "[it_]";*/
       return;
     }
 
-  // Treat special case of power operator in C
+  // Treat special case of power operator in C, and case of max and min operators
   if ((op_code == oPower && !OFFSET(output_type)) || op_code == oMax || op_code == oMin )
     {
       switch (op_code)
 	      {
-	        case oPower:
-	          output << "pow(";
-	          break;
-	        case oMax:
-	          output << "max(";
-	          break;
-	        case oMin:
-	          output << "min(";
-	          break;
-          default:;
+        case oPower:
+          output << "pow(";
+          break;
+        case oMax:
+          output << "max(";
+          break;
+        case oMin:
+          output << "min(";
+          break;
+        default:
+          ;
 	        }
       arg1->writeOutput(output, output_type, temporary_terms);
       output << ",";
@@ -1300,7 +1275,7 @@ BinaryOpNode::writeOutput(ostream &output, ExprNodeOutputType output_type,
       output << "==";
       break;
     case oDifferent:
-      if(OFFSET(output_type))
+      if (OFFSET(output_type))
         output << "~=";
       else
         output << "!=";
@@ -1308,7 +1283,8 @@ BinaryOpNode::writeOutput(ostream &output, ExprNodeOutputType output_type,
     case oEqual:
       output << "=";
       break;
-    default:;
+    default:
+      ;
     }
 
   close_parenthesis = false;
@@ -1354,7 +1330,8 @@ TrinaryOpNode::TrinaryOpNode(DataTree &datatree_arg, const NodeID arg1_arg,
   datatree.trinary_op_node_map[make_pair(make_pair(make_pair(arg1, arg2), arg3), op_code)] = this;
 
   // Non-null derivatives are the union of those of the arguments
-  // Compute set union of arg1->non_null_derivatives and arg2->non_null_derivatives
+  // Compute set union of arg{1,2,3}->non_null_derivatives
+  set<int> non_null_derivatives_tmp;  
   set_union(arg1->non_null_derivatives.begin(),
             arg1->non_null_derivatives.end(),
             arg2->non_null_derivatives.begin(),
@@ -1433,7 +1410,7 @@ TrinaryOpNode::precedence(ExprNodeOutputType output_type, const temporary_terms_
   switch(op_code)
     {
     case oNormcdf:
-        return 100;
+      return 100;
     }
   cerr << "Impossible case!" << endl;
   exit(-1);
@@ -1546,9 +1523,9 @@ TrinaryOpNode::eval(const eval_context_type &eval_context) const throw (EvalExce
   return eval_opcode(v1, op_code, v2, v3);
 }
 
-/*New*/
 void
-TrinaryOpNode::compile(ofstream &CompileCode, bool lhs_rhs, ExprNodeOutputType output_type, const temporary_terms_type &temporary_terms, map_idx_type map_idx) const
+TrinaryOpNode::compile(ofstream &CompileCode, bool lhs_rhs, ExprNodeOutputType output_type,
+                       const temporary_terms_type &temporary_terms, map_idx_type map_idx) const
 {
   // If current node is a temporary term
   temporary_terms_type::const_iterator it = temporary_terms.find(const_cast<TrinaryOpNode *>(this));
@@ -1566,13 +1543,11 @@ TrinaryOpNode::compile(ofstream &CompileCode, bool lhs_rhs, ExprNodeOutputType o
   TrinaryOpcode op_codel=op_code;
   CompileCode.write(reinterpret_cast<char *>(&op_codel),sizeof(op_codel));
 }
-/*EndNew*/
 
 void
 TrinaryOpNode::writeOutput(ostream &output, ExprNodeOutputType output_type,
                           const temporary_terms_type &temporary_terms) const
 {
-
   if (!OFFSET(output_type))
     {
       cerr << "TrinaryOpNode not implemented for C output" << endl;
diff --git a/parser.src/ParsingDriver.cc b/parser.src/ParsingDriver.cc
index 3103cca2d7bf31cd9e0b4ef58defd4a47b7f9242..8be985d5d1cb913d60ef15b8666da1f17c8a546e 100644
--- a/parser.src/ParsingDriver.cc
+++ b/parser.src/ParsingDriver.cc
@@ -200,15 +200,6 @@ ParsingDriver::markowitz(string *markowitz)
   delete markowitz;
 }
 
-void
-ParsingDriver::simulation_method(string *simulation_method)
-{
-  double simulation_method_val = atof(simulation_method->c_str());
-  mod_file->addStatement(new Simulation_MethodStatement(simulation_method_val ));
-  delete simulation_method;
-}
-
-
 void
 ParsingDriver::dsample(string *arg1)
 {
@@ -533,12 +524,9 @@ ParsingDriver::add_value(NodeID value)
 void
 ParsingDriver::add_value(string *p1)
 {
-  //int p1_val = atoi(p1->c_str());
   det_shocks_values.push_back(add_constant(p1));
-  //delete p1;
 }
 
-
 void
 ParsingDriver::do_sigma_e()
 {
@@ -572,22 +560,14 @@ ParsingDriver::add_to_row(NodeID v)
   sigmae_row.push_back(v);
 }
 
-
 void
 ParsingDriver::steady()
 {
-  if (/*mod_file->model_tree.mode == eSparseDLLMode || */mod_file->model_tree.mode == eSparseMode)
-    {
-      mod_file->addStatement(new SteadySparseStatement(options_list));
-      options_list.clear();
-    }
+  if (mod_file->model_tree.mode == eSparseMode)
+    mod_file->addStatement(new SteadySparseStatement(options_list));
   else
-    {
-      mod_file->addStatement(new SteadyStatement(options_list));
-      options_list.clear();
-    }
-  /*mod_file->addStatement(new SteadyStatement(options_list));
-  options_list.clear();*/
+    mod_file->addStatement(new SteadyStatement(options_list));
+  options_list.clear();
 }
 
 void
@@ -1145,9 +1125,6 @@ ParsingDriver::add_different(NodeID arg1, NodeID arg2)
   return data_tree->AddDifferent(arg1, arg2);
 }
 
-
-
-
 NodeID
 ParsingDriver::add_power(NodeID arg1, NodeID arg2)
 {
diff --git a/parser.src/include/ComputingTasks.hh b/parser.src/include/ComputingTasks.hh
index 3e0138a2a42ed01b0f42e239c503110b81eb90a6..c2f93b6df3eeea478108bf720a366d1c4fa4fdee 100644
--- a/parser.src/include/ComputingTasks.hh
+++ b/parser.src/include/ComputingTasks.hh
@@ -119,15 +119,6 @@ public:
   virtual void writeOutput(ostream &output, const string &basename) const;
 };
 
-class Simulation_MethodStatement : public Statement
-{
-private:
-  const int simulation_method;
-public:
-  Simulation_MethodStatement(double simulation_method_arg) ;
-  void writeOutput(ostream &output, const string &basename) const;
-};
-
 class MarkowitzStatement : public Statement
 {
 private:
diff --git a/parser.src/include/DataTree.hh b/parser.src/include/DataTree.hh
index 5a2e69fe950c903fe07055f69c6cb7ad866d8eb6..02c0c00830a041e83cbba267243d48602b15e349 100644
--- a/parser.src/include/DataTree.hh
+++ b/parser.src/include/DataTree.hh
@@ -14,6 +14,8 @@ using namespace std;
 #include "VariableTable.hh"
 #include "ExprNode.hh"
 
+#define CONSTANTS_PRECISION 16
+
 class DataTree
 {
   friend class ExprNode;
@@ -151,7 +153,7 @@ DataTree::AddPossiblyNegativeConstant(double v)
       neg = true;
     }
   ostringstream ost;
-  ost << setprecision(16) << v;
+  ost << setprecision(CONSTANTS_PRECISION) << v;
 
   NodeID cnode = AddNumConstant(ost.str());
 
diff --git a/parser.src/include/ExprNode.hh b/parser.src/include/ExprNode.hh
index 3f90048103e7ae5231eed2d84583935407faeb67..bd141616ab2d9ce2401ea4a3b3edb9ba3c108edc 100644
--- a/parser.src/include/ExprNode.hh
+++ b/parser.src/include/ExprNode.hh
@@ -140,10 +140,7 @@ public:
   };
 
   virtual double eval(const eval_context_type &eval_context) const throw (EvalException) = 0;
-  /*New*/
   virtual void compile(ofstream &CompileCode, bool lhs_rhs, ExprNodeOutputType output_type, const temporary_terms_type &temporary_terms, map_idx_type map_idx) const = 0;
-  /*EndNew*/
-
 };
 
 //! Object used to compare two nodes (using their indexes)
@@ -168,9 +165,7 @@ public:
   virtual void writeOutput(ostream &output, ExprNodeOutputType output_type, const temporary_terms_type &temporary_terms) const;
   virtual void collectEndogenous(NodeID &Id);
   virtual double eval(const eval_context_type &eval_context) const throw (EvalException);
-  /*New*/
   virtual void compile(ofstream &CompileCode, bool lhs_rhs, ExprNodeOutputType output_type, const temporary_terms_type &temporary_terms, map_idx_type map_idx) const;
-  /*EndNew*/
 };
 
 //! Symbol or variable node
@@ -189,9 +184,7 @@ public:
   virtual void writeOutput(ostream &output, ExprNodeOutputType output_type, const temporary_terms_type &temporary_terms = temporary_terms_type()) const;
   virtual void collectEndogenous(NodeID &Id);
   virtual double eval(const eval_context_type &eval_context) const throw (EvalException);
-  /*New*/
   virtual void compile(ofstream &CompileCode, bool lhs_rhs, ExprNodeOutputType output_type, const temporary_terms_type &temporary_terms, map_idx_type map_idx) const;
-  /*EndNew*/
 };
 
 enum UnaryOpcode
@@ -238,9 +231,7 @@ public:
   virtual void collectEndogenous(NodeID &Id);
   static double eval_opcode(UnaryOpcode op_code, double v) throw (EvalException);
   virtual double eval(const eval_context_type &eval_context) const throw (EvalException);
-  /*New*/
   virtual void compile(ofstream &CompileCode, bool lhs_rhs, ExprNodeOutputType output_type, const temporary_terms_type &temporary_terms, map_idx_type map_idx) const;
-  /*EndNew*/
 };
 
 enum BinaryOpcode
@@ -285,9 +276,7 @@ public:
   virtual void collectEndogenous(NodeID &Id);
   static double eval_opcode(double v1, BinaryOpcode op_code, double v2) throw (EvalException);
   virtual double eval(const eval_context_type &eval_context) const throw (EvalException);
-  /*New*/
   virtual void compile(ofstream &CompileCode, bool lhs_rhs, ExprNodeOutputType output_type, const temporary_terms_type &temporary_terms, map_idx_type map_idx) const;
-  /*EndNew*/
 };
 
 enum TrinaryOpcode
@@ -304,7 +293,6 @@ private:
   const TrinaryOpcode op_code;
   virtual NodeID computeDerivative(int varID);
   virtual int cost(const temporary_terms_type &temporary_terms, bool is_matlab) const;
-  set<int> non_null_derivatives_tmp;
 public:
   TrinaryOpNode(DataTree &datatree_arg, const NodeID arg1_arg,
 		TrinaryOpcode op_code_arg, const NodeID arg2_arg, const NodeID arg3_arg);
@@ -320,9 +308,7 @@ public:
   virtual void collectEndogenous(NodeID &Id);
   static double eval_opcode(double v1, TrinaryOpcode op_code, double v2, double v3) throw (EvalException);
   virtual double eval(const eval_context_type &eval_context) const throw (EvalException);
-  /*New*/
   virtual void compile(ofstream &CompileCode, bool lhs_rhs, ExprNodeOutputType output_type, const temporary_terms_type &temporary_terms, map_idx_type map_idx) const;
-  /*EndNew*/
 };
 
 //! Unknown function node
@@ -346,9 +332,7 @@ public:
                                      map_idx_type &map_idx) const;
   virtual void collectEndogenous(NodeID &Id);
   virtual double eval(const eval_context_type &eval_context) const throw (EvalException);
-  /*New*/
   virtual void compile(ofstream &CompileCode, bool lhs_rhs, ExprNodeOutputType output_type, const temporary_terms_type &temporary_terms, map_idx_type map_idx) const;
-  /*EndNew*/
 };
 
 typedef struct IM_compact
diff --git a/parser.src/include/ParsingDriver.hh b/parser.src/include/ParsingDriver.hh
index 642be443a48c7cd7609e89ba183d39e2ab2c73ec..5a6fd5a99b62a498e37a8b3cd27e8e7e27530692 100644
--- a/parser.src/include/ParsingDriver.hh
+++ b/parser.src/include/ParsingDriver.hh
@@ -184,8 +184,6 @@ public:
   //! Adds a "cutoff" statement
   void cutoff(string *cutoff);
   //! Adds a weight of the "markowitz" criteria statement
-  void simulation_method(string *simulation_method);
-  //! Adds a deterministic simulation method statement
   void markowitz(string *markowitz);
   //! Adds a "dsample" statement
   void dsample(string *arg1);
@@ -378,11 +376,11 @@ public:
   NodeID add_atanh(NodeID arg1);
   //! Writes token "sqrt(arg1)" to model tree
   NodeID add_sqrt(NodeID arg1);
-   //! Writes token "max(arg1,arg2)" to model tree
+  //! Writes token "max(arg1,arg2)" to model tree
   NodeID add_max(NodeID arg1, NodeID arg2);
-   //! Writes token "min(arg1,arg2)" to model tree
+  //! Writes token "min(arg1,arg2)" to model tree
   NodeID add_min(NodeID arg1, NodeID arg2);
-   //! Writes token "normcdf(arg1,arg2,arg3)" to model tree
+  //! Writes token "normcdf(arg1,arg2,arg3)" to model tree
   NodeID add_normcdf(NodeID arg1, NodeID arg2, NodeID arg3);
   //! Adds an unknwon function argument
   void add_unknown_function_arg(NodeID arg);