diff --git a/src/DynareBison.yy b/src/DynareBison.yy
index dc1db9dc379fe168129a2f0f91a1c2c06b948f10..a66cf7697dc31d542e098cd5f0201cf144f3654e 100644
--- a/src/DynareBison.yy
+++ b/src/DynareBison.yy
@@ -183,7 +183,7 @@ class ParsingDriver;
 %token NO_IDENTIFICATION_STRENGTH NO_IDENTIFICATION_REDUCEDFORM NO_IDENTIFICATION_MOMENTS
 %token NO_IDENTIFICATION_MINIMAL NO_IDENTIFICATION_SPECTRUM NORMALIZE_JACOBIANS GRID_NBR
 %token TOL_RANK TOL_DERIV TOL_SV CHECKS_VIA_SUBSETS MAX_DIM_SUBSETS_GROUPS ZERO_MOMENTS_TOLERANCE
-%token MAX_NROWS SQUEEZE_SHOCK_DECOMPOSITION WITH_EPILOGUE MODEL_REMOVE MODEL_REPLACE
+%token MAX_NROWS SQUEEZE_SHOCK_DECOMPOSITION WITH_EPILOGUE MODEL_REMOVE MODEL_REPLACE MODEL_OPTIONS
 
 %token <vector<string>> SYMBOL_VEC
 
@@ -344,6 +344,7 @@ statement : parameters
           | occbin_constraints
           | model_remove
           | model_replace
+          | model_options
           ;
 
 dsample : DSAMPLE INT_NUMBER ';'
@@ -939,21 +940,23 @@ occbin_constraints_regime_option : BIND hand_side ';'
                                    { $$ = { "error_relax", $2 }; }
                                  ;
 
-model_options : BLOCK { driver.block(); }
-              | o_cutoff
-              | o_mfs
-              | BYTECODE { driver.bytecode(); }
-              | USE_DLL { driver.use_dll(); }
-              | NO_STATIC { driver.no_static();}
-              | DIFFERENTIATE_FORWARD_VARS { driver.differentiate_forward_vars_all(); }
-              | DIFFERENTIATE_FORWARD_VARS EQUAL '(' symbol_list ')' { driver.differentiate_forward_vars_some(); }
-              | o_linear
-              | PARALLEL_LOCAL_FILES EQUAL '(' parallel_local_filename_list ')'
-              | BALANCED_GROWTH_TEST_TOL EQUAL non_negative_number { driver.balanced_growth_test_tol($3); }
-              ;
+/* The tokens below must be accepted in both DYNARE_STATEMENT and DYNARE_BLOCK
+   states in the lexer, because of model block and model_options statement */
+model_option : BLOCK { driver.block(); }
+             | o_cutoff
+             | o_mfs
+             | BYTECODE { driver.bytecode(); }
+             | USE_DLL { driver.use_dll(); }
+             | NO_STATIC { driver.no_static();}
+             | DIFFERENTIATE_FORWARD_VARS { driver.differentiate_forward_vars_all(); }
+             | DIFFERENTIATE_FORWARD_VARS EQUAL '(' symbol_list ')' { driver.differentiate_forward_vars_some(); }
+             | o_linear
+             | PARALLEL_LOCAL_FILES EQUAL '(' parallel_local_filename_list ')'
+             | BALANCED_GROWTH_TEST_TOL EQUAL non_negative_number { driver.balanced_growth_test_tol($3); }
+             ;
 
-model_options_list : model_options_list COMMA model_options
-                   | model_options
+model_options_list : model_options_list COMMA model_option
+                   | model_option
                    ;
 
 model : MODEL ';' { driver.begin_model(); }
@@ -1119,6 +1122,8 @@ model_replace : MODEL_REPLACE '(' tag_pair_list_for_selection ')' ';'
                equation_list END ';'
                { driver.end_model(); };
 
+model_options : MODEL_OPTIONS '(' model_options_list ')' ';'
+
 tag_pair_list_for_selection : QUOTED_STRING
                               { $$ = { { "name", $1 } }; }
                             | symbol EQUAL QUOTED_STRING
