diff --git a/src/feature_creation/feature_space/FeatureSpace.cpp b/src/feature_creation/feature_space/FeatureSpace.cpp
index 5877355c7d994da3a594f1eafa69580e8d92d770..1f262dec75b2de2791c8620cb51f80a81f6f64a7 100644
--- a/src/feature_creation/feature_space/FeatureSpace.cpp
+++ b/src/feature_creation/feature_space/FeatureSpace.cpp
@@ -1,22 +1,22 @@
 #include <feature_creation/feature_space/FeatureSpace.hpp>
-BOOST_CLASS_EXPORT(FeatureNode)
-BOOST_CLASS_EXPORT(AddNode)
-BOOST_CLASS_EXPORT(SubNode)
-BOOST_CLASS_EXPORT(AbsDiffNode)
-BOOST_CLASS_EXPORT(MultNode)
-BOOST_CLASS_EXPORT(DivNode)
-BOOST_CLASS_EXPORT(SqNode)
-BOOST_CLASS_EXPORT(SqrtNode)
-BOOST_CLASS_EXPORT(CbNode)
-BOOST_CLASS_EXPORT(CbrtNode)
-BOOST_CLASS_EXPORT(SixPowNode)
-BOOST_CLASS_EXPORT(ExpNode)
-BOOST_CLASS_EXPORT(NegExpNode)
-BOOST_CLASS_EXPORT(LogNode)
-BOOST_CLASS_EXPORT(AbsNode)
-BOOST_CLASS_EXPORT(InvNode)
-BOOST_CLASS_EXPORT(SinNode)
-BOOST_CLASS_EXPORT(CosNode)
+BOOST_CLASS_EXPORT_GUID(FeatureNode, "FeatureNode")
+BOOST_CLASS_EXPORT_GUID(AddNode, "AddNode")
+BOOST_CLASS_EXPORT_GUID(SubNode, "SubNode")
+BOOST_CLASS_EXPORT_GUID(AbsDiffNode, "AbsDiffNode")
+BOOST_CLASS_EXPORT_GUID(MultNode, "MultNode")
+BOOST_CLASS_EXPORT_GUID(DivNode, "DivNode")
+BOOST_CLASS_EXPORT_GUID(SqNode, "SqNode")
+BOOST_CLASS_EXPORT_GUID(SqrtNode, "SqrtNode")
+BOOST_CLASS_EXPORT_GUID(CbNode, "CbNode")
+BOOST_CLASS_EXPORT_GUID(CbrtNode, "CbrtNode")
+BOOST_CLASS_EXPORT_GUID(SixPowNode, "SixPowNode")
+BOOST_CLASS_EXPORT_GUID(ExpNode, "ExpNode")
+BOOST_CLASS_EXPORT_GUID(NegExpNode, "NegExpNode")
+BOOST_CLASS_EXPORT_GUID(LogNode, "LogNode")
+BOOST_CLASS_EXPORT_GUID(AbsNode, "AbsNode")
+BOOST_CLASS_EXPORT_GUID(InvNode, "InvNode")
+BOOST_CLASS_EXPORT_GUID(SinNode, "SinNode")
+BOOST_CLASS_EXPORT_GUID(CosNode, "CosNode")
 
 FeatureSpace::FeatureSpace(
     std::shared_ptr<MPI_Interface> mpi_comm,
@@ -140,6 +140,7 @@ void FeatureSpace::generate_feature_space()
                     ++feat_ind;
                 }
             }
