diff --git a/src/DynamicModel.cc b/src/DynamicModel.cc
index bb4c0ef23c5c91f2d2765bae47af7e80ee5b0538..4a3d159c12c2f31beb05125c29ee47575b33cb5f 100644
--- a/src/DynamicModel.cc
+++ b/src/DynamicModel.cc
@@ -5586,24 +5586,24 @@ DynamicModel::findPacExpectationEquationNumbers(set<int> &eqnumbers) const
 }
 
 pair<lag_equivalence_table_t, ExprNode::subst_table_t>
-DynamicModel::substituteUnaryOps()
+DynamicModel::substituteUnaryOps(PacModelTable &pac_model_table)
 {
   vector<int> eqnumbers(equations.size());
   iota(eqnumbers.begin(), eqnumbers.end(), 0);
-  return substituteUnaryOps(eqnumbers);
+  return substituteUnaryOps(eqnumbers, pac_model_table);
 }
 
 pair<lag_equivalence_table_t, ExprNode::subst_table_t>
-DynamicModel::substituteUnaryOps(const set<string> &var_model_eqtags)
+DynamicModel::substituteUnaryOps(const set<string> &var_model_eqtags, PacModelTable &pac_model_table)
 {
   set<int> eqnumbers = getEquationNumbersFromTags(var_model_eqtags);
   findPacExpectationEquationNumbers(eqnumbers);
   vector<int> eqnumbers_vec(eqnumbers.begin(), eqnumbers.end());
-  return substituteUnaryOps(eqnumbers_vec);
+  return substituteUnaryOps(eqnumbers_vec, pac_model_table);
 }
 
 pair<lag_equivalence_table_t, ExprNode::subst_table_t>
-DynamicModel::substituteUnaryOps(const vector<int> &eqnumbers)
+DynamicModel::substituteUnaryOps(const vector<int> &eqnumbers, PacModelTable &pac_model_table)
 {
   lag_equivalence_table_t nodes;
   ExprNode::subst_table_t subst_table;
@@ -5633,6 +5633,9 @@ DynamicModel::substituteUnaryOps(const vector<int> &eqnumbers)
       equations[eq] = substeq;
     }
 
