diff --git a/src/ComputingTasks.cc b/src/ComputingTasks.cc
index 1a70427b899881087cd1247a0317abed5247b7d7..f3b3fa8040508ebcfff9bd32b7927a4ad714fb91 100644
--- a/src/ComputingTasks.cc
+++ b/src/ComputingTasks.cc
@@ -308,31 +308,17 @@ VarModelStatement::fillVarModelInfoFromEquations(vector<int> &eqnumber_arg, vect
        it != rhs_by_eq.end(); it++)
     for (set<pair<int, int> >::const_iterator it1 = it->begin();
          it1 != it->end(); it1++)
-      if (find(lhs.begin(), lhs.end(), it1->first) == lhs.end()
-          && find(orig_diff_var.begin(), orig_diff_var.end(), it1->first) == orig_diff_var.end())
-        {/*
-          cerr << "ERROR " << name << ": " << symbol_table.getName(it1->first)
-               << " cannot appear in the VAR because it does not appear on the LHS" << endl;
-          exit(EXIT_FAILURE);
-         */
-        }
-      else
-        {
-          map<int, set<int> >::iterator mit = rhs.find(abs(it1->second));
-          if (mit == rhs.end())
-            {
-              if (it1->second > 0)
-                {
-                  cerr << "ERROR " << name << ": you cannot have a variable with a lead in a VAR" << endl;
-                  exit(EXIT_FAILURE);
-                }
-              set<int> si;
-              si.insert(it1->first);
-              rhs[abs(it1->second)] = si;
-            }
-          else
-            mit->second.insert(it1->first);
-        }
+      {
+        map<int, set<int> >::iterator mit = rhs.find(abs(it1->second));
+        if (mit == rhs.end())
+          {
+            set<int> si;
+            si.insert(it1->first);
+            rhs[abs(it1->second)] = si;
+          }
+        else
+          mit->second.insert(it1->first);
+      }
 }
 
 void
@@ -341,7 +327,6 @@ VarModelStatement::getVarModelName(string &var_model_name) const
   var_model_name = name;
 }
 
