diff --git a/src/ExprNode.cc b/src/ExprNode.cc
index a697f645513e7d0da0702512e8eab8e6c87e332f..d1ab86901c8286099dab7c8f0e993abfefedfedd 100644
--- a/src/ExprNode.cc
+++ b/src/ExprNode.cc
@@ -6600,10 +6600,17 @@ AbstractExternalFunctionNode::decreaseLeadsLagsPredeterminedVariables() const
 expr_t
 AbstractExternalFunctionNode::substituteEndoLeadGreaterThanTwo(subst_table_t &subst_table, vector<BinaryOpNode *> &neweqs, bool deterministic_model) const
 {
-  vector<expr_t> arguments_subst;
-  for (auto argument : arguments)
-    arguments_subst.push_back(argument->substituteEndoLeadGreaterThanTwo(subst_table, neweqs, deterministic_model));
-  return buildSimilarExternalFunctionNode(arguments_subst, datatree);
+  if (maxEndoLead() < 2)
+    return const_cast<AbstractExternalFunctionNode *>(this);
+  else if (deterministic_model)
+    {
+      vector<expr_t> arguments_subst;
+      for (auto argument : arguments)
+        arguments_subst.push_back(argument->substituteEndoLeadGreaterThanTwo(subst_table, neweqs, deterministic_model));
+      return buildSimilarExternalFunctionNode(arguments_subst, datatree);
+    }
+  else
+    return createEndoLeadAuxiliaryVarForMyself(subst_table, neweqs);
 }
 
 expr_t
@@ -6618,10 +6625,17 @@ AbstractExternalFunctionNode::substituteEndoLagGreaterThanTwo(subst_table_t &sub
 expr_t
 AbstractExternalFunctionNode::substituteExoLead(subst_table_t &subst_table, vector<BinaryOpNode *> &neweqs, bool deterministic_model) const
 {
-  vector<expr_t> arguments_subst;
-  for (auto argument : arguments)
-    arguments_subst.push_back(argument->substituteExoLead(subst_table, neweqs, deterministic_model));
-  return buildSimilarExternalFunctionNode(arguments_subst, datatree);
+  if (maxExoLead() == 0)
+    return const_cast<AbstractExternalFunctionNode *>(this);
+  else if (deterministic_model)
+    {
+      vector<expr_t> arguments_subst;
+      for (auto argument : arguments)
+        arguments_subst.push_back(argument->substituteExoLead(subst_table, neweqs, deterministic_model));
+      return buildSimilarExternalFunctionNode(arguments_subst, datatree);
+    }
+  else
+    return createExoLeadAuxiliaryVarForMyself(subst_table, neweqs);
 }
 
 expr_t