diff --git a/preprocessor/ComputingTasks.cc b/preprocessor/ComputingTasks.cc
index 38b0e8ba0af4873554b644226e67689bc110c55f..e5fbb474ba3ae629d51ee21b680bd3b67bf4761b 100644
--- a/preprocessor/ComputingTasks.cc
+++ b/preprocessor/ComputingTasks.cc
@@ -629,6 +629,12 @@ OsrParamsStatement::OsrParamsStatement(const SymbolList &symbol_list_arg) :
 {
 }
 
+void
+OsrParamsStatement::checkPass(ModFileStructure &mod_file_struct)
+{
+  mod_file_struct.osr_params_present = true;
+}
+
 void
 OsrParamsStatement::writeOutput(ostream &output, const string &basename) const
 {
@@ -681,6 +687,12 @@ OptimWeightsStatement::OptimWeightsStatement(const var_weights_t &var_weights_ar
 {
 }
 
+void
+OptimWeightsStatement::checkPass(ModFileStructure &mod_file_struct)
+{
+  mod_file_struct.optim_weights_present = true;
+}
+
 void
 OptimWeightsStatement::writeOutput(ostream &output, const string &basename) const
 {
diff --git a/preprocessor/ComputingTasks.hh b/preprocessor/ComputingTasks.hh
index fd23cdd5177e37921fa4df05ba2b70041e17848a..e265e95810496505784b666dadd2588fbac1c0b0 100644
--- a/preprocessor/ComputingTasks.hh
+++ b/preprocessor/ComputingTasks.hh
@@ -185,6 +185,7 @@ private:
   const SymbolList symbol_list;
 public:
   OsrParamsStatement(const SymbolList &symbol_list_arg);
+  virtual void checkPass(ModFileStructure &mod_file_struct);
   virtual void writeOutput(ostream &output, const string &basename) const;
 };
 
@@ -308,6 +309,7 @@ public:
   OptimWeightsStatement(const var_weights_t &var_weights_arg,
                         const covar_weights_t &covar_weights_arg,
                         const SymbolTable &symbol_table_arg);
+  virtual void checkPass(ModFileStructure &mod_file_struct);
   virtual void writeOutput(ostream &output, const string &basename) const;
 };
 
diff --git a/preprocessor/ModFile.cc b/preprocessor/ModFile.cc
index 1499e8dc8b26cb61efea22aa905f4e14a139b978..2138c7e2a263134d4710520210dff24839f52fef 100644
--- a/preprocessor/ModFile.cc
+++ b/preprocessor/ModFile.cc
@@ -130,6 +130,14 @@ ModFile::checkPass()
       exit(EXIT_FAILURE);
     }
 
+  if ((mod_file_struct.osr_present && (!mod_file_struct.osr_params_present || !mod_file_struct.optim_weights_present))
+      || ((!mod_file_struct.osr_present || !mod_file_struct.osr_params_present) && mod_file_struct.optim_weights_present)
+      || ((!mod_file_struct.osr_present || !mod_file_struct.optim_weights_present) && mod_file_struct.osr_params_present))
+    {
+      cerr << "ERROR: The osr statement must be used with osr_params and optim_weights." << endl;
+      exit(EXIT_FAILURE);
+    }
+
   if (mod_file_struct.simul_present && stochastic_statement_present)
     {
       cerr << "ERROR: A .mod file cannot contain both a simul command and one of {stoch_simul, estimation, osr, ramsey_policy}" << endl;
diff --git a/preprocessor/Statement.cc b/preprocessor/Statement.cc
index c9b294522146efb6525966499c2e9b387849e3cf..f8b4936bca47b4e89652247b4f8b921028e56018 100644
--- a/preprocessor/Statement.cc
+++ b/preprocessor/Statement.cc
@@ -26,6 +26,8 @@ ModFileStructure::ModFileStructure() :
   stoch_simul_present(false),
   estimation_present(false),
   osr_present(false),
+  osr_params_present(false),
+  optim_weights_present(false),
   ramsey_policy_present(false),
   planner_objective_present(false),
   order_option(0),
diff --git a/preprocessor/Statement.hh b/preprocessor/Statement.hh
index 2778771bb2cd3489a1dbf5a56e658fd9ccd29ca1..a16f1646a0bada55b9a19eb3cb1a371d6c239d41 100644
--- a/preprocessor/Statement.hh
+++ b/preprocessor/Statement.hh
@@ -44,6 +44,10 @@ public:
   bool estimation_present;
   //! Whether an osr statement is present
   bool osr_present;
+  //! Whether an osr params statement is present
+  bool osr_params_present;
+  //! Whether an optim weight statement is present
+  bool optim_weights_present;
   //! Whether a ramsey_policy statement is present
   bool ramsey_policy_present;
   //! Whether a planner_objective statement is present