+
             if(nn <= _n_rung_store)
             {
                 // bool use_temp = (nn != _max_phi) || (_max_phi > _n_rung_store);
@@ -153,9 +154,11 @@ void FeatureSpace::generate_feature_space()
         {
             std::vector<size_t> next_phi_sizes;
             mpi::all_gather(*_mpi_comm, next_phi.size(), next_phi_sizes);
+
             size_t n_feat = std::accumulate(next_phi_sizes.begin(), next_phi_sizes.end(), _phi.size());
             size_t n_feat_rank = n_feat / _mpi_comm->size();
             size_t n_feat_below_rank = _mpi_comm->rank() * n_feat_rank;
+
             if(_mpi_comm->rank() < n_feat % _mpi_comm->size())
             {
                 ++n_feat_rank;
@@ -165,6 +168,7 @@ void FeatureSpace::generate_feature_space()
             {
                 n_feat_below_rank += n_feat % _mpi_comm->size();
             }
+
             if(n_feat_below_rank + n_feat_rank <= _phi.size())
             {
                 _phi.erase(_phi.begin(), _phi.begin() + n_feat_below_rank);
@@ -178,12 +182,14 @@ void FeatureSpace::generate_feature_space()
             {
                 _phi = {};
             }
+
             while((_phi.size() < n_feat_rank) && (next_phi.size() > 0))
             {
                 next_phi.back()->reindex(_phi.size() + n_feat_below_rank);
                 _phi.push_back(next_phi.back());
                 next_phi.pop_back();
             }
+
             // This can be calculated without an all_gather, using it to not introduce too many things at one time
             std::vector<size_t> next_phi_needed;
             std::vector<size_t> next_phi_excess;
@@ -229,7 +235,7 @@ void FeatureSpace::generate_feature_space()
             }
             else
             {
-                size_t total_recv = std::accumulate(next_phi_excess.begin(), next_phi_excess.begin() + _mpi_comm->rank(), 0);
+                size_t total_recv = std::accumulate(next_phi_needed.begin(), next_phi_needed.begin() + _mpi_comm->rank(), 0);
                 size_t prev_recv_sent = 0;
                 size_t recv_size = 0;
                 int ind = 0;
diff --git a/src/feature_creation/node/FeatureNode.cpp b/src/feature_creation/node/FeatureNode.cpp
index 490b2b860dcb0379bda40bbaa90ac2f317877841..5119ad54f5e05aac4547bcb94ee833184c44400e 100644
--- a/src/feature_creation/node/FeatureNode.cpp
+++ b/src/feature_creation/node/FeatureNode.cpp
@@ -11,8 +11,7 @@ FeatureNode::FeatureNode(int feat_ind, std::string expr, std::vector<double> val
     std::copy_n(value.data(), value.size(), value_ptr());
 }
 
-FeatureNode::FeatureNode(const FeatureNode &o) :
-    Node(o)
+FeatureNode::~FeatureNode()
 {}
 
 void FeatureNode::update_add_sub_leaves(std::map<std::string, int>& add_sub_leaves, int pl_mn, int& expected_abs_tot)
diff --git a/src/feature_creation/node/FeatureNode.hpp b/src/feature_creation/node/FeatureNode.hpp
index e31596b2b3cbcf97acdcbc1db1ffc60ad84654fc..89b8a7a2d8a444b861e19daefb3d325f801b1cf2 100644
--- a/src/feature_creation/node/FeatureNode.hpp
+++ b/src/feature_creation/node/FeatureNode.hpp
@@ -17,6 +17,19 @@ class FeatureNode: public Node
 {
     friend class boost::serialization::access;
 
+    /**
+     * @brief Serialization function to send over MPI
+     *
+     * @param ar Archive representation of node
+     */
+    template <typename Archive>
+    void serialize(Archive& ar, const unsigned int version)
+    {
+        ar & boost::serialization::base_object<Node>(*this);
+        ar & _expr;
+        ar & _unit;
+    }
+
 protected:
     std::string _expr; //!< Expression of the feature
     Unit _unit; //!< Unit for the feature
@@ -37,12 +50,7 @@ public:
      */
     FeatureNode(int feat_ind, std::string expr, std::vector<double> value, Unit unit);
 
-    /**
-     * @brief Copy constructor
-     *
-     * @param o Node to be copied
-     */
-    FeatureNode(const FeatureNode &o);
+    ~FeatureNode();
 
     /**
      * @brief Get the expression for the overall descriptor (From head node down)
@@ -103,19 +111,6 @@ public:
      * @param add_sub_leaves [description]
      */
     void update_div_mult_leaves(std::map<std::string, double>& div_mult_leaves, double fact, double& expected_abs_tot);
-
-    /**
-     * @brief Serialization function to send over MPI
-     *
-     * @param ar Archive representation of node
-     */
-    template <typename Archive>
-    void serialize(Archive& ar, const unsigned int version)
-    {
-        ar & boost::serialization::base_object<Node>(*this);
-        ar & _expr;
-        ar & _unit;
-    }
 };
 
 #endif
diff --git a/src/feature_creation/node/Node.cpp b/src/feature_creation/node/Node.cpp
index 509d6c52e93afe50cbd68818b918ec3b7c075d18..c75e1d5070cb30236f922b25df80ef0db7ce0c41 100644
--- a/src/feature_creation/node/Node.cpp
+++ b/src/feature_creation/node/Node.cpp
@@ -8,9 +8,7 @@ Node::Node(int feat_ind, int n_samp) :
     _feat_ind(feat_ind)
 {}
 
-Node::Node(const Node &o) :
-    _n_samp(o._n_samp),
-    _feat_ind(o._feat_ind)
+Node::~Node()
 {}
 
 BOOST_SERIALIZATION_ASSUME_ABSTRACT(Node)
diff --git a/src/feature_creation/node/Node.hpp b/src/feature_creation/node/Node.hpp
index d03d8ac921befbc2e8edd8fdd8a03527df169269..df7f2bd9b20ea8d8fdf57776604e9a8725799562 100644
--- a/src/feature_creation/node/Node.hpp
+++ b/src/feature_creation/node/Node.hpp
@@ -21,6 +21,20 @@
  */
 class Node
 {
+    friend class boost::serialization::access;
+
+    /**
+     * @brief Serialization function to send over MPI
+     *
+     * @param ar Archive representation of node
+     */
+    template <typename Archive>
+    void serialize(Archive& ar, const unsigned int version)
+    {
+        ar & _n_samp;
+        ar & _feat_ind;
+    }
+
 protected:
     int _n_samp; //!< Number of samples in the feature
     int _feat_ind; //!< Index of the feature
@@ -40,12 +54,7 @@ public:
      */
     Node(int feat_ind, int n_samp);
 
-    /**
-     * @brief Copy constructor
-     *
-     * @param o Node to be copied
-     */
-    Node(const Node &o);
+    virtual ~Node();
 
     /**
      * @brief Reindex the feature
@@ -122,18 +131,6 @@ public:
      * @param expected_abs_tot The expected absolute sum of all values in div_mult_leaves
      */
     virtual void update_div_mult_leaves(std::map<std::string, double>& div_mult_leaves, double fact, double& expected_abs_tot) = 0;
-
-    /**
-     * @brief Serialization function to send over MPI
-     *
-     * @param ar Archive representation of node
-     */
-    template <typename Archive>
-    void serialize(Archive& ar, const unsigned int version)
-    {
-        ar & _n_samp;
-        ar & _feat_ind;
-    }
 };
 
 typedef std::shared_ptr<Node> node_ptr;
diff --git a/src/feature_creation/node/operator_nodes/OperatorNode.cpp b/src/feature_creation/node/operator_nodes/OperatorNode.cpp
index 0a9f7cb7b5e26dc76738b5551664e952c52379df..5ed3cedde84b468be5e5d461c873006b1dc88273 100644
--- a/src/feature_creation/node/operator_nodes/OperatorNode.cpp
+++ b/src/feature_creation/node/operator_nodes/OperatorNode.cpp
@@ -6,16 +6,10 @@ OperatorNode::OperatorNode()
 OperatorNode::OperatorNode(std::vector<node_ptr> feats, int rung, int feat_ind) :
     Node(feat_ind, feats[0]->n_samp()),
     _feats(feats)
-{
-    _feats.reserve(_feats.size());
-}
+{}
 
-OperatorNode::OperatorNode(const OperatorNode &o) :
-    Node(o),
-    _feats(o._feats)
-{
-    _feats.reserve(_feats.size());
-}
+OperatorNode::~OperatorNode()
+{}
 
 double* OperatorNode::value_ptr(int offset)
 {
diff --git a/src/feature_creation/node/operator_nodes/OperatorNode.hpp b/src/feature_creation/node/operator_nodes/OperatorNode.hpp
index 79390ecd695a2198e2dee11c355b3ad0fcbc47ac..968077712fa26680194924e5e99401a5183f7e0c 100644
--- a/src/feature_creation/node/operator_nodes/OperatorNode.hpp
+++ b/src/feature_creation/node/operator_nodes/OperatorNode.hpp
@@ -9,6 +9,7 @@
 #include <boost/serialization/shared_ptr.hpp>
 #include <boost/serialization/split_member.hpp>
 #include <boost/serialization/array.hpp>
+#include <boost/serialization/vector.hpp>
 
 
 /**
@@ -19,6 +20,13 @@
 class OperatorNode: public Node
 {
     friend class boost::serialization::access;
+
+    template <typename Archive>
+    void serialize(Archive& ar, const unsigned int version)
+    {
+        ar & boost::serialization::base_object<Node>(*this);
+        ar & _feats;
+    }
 protected:
     std::vector<node_ptr> _feats;
 
@@ -38,11 +46,8 @@ public:
      * @param feat_ind index of the feature
      */
     OperatorNode(std::vector<node_ptr> feats, int rung, int feat_ind);
-    /**
-     * @brief Base Constructor
-     * @details This is only used for serialization
-     */
-    OperatorNode(const OperatorNode &o);
+
+    virtual ~OperatorNode();
 
     virtual std::string expr() = 0;
 
@@ -50,13 +55,6 @@ public:
 
     virtual void set_value(int offset = -1) = 0;
 
-    template <typename Archive>
-    void serialize(Archive& ar, const unsigned int version)
-    {
-        ar & boost::serialization::base_object<Node>(*this);
-        ar & _feats;
-    }
-
     /**
      * @brief Get the pointer to the feature's data
      * @details If the feature is not already stored in memory, then calculate the feature and return the pointer to the data
diff --git a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/absolute_difference.hpp b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/absolute_difference.hpp
index 26477c60d364c0175f932af44a2c674204fbc34c..a477568d558723002ee5f3ba46f8b2e1446f7e33 100644
--- a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/absolute_difference.hpp
+++ b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/absolute_difference.hpp
@@ -5,6 +5,13 @@
 
 class AbsDiffNode: public OperatorNode
 {
+    friend class boost::serialization::access;
+
+    template <typename Archive>
+    void serialize(Archive& ar, const unsigned int version)
+    {
+        ar & boost::serialization::base_object<OperatorNode>(*this);
+    }
 
 public:
     AbsDiffNode();
@@ -51,12 +58,6 @@ public:
      * @param expected_abs_tot The expected absolute sum of all values in div_mult_leaves
      */
     void update_div_mult_leaves(std::map<std::string, double>& div_mult_leaves, double fact, double& expected_abs_tot);
-
-    template <typename Archive>
-    void serialize(Archive& ar, const unsigned int version)
-    {
-        ar & boost::serialization::base_object<OperatorNode>(*this);
-    }
 };
 
 #endif
\ No newline at end of file
diff --git a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/absolute_value.hpp b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/absolute_value.hpp
index ae3221f41a619fe8fc12bb3e3bc1c03aea538374..b70ec882f886ed747ebfad7ad0302024b2740f4a 100644
--- a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/absolute_value.hpp
+++ b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/absolute_value.hpp
@@ -5,7 +5,13 @@
 
 class AbsNode: public OperatorNode
 {
+    friend class boost::serialization::access;
 
+    template <typename Archive>
+    void serialize(Archive& ar, const unsigned int version)
+    {
+        ar & boost::serialization::base_object<OperatorNode>(*this);
+    }
 public:
     AbsNode();
 
@@ -51,12 +57,6 @@ public:
      * @param expected_abs_tot The expected absolute sum of all values in div_mult_leaves
      */
     void update_div_mult_leaves(std::map<std::string, double>& div_mult_leaves, double fact, double& expected_abs_tot);
-
-    template <typename Archive>
-    void serialize(Archive& ar, const unsigned int version)
-    {
-        ar & boost::serialization::base_object<OperatorNode>(*this);
-    }
 };
 
 #endif
\ No newline at end of file
diff --git a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/add.hpp b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/add.hpp
index a11e280f823b0557a27337503a5faaf45b511321..2d12cb0d69f9be0e4d351bb77413760d4dc3b90c 100644
--- a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/add.hpp
+++ b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/add.hpp
@@ -5,7 +5,13 @@
 
 class AddNode: public OperatorNode
 {
+    friend class boost::serialization::access;
 
+    template <typename Archive>
+    void serialize(Archive& ar, const unsigned int version)
+    {
+        ar & boost::serialization::base_object<OperatorNode>(*this);
+    }
 public:
     AddNode();
 
@@ -52,12 +58,6 @@ public:
      */
     void update_div_mult_leaves(std::map<std::string, double>& div_mult_leaves, double fact, double& expected_abs_tot);
 
-    template <typename Archive>
-    void serialize(Archive& ar, const unsigned int version)
-    {
-        // ar.template register_type<OperatorNode>();
-        ar & boost::serialization::base_object<OperatorNode>(*this);
-    }
 };
 
 #endif
\ No newline at end of file
diff --git a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/cos.hpp b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/cos.hpp
index ceca1724965953819986946ce513d4635da72635..e69cb5b80680a25c6fadea5a9efd045b603fe05d 100644
--- a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/cos.hpp
+++ b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/cos.hpp
@@ -5,7 +5,13 @@
 
 class CosNode: public OperatorNode
 {
+    friend class boost::serialization::access;
 
+    template <typename Archive>
+    void serialize(Archive& ar, const unsigned int version)
+    {
+        ar & boost::serialization::base_object<OperatorNode>(*this);
+    }
 public:
     CosNode();
 
@@ -52,12 +58,6 @@ public:
      */
     void update_div_mult_leaves(std::map<std::string, double>& div_mult_leaves, double fact, double& expected_abs_tot);
 
-    template <typename Archive>
-    void serialize(Archive& ar, const unsigned int version)
-    {
-        // ar.template register_type<OperatorNode>();
-        ar & boost::serialization::base_object<OperatorNode>(*this);
-    }
 };
 
 #endif
\ No newline at end of file
diff --git a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/cube.hpp b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/cube.hpp
index b7e9ca7d6e2a8626b1daedd9664615c324692e89..8d8db3abea5bcac500d4e03693a5891eb72dabe9 100644
--- a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/cube.hpp
+++ b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/cube.hpp
@@ -5,7 +5,13 @@
 
 class CbNode: public OperatorNode
 {
+    friend class boost::serialization::access;
 
+    template <typename Archive>
+    void serialize(Archive& ar, const unsigned int version)
+    {
+        ar & boost::serialization::base_object<OperatorNode>(*this);
+    }
 public:
     CbNode();
 
@@ -51,13 +57,6 @@ public:
      * @param expected_abs_tot The expected absolute sum of all values in div_mult_leaves
      */
     void update_div_mult_leaves(std::map<std::string, double>& div_mult_leaves, double fact, double& expected_abs_tot);
-
-    template <typename Archive>
-    void serialize(Archive& ar, const unsigned int version)
-    {
-        // ar.template register_type<OperatorNode>();
-        ar & boost::serialization::base_object<OperatorNode>(*this);
-    }
 };
 
 #endif
\ No newline at end of file
diff --git a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/cube_root.hpp b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/cube_root.hpp
index 2d723daf9224f71a5a13eb6d19fb5eeac2640659..1522e3c86b61c405fa1b7e1d4f8f3829e304e4bf 100644
--- a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/cube_root.hpp
+++ b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/cube_root.hpp
@@ -5,7 +5,13 @@
 
 class CbrtNode: public OperatorNode
 {
+    friend class boost::serialization::access;
 
+    template <typename Archive>
+    void serialize(Archive& ar, const unsigned int version)
+    {
+        ar & boost::serialization::base_object<OperatorNode>(*this);
+    }
 public:
     CbrtNode();
 
@@ -52,12 +58,6 @@ public:
      */
     void update_div_mult_leaves(std::map<std::string, double>& div_mult_leaves, double fact, double& expected_abs_tot);
 
-    template <typename Archive>
-    void serialize(Archive& ar, const unsigned int version)
-    {
-        // ar.template register_type<OperatorNode>();
-        ar & boost::serialization::base_object<OperatorNode>(*this);
-    }
 };
 
 #endif
\ No newline at end of file
diff --git a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/divide.hpp b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/divide.hpp
index a98ad4755b7fb0c56755c756cbd1ca969d16eca7..bdc5d6289ca1843d5554c69cb65f2c38cd449ed6 100644
--- a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/divide.hpp
+++ b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/divide.hpp
@@ -5,7 +5,13 @@
 
 class DivNode: public OperatorNode
 {
+    friend class boost::serialization::access;
 
+    template <typename Archive>
+    void serialize(Archive& ar, const unsigned int version)
+    {
+        ar & boost::serialization::base_object<OperatorNode>(*this);
+    }
 public:
     DivNode();
 
@@ -52,12 +58,6 @@ public:
      */
     void update_div_mult_leaves(std::map<std::string, double>& div_mult_leaves, double fact, double& expected_abs_tot);
 
-    template <typename Archive>
-    void serialize(Archive& ar, const unsigned int version)
-    {
-        // ar.template register_type<OperatorNode>();
-        ar & boost::serialization::base_object<OperatorNode>(*this);
-    }
 };
 
 #endif
\ No newline at end of file
diff --git a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/exponential.hpp b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/exponential.hpp
index 5ed79cbc3fa471ae65a8548af28986e5dcda4789..d061b920b6115e81a86f2a51088e690c1c29d6f5 100644
--- a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/exponential.hpp
+++ b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/exponential.hpp
@@ -5,7 +5,13 @@
 
 class ExpNode: public OperatorNode
 {
+    friend class boost::serialization::access;
 
+    template <typename Archive>
+    void serialize(Archive& ar, const unsigned int version)
+    {
+        ar & boost::serialization::base_object<OperatorNode>(*this);
+    }
 public:
     ExpNode();
 
@@ -52,12 +58,6 @@ public:
      */
     void update_div_mult_leaves(std::map<std::string, double>& div_mult_leaves, double fact, double& expected_abs_tot);
 
-    template <typename Archive>
-    void serialize(Archive& ar, const unsigned int version)
-    {
-        // ar.template register_type<OperatorNode>();
-        ar & boost::serialization::base_object<OperatorNode>(*this);
-    }
 };
 
 #endif
\ No newline at end of file
diff --git a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/inverse.hpp b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/inverse.hpp
index 46c088a3c71d763f65a146652c5b7b7433ec397b..50a51274acdb7b002c9373f6693ce76562f738cf 100644
--- a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/inverse.hpp
+++ b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/inverse.hpp
@@ -5,6 +5,13 @@
 
 class InvNode: public OperatorNode
 {
+    friend class boost::serialization::access;
+
+    template <typename Archive>
+    void serialize(Archive& ar, const unsigned int version)
+    {
+        ar & boost::serialization::base_object<OperatorNode>(*this);
+    }
 
 public:
     InvNode();
@@ -52,11 +59,5 @@ public:
      */
     void update_div_mult_leaves(std::map<std::string, double>& div_mult_leaves, double fact, double& expected_abs_tot);
 
-    template <typename Archive>
-    void serialize(Archive& ar, const unsigned int version)
-    {
-        // ar.template register_type<OperatorNode>();
-        ar & boost::serialization::base_object<OperatorNode>(*this);
-    }
 };
 #endif
\ No newline at end of file
diff --git a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/log.hpp b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/log.hpp
index 00d6fa1eb984c21ec4929f4a86329728180d5559..fdae1b18c1db65287c1242f492dc3933a9e0feee 100644
--- a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/log.hpp
+++ b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/log.hpp
@@ -5,7 +5,13 @@
 
 class LogNode: public OperatorNode
 {
+    friend class boost::serialization::access;
 
+    template <typename Archive>
+    void serialize(Archive& ar, const unsigned int version)
+    {
+        ar & boost::serialization::base_object<OperatorNode>(*this);
+    }
 public:
     LogNode();
 
@@ -51,13 +57,6 @@ public:
      * @param expected_abs_tot The expected absolute sum of all values in div_mult_leaves
      */
     void update_div_mult_leaves(std::map<std::string, double>& div_mult_leaves, double fact, double& expected_abs_tot);
-
-    template <typename Archive>
-    void serialize(Archive& ar, const unsigned int version)
-    {
-        // ar.template register_type<OperatorNode>();
-        ar & boost::serialization::base_object<OperatorNode>(*this);
-    }
 };
 
 #endif
\ No newline at end of file
diff --git a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/multiply.hpp b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/multiply.hpp
index b29516e6d84c21f7261e9f582322984f325cf95f..070ffe2b08a87abb3dc1ea93ee5581e7ee72ce76 100644
--- a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/multiply.hpp
+++ b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/multiply.hpp
@@ -5,6 +5,13 @@
 
 class MultNode: public OperatorNode
 {
+    friend class boost::serialization::access;
+
+    template <typename Archive>
+    void serialize(Archive& ar, const unsigned int version)
+    {
+        ar & boost::serialization::base_object<OperatorNode>(*this);
+    }
 
 public:
     MultNode();
@@ -52,12 +59,6 @@ public:
      */
     void update_div_mult_leaves(std::map<std::string, double>& div_mult_leaves, double fact, double& expected_abs_tot);
 
-    template <typename Archive>
-    void serialize(Archive& ar, const unsigned int version)
-    {
-        // ar.template register_type<OperatorNode>();
-        ar & boost::serialization::base_object<OperatorNode>(*this);
-    }
 };
 
 #endif
\ No newline at end of file
diff --git a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/negative_exponential.hpp b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/negative_exponential.hpp
index e08b206b102ed6b16cb7e1304a287070d3dd3baa..515dc531c7b3c0f6c121368dad201d49db03395c 100644
--- a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/negative_exponential.hpp
+++ b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/negative_exponential.hpp
@@ -5,6 +5,13 @@
 
 class NegExpNode: public OperatorNode
 {
+    friend class boost::serialization::access;
+
+    template <typename Archive>
+    void serialize(Archive& ar, const unsigned int version)
+    {
+        ar & boost::serialization::base_object<OperatorNode>(*this);
+    }
 
 public:
     NegExpNode();
@@ -52,12 +59,6 @@ public:
      */
     void update_div_mult_leaves(std::map<std::string, double>& div_mult_leaves, double fact, double& expected_abs_tot);
 
-    template <typename Archive>
-    void serialize(Archive& ar, const unsigned int version)
-    {
-        // ar.template register_type<OperatorNode>();
-        ar & boost::serialization::base_object<OperatorNode>(*this);
-    }
 };
 
 #endif
\ No newline at end of file
diff --git a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/sin.hpp b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/sin.hpp
index db423ac2c741a06e93f6c8d533e304554bebb94e..5b31a635b36288731b1cb35617999aa7775e1361 100644
--- a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/sin.hpp
+++ b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/sin.hpp
@@ -5,6 +5,13 @@
 
 class SinNode: public OperatorNode
 {
+    friend class boost::serialization::access;
+
+    template <typename Archive>
+    void serialize(Archive& ar, const unsigned int version)
+    {
+        ar & boost::serialization::base_object<OperatorNode>(*this);
+    }
 
 public:
     SinNode();
@@ -52,12 +59,6 @@ public:
      */
     void update_div_mult_leaves(std::map<std::string, double>& div_mult_leaves, double fact, double& expected_abs_tot);
 
-    template <typename Archive>
-    void serialize(Archive& ar, const unsigned int version)
-    {
-        // ar.template register_type<OperatorNode>();
-        ar & boost::serialization::base_object<OperatorNode>(*this);
-    }
 };
 
 #endif
\ No newline at end of file
diff --git a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/sixth_power.hpp b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/sixth_power.hpp
index 57e4716069eae22d6ca5f15ac5c5b1d4f9d23831..8e90b007150268afcf1741681678c900a88d02fc 100644
--- a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/sixth_power.hpp
+++ b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/sixth_power.hpp
@@ -5,6 +5,13 @@
 
 class SixPowNode: public OperatorNode
 {
+    friend class boost::serialization::access;
+
+    template <typename Archive>
+    void serialize(Archive& ar, const unsigned int version)
+    {
+        ar & boost::serialization::base_object<OperatorNode>(*this);
+    }
 
 public:
     SixPowNode();
@@ -52,12 +59,6 @@ public:
      */
     void update_div_mult_leaves(std::map<std::string, double>& div_mult_leaves, double fact, double& expected_abs_tot);
 
-    template <typename Archive>
-    void serialize(Archive& ar, const unsigned int version)
-    {
-        // ar.template register_type<OperatorNode>();
-        ar & boost::serialization::base_object<OperatorNode>(*this);
-    }
 };
 
 #endif
\ No newline at end of file
diff --git a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/square.hpp b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/square.hpp
index 669e69b45415ac909f633c0e482a580b53f9029e..0e8c377c8d7121631028156ad5929e5b25a0db52 100644
--- a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/square.hpp
+++ b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/square.hpp
@@ -5,7 +5,13 @@
 
 class SqNode: public OperatorNode
 {
+    friend class boost::serialization::access;
 
+    template <typename Archive>
+    void serialize(Archive& ar, const unsigned int version)
+    {
+        ar & boost::serialization::base_object<OperatorNode>(*this);
+    }
 public:
     SqNode();
 
@@ -52,12 +58,6 @@ public:
      */
     void update_div_mult_leaves(std::map<std::string, double>& div_mult_leaves, double fact, double& expected_abs_tot);
 
-    template <typename Archive>
-    void serialize(Archive& ar, const unsigned int version)
-    {
-        // ar.template register_type<OperatorNode>();
-        ar & boost::serialization::base_object<OperatorNode>(*this);
-    }
 };
 
 #endif
\ No newline at end of file
diff --git a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/square_root.hpp b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/square_root.hpp
index e1f33e68499716c468c9a4d1070d3ee326919c80..0986c332b7ddccb2239b422565934b522af0dd69 100644
--- a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/square_root.hpp
+++ b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/square_root.hpp
@@ -5,6 +5,13 @@
 
 class SqrtNode: public OperatorNode
 {
+    friend class boost::serialization::access;
+
+    template <typename Archive>
+    void serialize(Archive& ar, const unsigned int version)
+    {
+        ar & boost::serialization::base_object<OperatorNode>(*this);
+    }
 
 public:
     SqrtNode();
@@ -51,13 +58,6 @@ public:
      * @param expected_abs_tot The expected absolute sum of all values in div_mult_leaves
      */
     void update_div_mult_leaves(std::map<std::string, double>& div_mult_leaves, double fact, double& expected_abs_tot);
-
-    template <typename Archive>
-    void serialize(Archive& ar, const unsigned int version)
-    {
-        // ar.template register_type<OperatorNode>();
-        ar & boost::serialization::base_object<OperatorNode>(*this);
-    }
 };
 
 #endif
\ No newline at end of file
diff --git a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/subtract.hpp b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/subtract.hpp
index c8b167d24ed442a7106b82015591767ec4e93211..71e0085f6230167efcbc22b6f8140e00d79bceb3 100644
--- a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/subtract.hpp
+++ b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/subtract.hpp
@@ -5,6 +5,13 @@
 
 class SubNode: public OperatorNode
 {
+    friend class boost::serialization::access;
+
+    template <typename Archive>
+    void serialize(Archive& ar, const unsigned int version)
+    {
+        ar & boost::serialization::base_object<OperatorNode>(*this);
+    }
 
 public:
     SubNode();
@@ -51,13 +58,6 @@ public:
      * @param expected_abs_tot The expected absolute sum of all values in div_mult_leaves
      */
     void update_div_mult_leaves(std::map<std::string, double>& div_mult_leaves, double fact, double& expected_abs_tot);
-
-    template <typename Archive>
-    void serialize(Archive& ar, const unsigned int version)
-    {
-        // ar.template register_type<OperatorNode>();
-        ar & boost::serialization::base_object<OperatorNode>(*this);
-    }
 };
 
 #endif
\ No newline at end of file