diff --git a/src/ExprNode.cc b/src/ExprNode.cc
index 6f72885f28ae1c991ef7e7222b0b4c72e5866354..acac6b4e59fc1b88565b26cb7b60e54ae62a6ecf 100644
--- a/src/ExprNode.cc
+++ b/src/ExprNode.cc
@@ -7469,6 +7469,24 @@ AbstractExternalFunctionNode::substituteLogTransform(int orig_symb_id, int aux_s
   return buildSimilarExternalFunctionNode(arguments_subst, datatree);
 }
 
+expr_t
+AbstractExternalFunctionNode::toStatic(DataTree &static_datatree) const
+{
+  vector<expr_t> static_arguments;
+  for (auto argument : arguments)
+    static_arguments.push_back(argument->toStatic(static_datatree));
+  return buildSimilarExternalFunctionNode(static_arguments, static_datatree);
+}
+
+expr_t
+AbstractExternalFunctionNode::clone(DataTree &datatree) const
+{
+  vector<expr_t> dynamic_arguments;
+  for (auto argument : arguments)
+    dynamic_arguments.push_back(argument->clone(datatree));
+  return buildSimilarExternalFunctionNode(dynamic_arguments, datatree);
+}
+
 expr_t
 ExternalFunctionNode::composeDerivatives(const vector<expr_t> &dargs)
 {
@@ -7724,15 +7742,6 @@ ExternalFunctionNode::writeJsonExternalFunctionOutput(vector<string> &efout,
     }
 }
 
-expr_t
-ExternalFunctionNode::toStatic(DataTree &static_datatree) const
-{
-  vector<expr_t> static_arguments;
-  for (auto argument : arguments)
-    static_arguments.push_back(argument->toStatic(static_datatree));
-  return static_datatree.AddExternalFunction(symb_id, static_arguments);
-}
-
 void
 ExternalFunctionNode::computeXrefs(EquationInfo &ei) const
 {
@@ -7741,15 +7750,6 @@ ExternalFunctionNode::computeXrefs(EquationInfo &ei) const
     argument->computeXrefs(ei);
 }
 
-expr_t
-ExternalFunctionNode::clone(DataTree &datatree) const
-{
-  vector<expr_t> dynamic_arguments;
-  for (auto argument : arguments)
-    dynamic_arguments.push_back(argument->clone(datatree));
-  return datatree.AddExternalFunction(symb_id, dynamic_arguments);
-}
-
 expr_t
 ExternalFunctionNode::buildSimilarExternalFunctionNode(vector<expr_t> &alt_args, DataTree &alt_datatree) const
 {
@@ -8070,32 +8070,12 @@ FirstDerivExternalFunctionNode::writeBytecodeExternalFunctionOutput(BytecodeWrit
     }
 }
 
-expr_t
-FirstDerivExternalFunctionNode::clone(DataTree &datatree) const
-{
-  vector<expr_t> dynamic_arguments;
-  for (auto argument : arguments)
-    dynamic_arguments.push_back(argument->clone(datatree));
-  return datatree.AddFirstDerivExternalFunction(symb_id, dynamic_arguments,
-                                                inputIndex);
-}
-
 expr_t
 FirstDerivExternalFunctionNode::buildSimilarExternalFunctionNode(vector<expr_t> &alt_args, DataTree &alt_datatree) const
 {
   return alt_datatree.AddFirstDerivExternalFunction(symb_id, alt_args, inputIndex);
 }
 