-
 void
 VarModelStatement::getVarModelRHS(map<int, set<int > > &rhs_arg) const
 {
@@ -386,45 +371,31 @@ VarModelStatement::writeOutput(ostream &output, const string &basename, bool min
         output << " ";
       output << it->first;
     }
-  output << "];" << endl;
-  int i = 1;
-  for (map<int, set<int> >::const_iterator it = rhs.begin();
-       it != rhs.end(); it++, i++)
-    {
-      output << "options_.var.rhs.vars_at_lag{" << i << "} = [";
-      for (set<int>::const_iterator it1 = it->second.begin();
-           it1 != it->second.end(); it1++)
-        {
-          if (it1 != it->second.begin())
-            output << " ";
-          output << symbol_table.getTypeSpecificID(*it1) + 1;
-        }
-      output << "];" << endl;
-    }
-  output << "options_.var.nonstationary = logical([";
+  output << "];" << endl
+         << "options_.var.nonstationary = [";
   for (vector<bool>::const_iterator it = nonstationary.begin();
        it != nonstationary.end(); it++)
     {
       if (it != nonstationary.begin())
         output << " ";
       if (*it)
-        output << "1";
+        output << "true";
       else
-        output << "0";
+        output << "false";
     }
-  output << "]);" << endl
-         << "options_.var.diff = logical([";
+  output << "];" << endl
+         << "options_.var.diff = [";
   for (vector<bool>::const_iterator it = diff.begin();
        it != diff.end(); it++)
     {
       if (it != diff.begin())
         output << " ";
       if (*it)
-        output << "1";
+        output << "true";
       else
-        output << "0";
+        output << "false";
     }
-  output << "]);" << endl
+  output << "];" << endl
          << "options_.var.orig_diff_var = [";
   for (vector<int>::const_iterator it = orig_diff_var.begin();
        it != orig_diff_var.end(); it++)
@@ -437,7 +408,7 @@ VarModelStatement::writeOutput(ostream &output, const string &basename, bool min
         output << symbol_table.getTypeSpecificID(*it) + 1;
     }
   output << "];" << endl;
-  i = 1;
+  int i = 1;
   for (vector<set<pair<int, int > > >::const_iterator it = rhs_by_eq.begin();
        it != rhs_by_eq.end(); it++, i++)
     {
diff --git a/src/DynamicModel.cc b/src/DynamicModel.cc
index 3eb18aa3d17dba318775dc12ac2ae66e4875f817..50cc6d33f1c808bee7504420447fe444563e4ceb 100644
--- a/src/DynamicModel.cc
+++ b/src/DynamicModel.cc
@@ -3244,19 +3244,19 @@ DynamicModel::getVarModelVariablesFromEqTags(vector<string> &var_model_eqtags,
   for (vector<string>::const_iterator itvareqs = var_model_eqtags.begin();
        itvareqs != var_model_eqtags.end(); itvareqs++)
     {
-      int eqnumber_int = -1;
+      int eqn = -1;
       set<pair<int, int> > lhs_set, lhs_tmp_set, rhs_set;
       string eqtag (*itvareqs);
       for (vector<pair<int, pair<string, string> > >::const_iterator iteqtag =
              equation_tags.begin(); iteqtag != equation_tags.end(); iteqtag++)
-        if (iteqtag->second.first.compare("name") == 0
-            && iteqtag->second.second.compare(eqtag) == 0)
+        if (iteqtag->second.first == "name"
+            && iteqtag->second.second == eqtag)
           {
-            eqnumber_int = iteqtag->first;
+            eqn = iteqtag->first;
             break;
           }
 
-      if (eqnumber_int == -1)
+      if (eqn == -1)
         {
           cerr << "ERROR: equation tag '" << eqtag << "' not found" << endl;
           exit(EXIT_FAILURE);
@@ -3265,42 +3265,52 @@ DynamicModel::getVarModelVariablesFromEqTags(vector<string> &var_model_eqtags,
       bool nonstationary_bool = false;
       for (vector<pair<int, pair<string, string> > >::const_iterator iteqtag =
              equation_tags.begin(); iteqtag != equation_tags.end(); iteqtag++)
-        if (iteqtag->first == eqnumber_int)
-          if (iteqtag->second.first.compare("data_type") == 0
-              && iteqtag->second.second.compare("nonstationary") == 0)
+        if (iteqtag->first == eqn)
+          if (iteqtag->second.first == "data_type"
+              && iteqtag->second.second == "nonstationary")
             {
               nonstationary_bool = true;
               break;
             }
+      nonstationary.push_back(nonstationary_bool);
 
-      equations[eqnumber_int]->get_arg1()->collectDynamicVariables(eEndogenous, lhs_set);
-      equations[eqnumber_int]->get_arg1()->collectDynamicVariables(eExogenous, lhs_tmp_set);
-      equations[eqnumber_int]->get_arg1()->collectDynamicVariables(eParameter, lhs_tmp_set);
+      equations[eqn]->get_arg1()->collectDynamicVariables(eEndogenous, lhs_set);
+      equations[eqn]->get_arg1()->collectDynamicVariables(eExogenous, lhs_tmp_set);
+      equations[eqn]->get_arg1()->collectDynamicVariables(eParameter, lhs_tmp_set);
 
       if (lhs_set.size() != 1 || !lhs_tmp_set.empty())
         {
-          cerr << "ERROR: A VAR may only have one endogenous variable on the LHS" << endl;
+          cerr << "ERROR: in Equation " << eqtag
+               << ". A VAR may only have one endogenous variable on the LHS. " << endl;
           exit(EXIT_FAILURE);
         }
 
       set<pair<int, int> >::const_iterator it = lhs_set.begin();
       if (it->second != 0)
         {
-          cerr << "ERROR: The variable on the LHS of a VAR may not appear with a lead or a lag" << endl;
+          cerr << "ERROR: in Equation " << eqtag
+               << ". The variable on the LHS of a VAR may not appear with a lead or a lag. "
+               << endl;
           exit(EXIT_FAILURE);
         }
 
-      eqnumber.push_back(eqnumber_int);
+      eqnumber.push_back(eqn);
       lhs.push_back(it->first);
-      nonstationary.push_back(nonstationary_bool);
 
-      equations[eqnumber_int]->get_arg2()->collectDynamicVariables(eEndogenous, rhs_set);
+      equations[eqn]->get_arg2()->collectDynamicVariables(eEndogenous, rhs_set);
+      for (it = rhs_set.begin(); it != rhs_set.end(); it++)
+        if (it->second > 0)
+          {
+            cerr << "ERROR: in Equation " << eqtag
+                 << ". A VAR may not have leaded or contemporaneous variables on the RHS. " << endl;
+            exit(EXIT_FAILURE);
+          }
       rhs.push_back(rhs_set);
     }
 }
 
 void
-DynamicModel::getDiffInfo(vector<int> &eqnumber, vector<bool> &diff, vector<int> &orig_diff_var) const
+DynamicModel::getVarLhsDiffInfo(vector<int> &eqnumber, vector<bool> &diff, vector<int> &orig_diff_var) const
 {
   for (vector<int>::const_iterator it = eqnumber.begin();
        it != eqnumber.end(); it++)
@@ -3310,13 +3320,12 @@ DynamicModel::getDiffInfo(vector<int> &eqnumber, vector<bool> &diff, vector<int>
         {
           set<pair<int, int> > diff_set;
           equations[*it]->get_arg1()->collectDynamicVariables(eEndogenous, diff_set);
-          if (diff_set.empty() || diff_set.size() != 1)
+          if (diff_set.size() != 1)
             {
-              cerr << "ERROR: problem getting variable for diff operator in equation " << *it << endl;
+              cerr << "ERROR: problem getting variable for LHS diff operator in equation " << *it << endl;
               exit(EXIT_FAILURE);
             }
-          set<pair<int, int> >::const_iterator it1 = diff_set.begin();
-          orig_diff_var.push_back(it1->first);
+          orig_diff_var.push_back(diff_set.begin()->first);
         }
       else
         orig_diff_var.push_back(-1);
diff --git a/src/DynamicModel.hh b/src/DynamicModel.hh
index ad41e03f5f9c7b2dead60ab4a4bb761296cf3a91..58f4d90fa6c770c9155652ee14b7a67d599ab072 100644
--- a/src/DynamicModel.hh
+++ b/src/DynamicModel.hh
@@ -294,7 +294,7 @@ public:
                                       vector<bool> &nonstationary) const;
 
   // Get equtaino information on diff operator
-  void getDiffInfo(vector<int> &eqnumber, vector<bool> &diff, vector<int> &orig_diff_var) const;
+  void getVarLhsDiffInfo(vector<int> &eqnumber, vector<bool> &diff, vector<int> &orig_diff_var) const;
 
   //! Set indices for var expectation in dynamic model file
   void setVarExpectationIndices(map<string, pair<SymbolList, int> > &var_model_info);
diff --git a/src/ExprNode.cc b/src/ExprNode.cc
index f6393c7d49a6ab442f4f40abde4cb67ecd378af6..f0cabb88ac99babd1adf24afb99ca99bc10d089e 100644
--- a/src/ExprNode.cc
+++ b/src/ExprNode.cc
@@ -4725,21 +4725,22 @@ BinaryOpNode::walkPacParametersHelper(const expr_t arg1, const expr_t arg2,
                                       set<pair<int, pair<int, int> > > &params_and_vals) const
 {
   set<int> params;
-  set<pair<int, int> > endogs;
   arg1->collectVariables(eParameter, params);
+  if (params.size() != 1)
+    return;
+
+  set<pair<int, int> > endogs;
   arg2->collectDynamicVariables(eEndogenous, endogs);
-  if (params.size() == 1)
-    if (endogs.size() == 1)
-      params_and_vals.insert(make_pair(*(params.begin()), *(endogs.begin())));
-    else
-      if (endogs.size() == 2)
+  if (endogs.size() == 1)
+    params_and_vals.insert(make_pair(*(params.begin()), *(endogs.begin())));
+  else if (endogs.size() == 2)
+    {
+      BinaryOpNode *testarg2 = dynamic_cast<BinaryOpNode *>(arg2);
+      if (testarg2 != NULL && testarg2->get_op_code() == oMinus)
         {
-          BinaryOpNode *testarg2 = dynamic_cast<BinaryOpNode *>(arg2);
           VariableNode *test_arg1 = dynamic_cast<VariableNode *>(testarg2->get_arg1());
           VariableNode *test_arg2 = dynamic_cast<VariableNode *>(testarg2->get_arg2());
-          if (testarg2 != NULL && testarg2->get_op_code() == oMinus
-              && test_arg1 != NULL &&test_arg2 != NULL
-              && lhs.first != -1)
+          if (test_arg1 != NULL && test_arg2 != NULL && lhs.first != -1)
             {
               int find_symb_id = -1;
               try
@@ -4766,6 +4767,7 @@ BinaryOpNode::walkPacParametersHelper(const expr_t arg1, const expr_t arg2,
                 }
             }
         }
+    }
 }
 
 void
diff --git a/src/ModFile.cc b/src/ModFile.cc
index b5fd81d87ba1cd0f32bf056b72a0c45d89c5abef..244dd061b28f81b96915a22f70dab9fea72bd009 100644
--- a/src/ModFile.cc
+++ b/src/ModFile.cc
@@ -384,8 +384,9 @@ ModFile::transformPass(bool nostrict, bool stochastic, bool compute_xrefs, const
               vector<bool> nonstationary, diff;
               dynamic_model.getVarModelVariablesFromEqTags(var_model_eqtags,
                                                            eqnumber, lhs, rhs, nonstationary);
-              original_model.getDiffInfo(eqnumber, diff, orig_diff_var);
-              vms->fillVarModelInfoFromEquations(eqnumber, lhs, rhs, nonstationary, diff, orig_diff_var);
+              original_model.getVarLhsDiffInfo(eqnumber, diff, orig_diff_var);
+              vms->fillVarModelInfoFromEquations(eqnumber, lhs, rhs, nonstationary,
+                                                 diff, orig_diff_var);
               string var_model_name;
               map<int, set<int > > rhs_pac;
               vms->getVarModelName(var_model_name);