diff --git a/DynareBison.yy b/DynareBison.yy
index 47e6129c0ae5a2eb10be83ad0b2fe346b49db05f..aab4a95a1171546de912eee96284a1e52488427d 100644
--- a/DynareBison.yy
+++ b/DynareBison.yy
@@ -153,7 +153,7 @@ class ParsingDriver;
 %token SBVAR TREND_VAR DEFLATOR GROWTH_FACTOR MS_IRF MS_VARIANCE_DECOMPOSITION
 %token MS_ESTIMATION MS_SIMULATION MS_COMPUTE_MDD MS_COMPUTE_PROBABILITIES MS_FORECAST
 %token SVAR_IDENTIFICATION EQUATION EXCLUSION LAG UPPER_CHOLESKY LOWER_CHOLESKY MONTHLY QUARTERLY
-%token MARKOV_SWITCHING CHAIN DURATION NUMBER_OF_REGIMES
+%token MARKOV_SWITCHING CHAIN DURATION NUMBER_OF_REGIMES NUMBER_OF_LAGS
 %token SVAR COEFF COEFFICIENTS VARIANCES CONSTANTS EQUATIONS
 %token EXTERNAL_FUNCTION EXT_FUNC_NAME EXT_FUNC_NARGS FIRST_DERIV_PROVIDED SECOND_DERIV_PROVIDED
 %token SELECTED_VARIABLES_ONLY COVA_COMPUTE SIMULATION_FILE_TAG FILE_TAG
@@ -844,6 +844,8 @@ ms_options : o_chain
            | o_duration
            | o_restrictions
            | o_number_of_regimes
+           | o_number_of_lags
+           | o_parameters
            ;
 
 svar : SVAR '(' svar_options_list ')' ';'
@@ -2700,6 +2702,8 @@ o_duration : DURATION EQUAL non_negative_number
              { driver.option_num("ms.duration",$3); }
            ;
 o_number_of_regimes : NUMBER_OF_REGIMES EQUAL INT_NUMBER { driver.option_num("ms.number_of_regimes",$3); };
+o_number_of_lags : NUMBER_OF_LAGS EQUAL INT_NUMBER { driver.option_num("ms.number_of_lags",$3); };
+o_parameters : PARAMETERS EQUAL '[' symbol_list ']' { driver.option_symbol_list("ms.parameters"); };
 o_coefficients : COEFFICIENTS { driver.option_str("ms.coefficients","svar_coefficients"); };
 o_variances : VARIANCES { driver.option_str("ms.variances","svar_variances"); };
 o_equations : EQUATIONS EQUAL vec_int
diff --git a/DynareFlex.ll b/DynareFlex.ll
index 68e4f018a6de4743dc7ae0ebcb98a543ad04c5ae..ab9770ab45bf6096ae4776c838dda8cb6d0ea9e1 100644
--- a/DynareFlex.ll
+++ b/DynareFlex.ll
@@ -602,6 +602,7 @@ DATE -?[0-9]+([YyAa]|[Mm]([1-9]|1[0-2])|[Qq][1-4]|[Ww]([1-9]{1}|[1-4][0-9]|5[0-2
 <DYNARE_STATEMENT,DYNARE_BLOCK>upper_cholesky {return token::UPPER_CHOLESKY;}
 <DYNARE_STATEMENT,DYNARE_BLOCK>lower_cholesky {return token::LOWER_CHOLESKY;}
 <DYNARE_STATEMENT>chain {return token::CHAIN;}
+<DYNARE_STATEMENT>number_of_lags {return token::NUMBER_OF_LAGS;}
 <DYNARE_STATEMENT>number_of_regimes {return token::NUMBER_OF_REGIMES;}
 <DYNARE_STATEMENT>duration {return token::DURATION;}
 <DYNARE_STATEMENT>coefficients {return token::COEFFICIENTS;}
diff --git a/ParsingDriver.cc b/ParsingDriver.cc
index b7960aac2ad1cfbf8bce018710d270ecb5ebae6e..c105f81cf7c941fffd9cc0778c9f345a30f1a25d 100644
--- a/ParsingDriver.cc
+++ b/ParsingDriver.cc
@@ -1138,6 +1138,15 @@ ParsingDriver::option_symbol_list(const string &name_option)
           error("Variables passed to irf_shocks must be exogenous. Caused by: " + *it);
     }
 
+  if (name_option.compare("ms.parameters")==0)
+    {
+      vector<string> parameters = symbol_list.get_symbols();
+      for (vector<string>::const_iterator it = parameters.begin();
+           it != parameters.end(); it++)
+        if (mod_file->symbol_table.getType(*it) != eParameter)
+          error("Variables passed to the parameters option of the markov_switching statement must be parameters. Caused by: " + *it);
+    }
+
   options_list.symbol_list_options[name_option] = symbol_list;
   symbol_list.clear();
 }