diff --git a/DynamicModel.cc b/DynamicModel.cc
index 4c97c64c5b44450717730d5b40d95dfd5fdf5224..10024fc69f0932b67c03a101edbd884fd151625d 100644
--- a/DynamicModel.cc
+++ b/DynamicModel.cc
@@ -3388,10 +3388,11 @@ DynamicModel::walkPacParameters()
   for (size_t i = 0; i < equations.size(); i++)
     {
       bool pac_encountered = false;
+      pair<int, int> lhs (-1, -1);
       set<pair<int, pair<int, int> > > params_and_vals;
-      equations[i]->walkPacParameters(pac_encountered, params_and_vals);
+      equations[i]->walkPacParameters(pac_encountered, lhs, params_and_vals);
       if (pac_encountered)
-        equations[i]->addParamInfoToPac(params_and_vals);
+        equations[i]->addParamInfoToPac(lhs, params_and_vals);
     }
 }
 
diff --git a/ExprNode.cc b/ExprNode.cc
index 402519362e35d488e84872cacfe03eb4b329b95b..9a4ddd7168207eef8d296cd064de553f98740ee8 100644
--- a/ExprNode.cc
+++ b/ExprNode.cc
@@ -579,12 +579,12 @@ NumConstNode::setVarExpectationIndex(map<string, pair<SymbolList, int> > &var_mo
 }
 
 void
-NumConstNode::walkPacParameters(bool &pac_encountered, set<pair<int, pair<int, int> > > &params_and_vals) const
+NumConstNode::walkPacParameters(bool &pac_encountered, pair<int, int> &lhs, set<pair<int, pair<int, int> > > &params_and_vals) const
 {
 }
 
 void
-NumConstNode::addParamInfoToPac(set<pair<int, pair<int, int> > > &params_and_vals_arg)
+NumConstNode::addParamInfoToPac(pair<int, int> &lhs_arg, set<pair<int, pair<int, int> > > &params_and_vals_arg)
 {
 }
 
@@ -1645,12 +1645,12 @@ VariableNode::setVarExpectationIndex(map<string, pair<SymbolList, int> > &var_mo
 }
 
 void
-VariableNode::walkPacParameters(bool &pac_encountered, set<pair<int, pair<int, int> > > &params_and_vals) const
+VariableNode::walkPacParameters(bool &pac_encountered, pair<int, int> &lhs, set<pair<int, pair<int, int> > > &params_and_vals) const
 {
 }
 
 void
-VariableNode::addParamInfoToPac(set<pair<int, pair<int, int> > > &params_and_vals_arg)
+VariableNode::addParamInfoToPac(pair<int, int> &lhs_arg, set<pair<int, pair<int, int> > > &params_and_vals_arg)
 {
 }
 
@@ -3052,15 +3052,15 @@ UnaryOpNode::setVarExpectationIndex(map<string, pair<SymbolList, int> > &var_mod
 }
 
 void
-UnaryOpNode::walkPacParameters(bool &pac_encountered, set<pair<int, pair<int, int> > > &params_and_vals) const
+UnaryOpNode::walkPacParameters(bool &pac_encountered, pair<int, int> &lhs, set<pair<int, pair<int, int> > > &params_and_vals) const
 {
-  arg->walkPacParameters(pac_encountered, params_and_vals);
+  arg->walkPacParameters(pac_encountered, lhs, params_and_vals);
 }
 
 void
-UnaryOpNode::addParamInfoToPac(set<pair<int, pair<int, int> > > &params_and_vals_arg)
+UnaryOpNode::addParamInfoToPac(pair<int, int> &lhs_arg, set<pair<int, pair<int, int> > > &params_and_vals_arg)
 {
-  arg->addParamInfoToPac(params_and_vals_arg);
+  arg->addParamInfoToPac(lhs_arg, params_and_vals_arg);
 }
 
 void