+  // Substitute in growth terms in pac_model and pac_target_info
+  pac_model_table.substituteUnaryOpsInGrowth(nodes, subst_table, neweqs);
+
   // Add new equations
   for (auto &neweq : neweqs)
     {
diff --git a/src/DynamicModel.hh b/src/DynamicModel.hh
index 51265ac173fc91ccb3962798abe9f568cd88c73f..85be14bb3c408bc19e7e720de31e53dda3b6ad7b 100644
--- a/src/DynamicModel.hh
+++ b/src/DynamicModel.hh
@@ -525,13 +525,13 @@ public:
   void substituteModelLocalVariables();
 
   //! Creates aux vars for all unary operators
-  pair<lag_equivalence_table_t, ExprNode::subst_table_t> substituteUnaryOps();
+  pair<lag_equivalence_table_t, ExprNode::subst_table_t> substituteUnaryOps(PacModelTable &pac_model_table);
 
   //! Creates aux vars for unary operators in certain equations: originally implemented for support of VARs
-  pair<lag_equivalence_table_t, ExprNode::subst_table_t> substituteUnaryOps(const set<string> &eq_tags);
+  pair<lag_equivalence_table_t, ExprNode::subst_table_t> substituteUnaryOps(const set<string> &eq_tags, PacModelTable &pac_model_table);
 
   //! Creates aux vars for unary operators in certain equations: originally implemented for support of VARs
-  pair<lag_equivalence_table_t, ExprNode::subst_table_t> substituteUnaryOps(const vector<int> &eqnumbers);
+  pair<lag_equivalence_table_t, ExprNode::subst_table_t> substituteUnaryOps(const vector<int> &eqnumbers, PacModelTable &pac_model_table);
 
   //! Substitutes diff operator
   pair<lag_equivalence_table_t, ExprNode::subst_table_t> substituteDiff(PacModelTable &pac_model_table);
diff --git a/src/ModFile.cc b/src/ModFile.cc
index 916d471769d95813424b40bac430d0dd77d4baf3..1ee64c9bb23e28089a814235a822166f56bd03f8 100644
--- a/src/ModFile.cc
+++ b/src/ModFile.cc
@@ -1,5 +1,5 @@
 /*
- * Copyright © 2006-2021 Dynare Team
+ * Copyright © 2006-2022 Dynare Team
  *
  * This file is part of Dynare.
  *
@@ -426,10 +426,10 @@ ModFile::transformPass(bool nostrict, bool stochastic, bool compute_xrefs, bool
   lag_equivalence_table_t unary_ops_nodes;
   ExprNode::subst_table_t unary_ops_subst_table;
   if (transform_unary_ops)
-    tie(unary_ops_nodes, unary_ops_subst_table) = dynamic_model.substituteUnaryOps();
+    tie(unary_ops_nodes, unary_ops_subst_table) = dynamic_model.substituteUnaryOps(pac_model_table);
   else
     // substitute only those unary ops that appear in auxiliary model equations
-    tie(unary_ops_nodes, unary_ops_subst_table) = dynamic_model.substituteUnaryOps(eqtags);
+    tie(unary_ops_nodes, unary_ops_subst_table) = dynamic_model.substituteUnaryOps(eqtags, pac_model_table);
 
   // Create auxiliary variable and equations for Diff operators
   auto [diff_nodes, diff_subst_table] = dynamic_model.substituteDiff(pac_model_table);
diff --git a/src/SubModel.cc b/src/SubModel.cc
index 3df70279ecd9b31b0932164a3630129cbf71fefd..6b9f6ff8961aff9accd5457a4d17203b189a1f5c 100644
--- a/src/SubModel.cc
+++ b/src/SubModel.cc
@@ -872,6 +872,19 @@ PacModelTable::checkPass(ModFileStructure &mod_file_struct, WarningConsolidation
     }
 }
 
+void
+PacModelTable::substituteUnaryOpsInGrowth(const lag_equivalence_table_t &nodes, ExprNode::subst_table_t &subst_table, vector<BinaryOpNode *> &neweqs)
+{
+  for (auto &[name, gv] : growth)
+    if (gv)
+      gv = gv->substituteUnaryOpNodes(nodes, subst_table, neweqs);
+
+  for (auto &[name, ti] : target_info)
+    for (auto &[expr, gv, auxname, kind, coeff, growth_neutrality_param, h_indices, original_gv, gv_info] : get<2>(ti))
+      if (gv)
+        gv = gv->substituteUnaryOpNodes(nodes, subst_table, neweqs);
+}
+
 void
 PacModelTable::findDiffNodesInGrowth(lag_equivalence_table_t &diff_nodes) const
 {
diff --git a/src/SubModel.hh b/src/SubModel.hh
index dcbf8a0569dc667b7c219d12a74df7097a2c5722..548d323a3f02ef4eddc8ac9c58a326c3b2533fb1 100644
--- a/src/SubModel.hh
+++ b/src/SubModel.hh
@@ -1,5 +1,5 @@
 /*
- * Copyright © 2018-2021 Dynare Team
+ * Copyright © 2018-2022 Dynare Team
  *
  * This file is part of Dynare.
  *
@@ -276,10 +276,12 @@ public:
   bool isExistingPacModelName(const string &name_arg) const;
   bool empty() const;
   void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings);
+  // Called by DynamicModel::substituteUnaryOps()
+  void substituteUnaryOpsInGrowth(const lag_equivalence_table_t &nodes, ExprNode::subst_table_t &subst_table, vector<BinaryOpNode *> &neweqs);
   void findDiffNodesInGrowth(lag_equivalence_table_t &diff_nodes) const;
   // Called by DynamicModel::substituteDiff()
   void substituteDiffNodesInGrowth(const lag_equivalence_table_t &diff_nodes, ExprNode::subst_table_t &diff_subst_table, vector<BinaryOpNode *> &neweqs);
-  // Must be called after substituteDiffNodesInGrowth()
+  // Must be called after substituteDiffNodesInGrowth() and substituteUnaryOpsInGrowth()
   void transformPass(const lag_equivalence_table_t &unary_ops_nodes,
                      ExprNode::subst_table_t &unary_ops_subst_table,
                      const lag_equivalence_table_t &diff_nodes,