diff --git a/src/DynamicModel.cc b/src/DynamicModel.cc
index e100f5e48f63e6588f1bdca434c17a32b4579190..9b288c7ac0f9d7431c445515ba2979d12d7ef358 100644
--- a/src/DynamicModel.cc
+++ b/src/DynamicModel.cc
@@ -5677,9 +5677,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)
@@ -5687,16 +5686,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 4d0ef7519a8fd192e6a2ae80b6b19870fc94e975..a83bb6d2975b0e71f4e6f4cae98a89671b675243 100644
--- a/src/ExprNode.cc
+++ b/src/ExprNode.cc
@@ -3530,7 +3530,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