@@ -4600,7 +4600,7 @@ BinaryOpNode::setVarExpectationIndex(map<string, pair<SymbolList, int> > &var_mo
 }
 
 void
-BinaryOpNode::walkPacParameters(bool &pac_encountered, set<pair<int, pair<int, int> > > &params_and_vals) const
+BinaryOpNode::walkPacParameters(bool &pac_encountered, pair<int, int> &lhs, set<pair<int, pair<int, int> > > &params_and_vals) const
 {
   if (op_code == oTimes)
     {
@@ -4626,16 +4626,23 @@ BinaryOpNode::walkPacParameters(bool &pac_encountered, set<pair<int, pair<int, i
             }
         }
     }
+  else if (op_code == oEqual)
+    {
+      set<pair<int, int> > general_lhs;
+      arg1->collectDynamicVariables(eEndogenous, general_lhs);
+      if (general_lhs.size() == 1)
+        lhs = *(general_lhs.begin());
+    }
 
-  arg1->walkPacParameters(pac_encountered, params_and_vals);
-  arg2->walkPacParameters(pac_encountered, params_and_vals);
+  arg1->walkPacParameters(pac_encountered, lhs, params_and_vals);
+  arg2->walkPacParameters(pac_encountered, lhs, params_and_vals);
 }
 
 void
-BinaryOpNode::addParamInfoToPac(set<pair<int, pair<int, int> > > &params_and_vals_arg)
+BinaryOpNode::addParamInfoToPac(pair<int, int> &lhs_arg, set<pair<int, pair<int, int> > > &params_and_vals_arg)
 {
-  arg1->addParamInfoToPac(params_and_vals_arg);
-  arg2->addParamInfoToPac(params_and_vals_arg);
+  arg1->addParamInfoToPac(lhs_arg, params_and_vals_arg);
+  arg2->addParamInfoToPac(lhs_arg, params_and_vals_arg);
 }
 
 void
@@ -5415,19 +5422,19 @@ TrinaryOpNode::setVarExpectationIndex(map<string, pair<SymbolList, int> > &var_m
 }
 
 void
-TrinaryOpNode::walkPacParameters(bool &pac_encountered, set<pair<int, pair<int, int> > > &params_and_vals) const
+TrinaryOpNode::walkPacParameters(bool &pac_encountered, pair<int, int> &lhs, set<pair<int, pair<int, int> > > &params_and_vals) const
 {
-  arg1->walkPacParameters(pac_encountered, params_and_vals);
-  arg2->walkPacParameters(pac_encountered, params_and_vals);
-  arg3->walkPacParameters(pac_encountered, params_and_vals);
+  arg1->walkPacParameters(pac_encountered, lhs, params_and_vals);
+  arg2->walkPacParameters(pac_encountered, lhs, params_and_vals);
+  arg3->walkPacParameters(pac_encountered, lhs, params_and_vals);
 }
 
 void
-TrinaryOpNode::addParamInfoToPac(set<pair<int, pair<int, int> > > &params_and_vals_arg)
+TrinaryOpNode::addParamInfoToPac(pair<int, int> &lhs_arg, set<pair<int, pair<int, int> > > &params_and_vals_arg)
 {
-  arg1->addParamInfoToPac(params_and_vals_arg);
-  arg2->addParamInfoToPac(params_and_vals_arg);
-  arg3->addParamInfoToPac(params_and_vals_arg);
+  arg1->addParamInfoToPac(lhs_arg, params_and_vals_arg);
+  arg2->addParamInfoToPac(lhs_arg, params_and_vals_arg);
+  arg3->addParamInfoToPac(lhs_arg, params_and_vals_arg);
 }
 
 void
@@ -5805,17 +5812,17 @@ AbstractExternalFunctionNode::setVarExpectationIndex(map<string, pair<SymbolList
 }
 
 void