-expr_t
-FirstDerivExternalFunctionNode::toStatic(DataTree &static_datatree) const
-{
-  vector<expr_t> static_arguments;
-  for (auto argument : arguments)
-    static_arguments.push_back(argument->toStatic(static_datatree));
-  return static_datatree.AddFirstDerivExternalFunction(symb_id, static_arguments,
-                                                       inputIndex);
-}
-
 void
 FirstDerivExternalFunctionNode::computeXrefs(EquationInfo &ei) const
 {
@@ -8364,32 +8344,12 @@ SecondDerivExternalFunctionNode::writeJsonExternalFunctionOutput(vector<string>
   efout.push_back(ef.str());
 }
 
-expr_t
-SecondDerivExternalFunctionNode::clone(DataTree &datatree) const
-{
-  vector<expr_t> dynamic_arguments;
-  for (auto argument : arguments)
-    dynamic_arguments.push_back(argument->clone(datatree));
-  return datatree.AddSecondDerivExternalFunction(symb_id, dynamic_arguments,
-                                                 inputIndex1, inputIndex2);
-}
-
 expr_t
 SecondDerivExternalFunctionNode::buildSimilarExternalFunctionNode(vector<expr_t> &alt_args, DataTree &alt_datatree) const
 {
   return alt_datatree.AddSecondDerivExternalFunction(symb_id, alt_args, inputIndex1, inputIndex2);
 }
 
-expr_t
-SecondDerivExternalFunctionNode::toStatic(DataTree &static_datatree) const
-{
-  vector<expr_t> static_arguments;
-  for (auto argument : arguments)
-    static_arguments.push_back(argument->toStatic(static_datatree));
-  return static_datatree.AddSecondDerivExternalFunction(symb_id, static_arguments,
-                                                        inputIndex1, inputIndex2);
-}
-
 void
 SecondDerivExternalFunctionNode::computeXrefs(EquationInfo &ei) const
 {
diff --git a/src/ExprNode.hh b/src/ExprNode.hh
index 3d8543711936cf068e2e6a66de12bc1c1d1e18e2..b35fa742a2b20a3384e11b22ac4454ea33d70d51 100644
--- a/src/ExprNode.hh
+++ b/src/ExprNode.hh
@@ -1416,7 +1416,7 @@ public:
   void collectDynamicVariables(SymbolType type_arg, set<pair<int, int>> &result) const override;
   double eval(const eval_context_t &eval_context) const noexcept(false) override;
   void writeBytecodeOutput(BytecodeWriter &code_file, ExprNodeBytecodeOutputType output_type, const temporary_terms_t &temporary_terms, const temporary_terms_idxs_t &temporary_terms_idxs, const deriv_node_temp_terms_t &tef_terms) const override = 0;
-  expr_t toStatic(DataTree &static_datatree) const override = 0;
+  expr_t toStatic(DataTree &static_datatree) const override;
   void computeXrefs(EquationInfo &ei) const override = 0;
   BinaryOpNode *normalizeEquationHelper(const set<expr_t> &contain_var, expr_t rhs) const override;
   int maxEndoLead() const override;
@@ -1453,7 +1453,7 @@ public:
   void writePrhs(ostream &output, ExprNodeOutputType output_type, const temporary_terms_t &temporary_terms, const temporary_terms_idxs_t &temporary_terms_idxs, const deriv_node_temp_terms_t &tef_terms) const;
   expr_t replaceTrendVar() const override;
   expr_t detrend(int symb_id, bool log_trend, expr_t trend) const override;
-  expr_t clone(DataTree &datatree) const override = 0;
+  expr_t clone(DataTree &datatree) const override;
   expr_t removeTrendLeadLag(const map<int, expr_t> &trend_symbols_map) const override;
   bool isInStaticForm() const override;
   expr_t replaceVarsInEquation(map<VariableNode *, NumConstNode *> &table) const override;
@@ -1493,10 +1493,8 @@ public:
                                            const temporary_terms_idxs_t &temporary_terms_idxs,
                                            deriv_node_temp_terms_t &tef_terms) const override;
   void writeBytecodeOutput(BytecodeWriter &code_file, ExprNodeBytecodeOutputType output_type, const temporary_terms_t &temporary_terms, const temporary_terms_idxs_t &temporary_terms_idxs, const deriv_node_temp_terms_t &tef_terms) const override;
-  expr_t toStatic(DataTree &static_datatree) const override;
   void computeXrefs(EquationInfo &ei) const override;
   expr_t buildSimilarExternalFunctionNode(vector<expr_t> &alt_args, DataTree &alt_datatree) const override;
-  expr_t clone(DataTree &datatree) const override;
 };
 
 class FirstDerivExternalFunctionNode : public AbstractExternalFunctionNode
@@ -1532,10 +1530,8 @@ public:
                                            const temporary_terms_t &temporary_terms,
                                            const temporary_terms_idxs_t &temporary_terms_idxs,
                                            deriv_node_temp_terms_t &tef_terms) const override;
-  expr_t toStatic(DataTree &static_datatree) const override;
   void computeXrefs(EquationInfo &ei) const override;
   expr_t buildSimilarExternalFunctionNode(vector<expr_t> &alt_args, DataTree &alt_datatree) const override;
-  expr_t clone(DataTree &datatree) const override;
 };
 
 class SecondDerivExternalFunctionNode : public AbstractExternalFunctionNode
@@ -1573,10 +1569,8 @@ public:
                                            const temporary_terms_t &temporary_terms,
                                            const temporary_terms_idxs_t &temporary_terms_idxs,
                                            deriv_node_temp_terms_t &tef_terms) const override;
-  expr_t toStatic(DataTree &static_datatree) const override;
   void computeXrefs(EquationInfo &ei) const override;
   expr_t buildSimilarExternalFunctionNode(vector<expr_t> &alt_args, DataTree &alt_datatree) const override;
-  expr_t clone(DataTree &datatree) const override;
 };
 
 /* Common superclass for nodes that have the following two characteristics: