diff --git a/DynamicModel.cc b/DynamicModel.cc
index 78be858b095ac706b75e7880ec543f343fefa96b..51ca2bebb571d73c89ff324c6e61eb7c0a52dcf2 100644
--- a/DynamicModel.cc
+++ b/DynamicModel.cc
@@ -1595,7 +1595,7 @@ DynamicModel::writeSparseDynamicMFile(const string &dynamic_basename, const stri
             mDynamicModelFile << "  y = solve_one_boundary('"  << dynamic_basename << "_" <<  i + 1 << "'" <<
             ", y, x, params, y_index, " << nze <<
             ", options_.periods, " << block_triangular.ModelBlock->Block_List[i].is_linear <<
-            ", blck_num, y_kmin, options_.maxit_, options_.solve_tolf, options_.slowc, options_.cutoff, options_.stack_solve_algo, 1, 1, 0);\n";
+              ", blck_num, y_kmin, options_.maxit_, options_.solve_tolf, options_.slowc, " << cutoff << ", options_.stack_solve_algo, 1, 1, 0);\n";
             mDynamicModelFile << "  tmp = y(:,M_.block_structure.block(" << i + 1 << ").variable);\n";
             mDynamicModelFile << "  if(isnan(tmp) | isinf(tmp))\n";
             mDynamicModelFile << "    disp(['Inf or Nan value during the resolution of block " << i <<"']);\n";
@@ -1626,7 +1626,7 @@ DynamicModel::writeSparseDynamicMFile(const string &dynamic_basename, const stri
             mDynamicModelFile << "  y = solve_one_boundary('"  << dynamic_basename << "_" <<  i + 1 << "'" <<
             ", y, x, params, y_index, " << nze <<
             ", options_.periods, " << block_triangular.ModelBlock->Block_List[i].is_linear <<
-            ", blck_num, y_kmin, options_.maxit_, options_.solve_tolf, options_.slowc, options_.cutoff, options_.stack_solve_algo, 1, 1, 0);\n";
+            ", blck_num, y_kmin, options_.maxit_, options_.solve_tolf, options_.slowc, " << cutoff << ", options_.stack_solve_algo, 1, 1, 0);\n";
             mDynamicModelFile << "  tmp = y(:,M_.block_structure.block(" << i + 1 << ").variable);\n";
             mDynamicModelFile << "  if(isnan(tmp) | isinf(tmp))\n";
             mDynamicModelFile << "    disp(['Inf or Nan value during the resolution of block " << i <<"']);\n";
@@ -1658,7 +1658,7 @@ DynamicModel::writeSparseDynamicMFile(const string &dynamic_basename, const stri
             ", options_.periods, " << block_triangular.ModelBlock->Block_List[i].Max_Lag <<
             ", " << block_triangular.ModelBlock->Block_List[i].Max_Lead <<
             ", " << block_triangular.ModelBlock->Block_List[i].is_linear <<
-            ", blck_num, y_kmin, options_.maxit_, options_.solve_tolf, options_.slowc, options_.cutoff, options_.stack_solve_algo);\n";
+            ", blck_num, y_kmin, options_.maxit_, options_.solve_tolf, options_.slowc, " << cutoff << ", options_.stack_solve_algo);\n";
             mDynamicModelFile << "  tmp = y(:,M_.block_structure.block(" << i + 1 << ").variable);\n";
             mDynamicModelFile << "  if(isnan(tmp) | isinf(tmp))\n";
             mDynamicModelFile << "    disp(['Inf or Nan value during the resolution of block " << i <<"']);\n";
diff --git a/DynareBison.yy b/DynareBison.yy
index d978d5fd02f906863a08b61e2e40b78b34441b6f..79b67bbe017a1e5378185ba2e7ef779874a7d901 100644
--- a/DynareBison.yy
+++ b/DynareBison.yy
@@ -1495,9 +1495,9 @@ o_hp_filter : HP_FILTER EQUAL INT_NUMBER { driver.option_num("hp_filter", $3); }
 o_hp_ngrid : HP_NGRID EQUAL INT_NUMBER { driver.option_num("hp_ngrid", $3); };
 o_periods : PERIODS EQUAL INT_NUMBER
             { driver.option_num("periods", $3); driver.option_num("simul", "1"); };
-o_cutoff : CUTOFF EQUAL number { driver.option_num("cutoff", $3); }
+o_cutoff : CUTOFF EQUAL number { driver.cutoff($3); }
 o_markowitz : MARKOWITZ EQUAL number { driver.option_num("markowitz", $3); };
-o_mfs : MFS EQUAL number { driver.option_num("mfs", $3); };
+o_mfs : MFS EQUAL INT_NUMBER { driver.mfs($3); };
 o_simul : SIMUL { driver.option_num("simul", "1"); };
 o_simul_seed : SIMUL_SEED EQUAL INT_NUMBER { driver.option_num("simul_seed", $3); } ;
 o_qz_criterium : QZ_CRITERIUM EQUAL number { driver.option_num("qz_criterium", $3); };
diff --git a/ParsingDriver.cc b/ParsingDriver.cc
index e3e4b2a805b14ec58dc8ad714e4a7c45304c51a0..9c2aa7409d42aa1261db8d6e4baf55f69011a154 100644
--- a/ParsingDriver.cc
+++ b/ParsingDriver.cc
@@ -355,6 +355,24 @@ ParsingDriver::byte_code()
   mod_file->byte_code = true;
 }
 
+void
+ParsingDriver::cutoff(string *value)
+{
+  double val = atof(value->c_str());
+  mod_file->dynamic_model.cutoff = val;
+  mod_file->static_dll_model.cutoff = val;
+  delete value;
+}
+
+void
+ParsingDriver::mfs(string *value)
+{
+  int val = atoi(value->c_str());
+  mod_file->dynamic_model.mfs = val;
+  mod_file->static_dll_model.mfs = val;
+  delete value;
+}
+
 void
 ParsingDriver::end_initval()
 {
@@ -612,16 +630,6 @@ ParsingDriver::option_num(const string &name_option, const string &opt)
 
   if ((name_option == "periods") && mod_file->block)
     mod_file->dynamic_model.block_triangular.periods = atoi(opt.c_str());
-  else if (name_option == "cutoff")
-    {
-      mod_file->dynamic_model.cutoff = atof(opt.c_str());
-      mod_file->static_dll_model.cutoff = atof(opt.c_str());
-    }
-	else if (name_option == "mfs")
-	  {
-		  mod_file->dynamic_model.mfs = atoi(opt.c_str());
-		  mod_file->static_dll_model.mfs = atoi(opt.c_str());
-	  }
 
   options_list.num_options[name_option] = opt;
 }
diff --git a/ParsingDriver.hh b/ParsingDriver.hh
index 07fdb9f5115f9ca91f6b021f87804eae52812b4d..7bc0752d4588806dc8942274fb016cf76b2fb28e 100644
--- a/ParsingDriver.hh
+++ b/ParsingDriver.hh
@@ -179,6 +179,10 @@ public:
   void block();
   //! the model is stored in a binary file
   void byte_code();
+  //! cutoff option of model block
+  void cutoff(string *value);
+  //! mfs option of model block
+  void mfs(string *value);
   //! Sets the FILENAME for the initial value in initval
   void initval_file(string *filename);
   //! Declares an endogenous variable