diff --git a/src/DynamicModel.cc b/src/DynamicModel.cc
index 453aa9c5a432968605c7324ffa0358c1d5121c08..57d059ebc180b3c97df465151cf25be9d13f2c1a 100644
--- a/src/DynamicModel.cc
+++ b/src/DynamicModel.cc
@@ -6313,9 +6313,8 @@ DynamicModel::substituteUnaryOps(const vector<int> &eqnumbers)
   set<int> used_local_vars;
   for (int eqnumber : eqnumbers)
     equations[eqnumber]->collectVariables(SymbolType::modelLocalVariable, used_local_vars);
-  for (auto &it : local_variables_table)
-    if (used_local_vars.find(it.first) != used_local_vars.end())
-      it.second->findUnaryOpNodesForAuxVarCreation(nodes);
+  for (int mlv : used_local_vars)
+    local_variables_table[mlv]->findUnaryOpNodesForAuxVarCreation(nodes);
 
   // Mark unary ops to be substituted in selected equations
   for (int eqnumber : eqnumbers)
@@ -6323,16 +6322,16 @@ DynamicModel::substituteUnaryOps(const vector<int> &eqnumbers)
 
   // Substitute in model local variables
   vector<BinaryOpNode *> neweqs;
-  for (auto &it : local_variables_table)
-    it.second = it.second->substituteUnaryOpNodes(nodes, subst_table, neweqs);
+  for (int mlv : used_local_vars)
+    local_variables_table[mlv] = local_variables_table[mlv]->substituteUnaryOpNodes(nodes, subst_table, neweqs);
 
   // Substitute in equations
-  for (auto &equation : equations)
+  for (int eq : eqnumbers)
     {
-      auto substeq = dynamic_cast<BinaryOpNode *>(equation->
+      auto substeq = dynamic_cast<BinaryOpNode *>(equations[eq]->
                                                   substituteUnaryOpNodes(nodes, subst_table, neweqs));
       assert(substeq);
-      equation = substeq;
+      equations[eq] = substeq;
     }
 
   // Add new equations
diff --git a/src/ExprNode.cc b/src/ExprNode.cc
index 218f0793cab4b8256e6b4b36cee43485eedd9391..ca91b7438521891d4492121882715c8dac339d0d 100644
--- a/src/ExprNode.cc
+++ b/src/ExprNode.cc
@@ -3614,7 +3614,9 @@ UnaryOpNode::substituteUnaryOpNodes(const lag_equivalence_table_t &nodes, subst_
     else
       subst_table[rit->second] = dynamic_cast<VariableNode *>(aux_var->decreaseLeadsLags(base_index - rit->first));
 
-  return const_cast<VariableNode *>(subst_table.find(this)->second);
+  assert(subst_table.find(this) != subst_table.end());
+
+  return const_cast<VariableNode *>(subst_table.at(this));
 }
 
 expr_t