diff --git a/src/DynareFlex.ll b/src/DynareFlex.ll
index 3150bfa6aafd3d254dd937c81452bd43f15c9911..5f21a2c53958402f029546b44edd55b0e23cd708 100644
--- a/src/DynareFlex.ll
+++ b/src/DynareFlex.ll
@@ -193,6 +193,7 @@ DATE -?[0-9]+([ya]|m([1-9]|1[0-2])|q[1-4])
 <INITIAL>perfect_foresight_with_expectation_errors_solver {BEGIN DYNARE_STATEMENT; return token::PERFECT_FORESIGHT_WITH_EXPECTATION_ERRORS_SOLVER;}
 <INITIAL>compilation_setup {BEGIN DYNARE_STATEMENT; return token::COMPILATION_SETUP;}
 <INITIAL>model_remove {BEGIN DYNARE_STATEMENT; return token::MODEL_REMOVE;}
+<INITIAL>model_options {BEGIN DYNARE_STATEMENT; return token::MODEL_OPTIONS;}
 
 <DYNARE_STATEMENT>; {
   if (!sigma_e)
@@ -763,9 +764,9 @@ DATE -?[0-9]+([ya]|m([1-9]|1[0-2])|q[1-4])
 <DYNARE_BLOCK>corr {return token::CORR;}
 <DYNARE_BLOCK>periods {return token::PERIODS;}
 <DYNARE_BLOCK>scales {return token::SCALES;}
-<DYNARE_BLOCK>cutoff {return token::CUTOFF;}
-<DYNARE_BLOCK>mfs	{return token::MFS;}
-<DYNARE_BLOCK>balanced_growth_test_tol {return token::BALANCED_GROWTH_TEST_TOL;}
+<DYNARE_STATEMENT,DYNARE_BLOCK>cutoff {return token::CUTOFF;}
+<DYNARE_STATEMENT,DYNARE_BLOCK>mfs {return token::MFS;}
+<DYNARE_STATEMENT,DYNARE_BLOCK>balanced_growth_test_tol {return token::BALANCED_GROWTH_TEST_TOL;}
 <DYNARE_BLOCK>gamma_pdf {return token::GAMMA_PDF;}
 <DYNARE_BLOCK>beta_pdf {return token::BETA_PDF;}
 <DYNARE_BLOCK>normal_pdf {return token::NORMAL_PDF;}
@@ -881,13 +882,13 @@ DATE -?[0-9]+([ya]|m([1-9]|1[0-2])|q[1-4])
 <DYNARE_STATEMENT>\\ {return Dynare::parser::token_type (yytext[0]);}
 <DYNARE_STATEMENT>\' {return Dynare::parser::token_type (yytext[0]);}
 
-<DYNARE_BLOCK>use_dll {return token::USE_DLL;}
-<DYNARE_BLOCK>block {return token::BLOCK;}
-<DYNARE_BLOCK>bytecode {return token::BYTECODE;}
+<DYNARE_STATEMENT,DYNARE_BLOCK>use_dll {return token::USE_DLL;}
+<DYNARE_STATEMENT,DYNARE_BLOCK>block {return token::BLOCK;}
+<DYNARE_STATEMENT,DYNARE_BLOCK>bytecode {return token::BYTECODE;}
 <DYNARE_BLOCK>all_values_required {return token::ALL_VALUES_REQUIRED;}
-<DYNARE_BLOCK>no_static {return token::NO_STATIC;}
-<DYNARE_BLOCK>differentiate_forward_vars {return token::DIFFERENTIATE_FORWARD_VARS;}
-<DYNARE_BLOCK>parallel_local_files {return token::PARALLEL_LOCAL_FILES;}
+<DYNARE_STATEMENT,DYNARE_BLOCK>no_static {return token::NO_STATIC;}
+<DYNARE_STATEMENT,DYNARE_BLOCK>differentiate_forward_vars {return token::DIFFERENTIATE_FORWARD_VARS;}
+<DYNARE_STATEMENT,DYNARE_BLOCK>parallel_local_files {return token::PARALLEL_LOCAL_FILES;}
 
 <DYNARE_STATEMENT,DYNARE_BLOCK>linear {return token::LINEAR;}