-AbstractExternalFunctionNode::walkPacParameters(bool &pac_encountered, set<pair<int, pair<int, int> > > &params_and_vals) const
+AbstractExternalFunctionNode::walkPacParameters(bool &pac_encountered, pair<int, int> &lhs, set<pair<int, pair<int, int> > > &params_and_vals) const
 {
   for (vector<expr_t>::const_iterator it = arguments.begin(); it != arguments.end(); it++)
-    (*it)->walkPacParameters(pac_encountered, params_and_vals);
+    (*it)->walkPacParameters(pac_encountered, lhs, params_and_vals);
 }
 
 void
-AbstractExternalFunctionNode::addParamInfoToPac(set<pair<int, pair<int, int> > > &params_and_vals_arg)
+AbstractExternalFunctionNode::addParamInfoToPac(pair<int, int> &lhs_arg, set<pair<int, pair<int, int> > > &params_and_vals_arg)
 {
   for (vector<expr_t>::const_iterator it = arguments.begin(); it != arguments.end(); it++)
-    (*it)->addParamInfoToPac(params_and_vals_arg);
+    (*it)->addParamInfoToPac(lhs_arg, params_and_vals_arg);
 }
 
 void
@@ -7290,12 +7297,12 @@ VarExpectationNode::setVarExpectationIndex(map<string, pair<SymbolList, int> > &
 }
 
 void
-VarExpectationNode::walkPacParameters(bool &pac_encountered, set<pair<int, pair<int, int> > > &params_and_vals) const
+VarExpectationNode::walkPacParameters(bool &pac_encountered, pair<int, int> &lhs, set<pair<int, pair<int, int> > > &params_and_vals) const
 {
 }
 
 void
-VarExpectationNode::addParamInfoToPac(set<pair<int, pair<int, int> > > &params_and_vals_arg)
+VarExpectationNode::addParamInfoToPac(pair<int, int> &lhs_arg, set<pair<int, pair<int, int> > > &params_and_vals_arg)
 {
 }
 
@@ -7394,7 +7401,10 @@ PacExpectationNode::writeOutput(ostream &output, ExprNodeOutputType output_type,
   output <<"M_.pac_expectation." << model_name << ".var_model_name = '" << var_model_name << "';" << endl
          << "M_.pac_expectation." << model_name << ".discount_index = "
          << datatree.symbol_table.getTypeSpecificID(discount_symb_id) + 1 << ";" << endl
-         << "M_.pac_expectation." << model_name << ".equation_number = " << equation_number + 1 << ";" << endl;
+         << "M_.pac_expectation." << model_name << ".equation_number = " << equation_number + 1 << ";" << endl
+         << "M_.pac_expectation." << model_name << ".lhs_var = "
+         << datatree.symbol_table.getTypeSpecificID(lhs_pac_var.first) + 1 << ";" << endl
+         << "M_.pac_expectation." << model_name << ".lhs_lag = " << lhs_pac_var.second << ";" << endl;
 
   if (growth_symb_id >= 0)
     output << "M_.pac_expectation." << model_name << ".growth_neutrality_param_index = "
@@ -7714,14 +7724,27 @@ PacExpectationNode::writeJsonOutput(ostream &output,
 }
 
 void
-PacExpectationNode::walkPacParameters(bool &pac_encountered, set<pair<int, pair<int, int> > > &params_and_vals) const
+PacExpectationNode::walkPacParameters(bool &pac_encountered, pair<int, int> &lhs, set<pair<int, pair<int, int> > > &params_and_vals) const
 {
   pac_encountered = true;
 }
 
 void
-PacExpectationNode::addParamInfoToPac(set<pair<int, pair<int, int> > > &params_and_vals_arg)
+PacExpectationNode::addParamInfoToPac(pair<int, int> &lhs_arg, set<pair<int, pair<int, int> > > &params_and_vals_arg)
 {
+  if (lhs_arg.first == -1)
+    {
+      cerr << "Pac Expectation: error in obtaining LHS varibale." << endl;
+      exit(EXIT_FAILURE);
+    }
+
+  if (params_and_vals_arg.size() != 2)
+    {
+      cerr << "Pac Expectation: error in obtaining RHS parameters." << endl;
+      exit(EXIT_FAILURE);
+    }
+
+  lhs_pac_var = lhs_arg;
   params_and_vals = params_and_vals_arg;
 }
 
diff --git a/ExprNode.hh b/ExprNode.hh
index b292b474daa690b95d3e932aba2b92bda9718ea3..f674887ebd4fd9693a198000dbd8e48cfaf2d6bb 100644
--- a/ExprNode.hh
+++ b/ExprNode.hh
@@ -490,10 +490,10 @@ class ExprNode
       virtual bool isVarModelReferenced(const string &model_info_name) const = 0;
 
       //! Fills parameter information related to PAC equation
-      virtual void walkPacParameters(bool &pac_encountered, set<pair<int, pair<int, int> > > &params_and_vals) const = 0;
+      virtual void walkPacParameters(bool &pac_encountered, pair<int, int> &lhs, set<pair<int, pair<int, int> > > &params_and_vals) const = 0;
 
       //! Adds PAC equation param info to pac_expectation
-      virtual void addParamInfoToPac(set<pair<int, pair<int, int> > > &params_and_vals_arg) = 0;
+      virtual void addParamInfoToPac(pair<int, int> &lhs_arg, set<pair<int, pair<int, int> > > &params_and_vals_arg) = 0;
 
       //! Fills var_model info for pac_expectation node
       virtual void fillPacExpectationVarInfo(string &var_model_name, vector<int> &lhs, map<int, set<int > > &rhs_arg, vector<bool> &nonstationary_arg, int equation_number_arg) = 0;
@@ -566,8 +566,8 @@ public:
   virtual expr_t removeTrendLeadLag(map<int, expr_t> trend_symbols_map) const;
   virtual bool isInStaticForm() const;
   virtual void setVarExpectationIndex(map<string, pair<SymbolList, int> > &var_model_info);
-  virtual void walkPacParameters(bool &pac_encountered, set<pair<int, pair<int, int> > > &params_and_vals) const;
-  virtual void addParamInfoToPac(set<pair<int, pair<int, int> > > &params_and_vals_arg);
+  virtual void walkPacParameters(bool &pac_encountered, pair<int, int> &lhs, set<pair<int, pair<int, int> > > &params_and_vals) const;
+  virtual void addParamInfoToPac(pair<int, int> &lhs_arg, set<pair<int, pair<int, int> > > &params_and_vals_arg);
   virtual void fillPacExpectationVarInfo(string &var_model_name_arg, vector<int> &lhs_arg, map<int, set<int > > &rhs_arg, vector<bool> &nonstationary_arg, int equation_number_arg);
   virtual bool isVarModelReferenced(const string &model_info_name) const;
   virtual void getEndosAndMaxLags(map<string, int> &model_endos_and_lags) const;
@@ -647,8 +647,8 @@ public:
   virtual expr_t removeTrendLeadLag(map<int, expr_t> trend_symbols_map) const;
   virtual bool isInStaticForm() const;
   virtual void setVarExpectationIndex(map<string, pair<SymbolList, int> > &var_model_info);
-  virtual void walkPacParameters(bool &pac_encountered, set<pair<int, pair<int, int> > > &params_and_vals) const;
-  virtual void addParamInfoToPac(set<pair<int, pair<int, int> > > &params_and_vals_arg);
+  virtual void walkPacParameters(bool &pac_encountered, pair<int, int> &lhs, set<pair<int, pair<int, int> > > &params_and_vals) const;
+  virtual void addParamInfoToPac(pair<int, int> &lhs_arg, set<pair<int, pair<int, int> > > &params_and_vals_arg);
   virtual void fillPacExpectationVarInfo(string &var_model_name_arg, vector<int> &lhs_arg, map<int, set<int > > &rhs_arg, vector<bool> &nonstationary_arg, int equation_number_arg);
   virtual bool isVarModelReferenced(const string &model_info_name) const;
   virtual void getEndosAndMaxLags(map<string, int> &model_endos_and_lags) const;
@@ -751,8 +751,8 @@ public:
   virtual expr_t removeTrendLeadLag(map<int, expr_t> trend_symbols_map) const;
   virtual bool isInStaticForm() const;
   virtual void setVarExpectationIndex(map<string, pair<SymbolList, int> > &var_model_info);
-  virtual void walkPacParameters(bool &pac_encountered, set<pair<int, pair<int, int> > > &params_and_vals) const;
-  virtual void addParamInfoToPac(set<pair<int, pair<int, int> > > &params_and_vals_arg);
+  virtual void walkPacParameters(bool &pac_encountered, pair<int, int> &lhs, set<pair<int, pair<int, int> > > &params_and_vals) const;
+  virtual void addParamInfoToPac(pair<int, int> &lhs_arg, set<pair<int, pair<int, int> > > &params_and_vals_arg);
   virtual void fillPacExpectationVarInfo(string &var_model_name_arg, vector<int> &lhs_arg, map<int, set<int > > &rhs_arg, vector<bool> &nonstationary_arg, int equation_number_arg);
   virtual bool isVarModelReferenced(const string &model_info_name) const;
   virtual void getEndosAndMaxLags(map<string, int> &model_endos_and_lags) const;
@@ -873,8 +873,8 @@ public:
   expr_t getNonZeroPartofEquation() const;
   virtual bool isInStaticForm() const;
   virtual void setVarExpectationIndex(map<string, pair<SymbolList, int> > &var_model_info);
-  virtual void walkPacParameters(bool &pac_encountered, set<pair<int, pair<int, int> > > &params_and_vals) const;
-  virtual void addParamInfoToPac(set<pair<int, pair<int, int> > > &params_and_vals_arg);
+  virtual void walkPacParameters(bool &pac_encountered, pair<int, int> &lhs, set<pair<int, pair<int, int> > > &params_and_vals) const;
+  virtual void addParamInfoToPac(pair<int, int> &lhs_arg, set<pair<int, pair<int, int> > > &params_and_vals_arg);
   virtual void fillPacExpectationVarInfo(string &var_model_name_arg, vector<int> &lhs_arg, map<int, set<int > > &rhs_arg, vector<bool> &nonstationary_arg, int equation_number_arg);
   virtual bool isVarModelReferenced(const string &model_info_name) const;
   virtual void getEndosAndMaxLags(map<string, int> &model_endos_and_lags) const;
@@ -963,8 +963,8 @@ public:
   virtual expr_t removeTrendLeadLag(map<int, expr_t> trend_symbols_map) const;
   virtual bool isInStaticForm() const;
   virtual void setVarExpectationIndex(map<string, pair<SymbolList, int> > &var_model_info);
-  virtual void walkPacParameters(bool &pac_encountered, set<pair<int, pair<int, int> > > &params_and_vals) const;
-  virtual void addParamInfoToPac(set<pair<int, pair<int, int> > > &params_and_vals_arg);
+  virtual void walkPacParameters(bool &pac_encountered, pair<int, int> &lhs, set<pair<int, pair<int, int> > > &params_and_vals) const;
+  virtual void addParamInfoToPac(pair<int, int> &lhs_arg, set<pair<int, pair<int, int> > > &params_and_vals_arg);
   virtual void fillPacExpectationVarInfo(string &var_model_name_arg, vector<int> &lhs_arg, map<int, set<int > > &rhs_arg, vector<bool> &nonstationary_arg, int equation_number_arg);
   virtual bool isVarModelReferenced(const string &model_info_name) const;
   virtual void getEndosAndMaxLags(map<string, int> &model_endos_and_lags) const;
@@ -1061,8 +1061,8 @@ public:
   virtual expr_t removeTrendLeadLag(map<int, expr_t> trend_symbols_map) const;
   virtual bool isInStaticForm() const;
   virtual void setVarExpectationIndex(map<string, pair<SymbolList, int> > &var_model_info);
-  virtual void walkPacParameters(bool &pac_encountered, set<pair<int, pair<int, int> > > &params_and_vals) const;
-  virtual void addParamInfoToPac(set<pair<int, pair<int, int> > > &params_and_vals_arg);
+  virtual void walkPacParameters(bool &pac_encountered, pair<int, int> &lhs, set<pair<int, pair<int, int> > > &params_and_vals) const;
+  virtual void addParamInfoToPac(pair<int, int> &lhs_arg, set<pair<int, pair<int, int> > > &params_and_vals_arg);
   virtual void fillPacExpectationVarInfo(string &var_model_name_arg, vector<int> &lhs_arg, map<int, set<int > > &rhs_arg, vector<bool> &nonstationary_arg, int equation_number_arg);
   virtual bool isVarModelReferenced(const string &model_info_name) const;
   virtual void getEndosAndMaxLags(map<string, int> &model_endos_and_lags) const;
@@ -1252,8 +1252,8 @@ public:
   virtual expr_t removeTrendLeadLag(map<int, expr_t> trend_symbols_map) const;
   virtual bool isInStaticForm() const;
   virtual void setVarExpectationIndex(map<string, pair<SymbolList, int> > &var_model_info);
-  virtual void walkPacParameters(bool &pac_encountered, set<pair<int, pair<int, int> > > &params_and_vals) const;
-  virtual void addParamInfoToPac(set<pair<int, pair<int, int> > > &params_and_vals_arg);
+  virtual void walkPacParameters(bool &pac_encountered, pair<int, int> &lhs, set<pair<int, pair<int, int> > > &params_and_vals) const;
+  virtual void addParamInfoToPac(pair<int, int> &lhs_arg, set<pair<int, pair<int, int> > > &params_and_vals_arg);
   virtual void fillPacExpectationVarInfo(string &var_model_name_arg, vector<int> &lhs_arg, map<int, set<int > > &rhs_arg, vector<bool> &nonstationary_arg, int equation_number_arg);
   virtual bool isVarModelReferenced(const string &model_info_name) const;
   virtual void getEndosAndMaxLags(map<string, int> &model_endos_and_lags) const;
@@ -1268,6 +1268,7 @@ private:
   const int discount_symb_id, growth_symb_id;
   bool stationary_vars_present, nonstationary_vars_present;
   vector<int> lhs;
+  pair<int, int> lhs_pac_var;
   map<int, set<int > > z_vec; // lag -> set< symb_id > (all vars that appear at a given lag)
   vector<int> h0_indices, h1_indices;
   int growth_param_index, equation_number;
@@ -1326,8 +1327,8 @@ public:
   virtual expr_t removeTrendLeadLag(map<int, expr_t> trend_symbols_map) const;
   virtual bool isInStaticForm() const;
   virtual void setVarExpectationIndex(map<string, pair<SymbolList, int> > &var_model_info);
-  virtual void walkPacParameters(bool &pac_encountered, set<pair<int, pair<int, int> > > &params_and_vals) const;
-  virtual void addParamInfoToPac(set<pair<int, pair<int, int> > > &params_and_vals_arg);
+  virtual void walkPacParameters(bool &pac_encountered, pair<int, int> &lhs, set<pair<int, pair<int, int> > > &params_and_vals) const;
+  virtual void addParamInfoToPac(pair<int, int> &lhs_arg, set<pair<int, pair<int, int> > > &params_and_vals_arg);
   virtual void fillPacExpectationVarInfo(string &var_model_name_arg, vector<int> &lhs_arg, map<int, set<int > > &rhs_arg, vector<bool> &nonstationary_arg, int equation_number_arg);
   virtual bool isVarModelReferenced(const string &model_info_name) const;
   virtual void getEndosAndMaxLags(map<string, int> &model_endos_and_lags) const;