diff --git a/src/feature_creation/feature_space/FeatureSpace.cpp b/src/feature_creation/feature_space/FeatureSpace.cpp
index 80b847ce8728d87531c07d0e623987d30f0abf29..59d9c23c88a57d117d97aab2c5fd1af2ccf2fb32 100644
--- a/src/feature_creation/feature_space/FeatureSpace.cpp
+++ b/src/feature_creation/feature_space/FeatureSpace.cpp
@@ -187,7 +187,14 @@ void FeatureSpace::initialize_fs()
 }
 
 #ifdef PARAMETERIZE
-    void FeatureSpace::generate_new_feats(std::vector<node_ptr>::iterator& feat, std::vector<node_ptr>& feat_set, int& feat_ind, std::shared_ptr<NLOptimizer> optimizer, double l_bound, double u_bound)
+    void FeatureSpace::generate_new_feats(
+        std::vector<node_ptr>::iterator& feat,
+        std::vector<node_ptr>& feat_set,
+        unsigned long int& feat_ind,
+        std::shared_ptr<NLOptimizer> optimizer,
+        double l_bound,
+        double u_bound
+    )
     {
 
         unsigned long int phi_ind = feat - _phi.begin();
@@ -228,7 +235,13 @@ void FeatureSpace::initialize_fs()
         }
     }
 #else
-    void FeatureSpace::generate_new_feats(std::vector<node_ptr>::iterator& feat, std::vector<node_ptr>& feat_set, int& feat_ind, double l_bound, double u_bound)
+    void FeatureSpace::generate_new_feats(
+        std::vector<node_ptr>::iterator& feat,
+        std::vector<node_ptr>& feat_set,
+        unsigned long int& feat_ind,
+        double l_bound,
+        double u_bound
+    )
     {
         unsigned long int phi_ind = feat - _phi.begin();
         feat_set.reserve(feat_set.size() + _un_operators.size() + phi_ind * (_com_bin_operators.size() + 2 * _bin_operators.size()));
diff --git a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/abs/parameterized_absolute_value.cpp b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/abs/parameterized_absolute_value.cpp
index a7a01f572020feef11688f68422ff7b7151440e1..54fb6e03574ff197d03e46f8b01ec0fc8c0a3b57 100644
--- a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/abs/parameterized_absolute_value.cpp
+++ b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/abs/parameterized_absolute_value.cpp
@@ -2,7 +2,7 @@
 
 BOOST_SERIALIZATION_ASSUME_ABSTRACT(AbsParamNode)
 
-void generateAbsParamNode(std::vector<node_ptr>& feat_list, node_ptr feat, int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer)
+void generateAbsParamNode(std::vector<node_ptr>& feat_list, node_ptr feat, unsigned long int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer)
 {
     ++feat_ind;
     node_ptr new_feat = std::make_shared<AbsParamNode>(feat, feat_ind, optimizer);
@@ -19,7 +19,7 @@ void generateAbsParamNode(std::vector<node_ptr>& feat_list, node_ptr feat, int&
 AbsParamNode::AbsParamNode()
 {}
 
-AbsParamNode::AbsParamNode(node_ptr feat, int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer) :
+AbsParamNode::AbsParamNode(node_ptr feat, unsigned long int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer) :
     AbsNode(feat, feat_ind),
     _sign_alpha(1.0)
 {
@@ -30,7 +30,7 @@ AbsParamNode::AbsParamNode(node_ptr feat, int feat_ind, double l_bound, double u
         throw InvalidFeatureException();
 }
 
-AbsParamNode::AbsParamNode(node_ptr feat, int feat_ind, std::shared_ptr<NLOptimizer> optimizer) :
+AbsParamNode::AbsParamNode(node_ptr feat, unsigned long int feat_ind, std::shared_ptr<NLOptimizer> optimizer) :
     AbsNode(feat, feat_ind),
     _sign_alpha(1.0)
 {
@@ -38,7 +38,7 @@ AbsParamNode::AbsParamNode(node_ptr feat, int feat_ind, std::shared_ptr<NLOptimi
     get_parameters(optimizer);
 }
 
-AbsParamNode::AbsParamNode(node_ptr feat, int feat_ind, double l_bound, double u_bound) :
+AbsParamNode::AbsParamNode(node_ptr feat, unsigned long int feat_ind, double l_bound, double u_bound) :
     AbsNode(feat, feat_ind),
     _sign_alpha(1.0)
 {
diff --git a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/abs/parameterized_absolute_value.hpp b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/abs/parameterized_absolute_value.hpp
index 4c0ec0c9a744143bb5c4421aa6311d70237e7aa1..eea508c44e81e98f7bb179069895e6631b529368 100644
--- a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/abs/parameterized_absolute_value.hpp
+++ b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/abs/parameterized_absolute_value.hpp
@@ -63,7 +63,7 @@ public:
      * @param param_list The list of parameters to optimize using non-linear least squares
      * @param prop The property to fit to
      */
-    AbsParamNode(node_ptr feat, int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
+    AbsParamNode(node_ptr feat, unsigned long int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
 
     /**
      * @brief Constructor
@@ -73,7 +73,7 @@ public:
      * @param feat_ind Index of the new feature
      * @param prop The property to fit to
      */
-    AbsParamNode(node_ptr feat, int feat_ind, std::shared_ptr<NLOptimizer> optimizer);
+    AbsParamNode(node_ptr feat, unsigned long int feat_ind, std::shared_ptr<NLOptimizer> optimizer);
 
     /**
      * @brief Constructor
@@ -85,7 +85,7 @@ public:
      * @param u_bound Maximum absolute value allowed for the feature.
      * @param param_list The list of parameters to optimize using non-linear least squares
      */
-    AbsParamNode(node_ptr feat, int feat_ind, double l_bound=1e-50, double u_bound=1e50);
+    AbsParamNode(node_ptr feat, unsigned long int feat_ind, double l_bound=1e-50, double u_bound=1e50);
 
     // DocString: abs_param_node_set_value
     /**
@@ -191,6 +191,6 @@ public:
     }
 };
 
-void generateAbsParamNode(std::vector<node_ptr>& feat_list, node_ptr feat, int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
+void generateAbsParamNode(std::vector<node_ptr>& feat_list, node_ptr feat, unsigned long int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
 
 #endif
diff --git a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/abs_diff/parameterized_absolute_difference.cpp b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/abs_diff/parameterized_absolute_difference.cpp
index 684652ba4c6c8558bd0af3b4e1bd9e77a7d07023..f7dc081186a160d66ab5185f8bb1b09f0c718e28 100644
--- a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/abs_diff/parameterized_absolute_difference.cpp
+++ b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/abs_diff/parameterized_absolute_difference.cpp
@@ -2,7 +2,7 @@
 
 BOOST_SERIALIZATION_ASSUME_ABSTRACT(AbsDiffParamNode)
 
-void generateAbsDiffParamNode(std::vector<node_ptr>& feat_list, node_ptr feat_1, node_ptr feat_2, int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer)
+void generateAbsDiffParamNode(std::vector<node_ptr>& feat_list, node_ptr feat_1, node_ptr feat_2, unsigned long int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer)
 {
     ++feat_ind;
     node_ptr new_feat = std::make_shared<AbsDiffParamNode>(feat_1, feat_2, feat_ind, optimizer);
@@ -26,7 +26,7 @@ void generateAbsDiffParamNode(std::vector<node_ptr>& feat_list, node_ptr feat_1,
 AbsDiffParamNode::AbsDiffParamNode()
 {}
 
-AbsDiffParamNode::AbsDiffParamNode(node_ptr feat_1, node_ptr feat_2, int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer):
+AbsDiffParamNode::AbsDiffParamNode(node_ptr feat_1, node_ptr feat_2, unsigned long int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer):
     AbsDiffNode(feat_1, feat_2, feat_ind)
 {
     std::map<std::string, int> add_sub_leaves;
@@ -52,14 +52,14 @@ AbsDiffParamNode::AbsDiffParamNode(node_ptr feat_1, node_ptr feat_2, int feat_in
         throw InvalidFeatureException();
 }
 
-AbsDiffParamNode::AbsDiffParamNode(node_ptr feat_1, node_ptr feat_2, int feat_ind, std::shared_ptr<NLOptimizer> optimizer):
+AbsDiffParamNode::AbsDiffParamNode(node_ptr feat_1, node_ptr feat_2, unsigned long int feat_ind, std::shared_ptr<NLOptimizer> optimizer):
     AbsDiffNode(feat_1, feat_2, feat_ind)
 {
     _params.resize(n_params(), 0.0);
     get_parameters(optimizer);
 }
 
-AbsDiffParamNode::AbsDiffParamNode(node_ptr feat_1, node_ptr feat_2, int feat_ind, double l_bound, double u_bound):
+AbsDiffParamNode::AbsDiffParamNode(node_ptr feat_1, node_ptr feat_2, unsigned long int feat_ind, double l_bound, double u_bound):
     AbsDiffNode(feat_1, feat_2, feat_ind)
 {
     _params.resize(n_params(), 0.0);
diff --git a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/abs_diff/parameterized_absolute_difference.hpp b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/abs_diff/parameterized_absolute_difference.hpp
index f3781eb3ff48864a79fbffcbf2d3d58479c4b5aa..436b4fe15c6570d49f1212af60b1580b94e5b337 100644
--- a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/abs_diff/parameterized_absolute_difference.hpp
+++ b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/abs_diff/parameterized_absolute_difference.hpp
@@ -59,7 +59,7 @@ public:
      * @param u_bound Maximum absolute value allowed for the feature.
      * @param prop The property to fit to
      */
-    AbsDiffParamNode(node_ptr feat_1, node_ptr feat_2, int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
+    AbsDiffParamNode(node_ptr feat_1, node_ptr feat_2, unsigned long int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
 
     /**
      * @brief Constructor
@@ -70,7 +70,7 @@ public:
      * @param feat_ind Index of the new feature
      * @param prop The property to fit to
      */
-    AbsDiffParamNode(node_ptr feat_1, node_ptr feat_2, int feat_ind, std::shared_ptr<NLOptimizer> optimizer);
+    AbsDiffParamNode(node_ptr feat_1, node_ptr feat_2, unsigned long int feat_ind, std::shared_ptr<NLOptimizer> optimizer);
 
     /**
      * @brief Constructor
@@ -83,7 +83,7 @@ public:
      * @param param_list The list of parameters to optimize using non-linear least squares
      * @param prop The property to fit to
      */
-    AbsDiffParamNode(node_ptr feat_1, node_ptr feat_2, int feat_ind, double l_bound=1e-50, double u_bound=1e50);
+    AbsDiffParamNode(node_ptr feat_1, node_ptr feat_2, unsigned long int feat_ind, double l_bound=1e-50, double u_bound=1e50);
 
     // DocString: abs_diff_param_node_set_value
     /**
@@ -183,6 +183,6 @@ public:
     }
 };
 
-void generateAbsDiffParamNode(std::vector<node_ptr>& feat_list, node_ptr feat_1, node_ptr feat_2, int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
+void generateAbsDiffParamNode(std::vector<node_ptr>& feat_list, node_ptr feat_1, node_ptr feat_2, unsigned long int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
 
 #endif
diff --git a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/add/parameterized_add.cpp b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/add/parameterized_add.cpp
index 6fd70eaa0b1a12d089570495569cea737c8e7f39..983a763de3577fa8e196cacef96c21d5c398f5c8 100644
--- a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/add/parameterized_add.cpp
+++ b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/add/parameterized_add.cpp
@@ -2,7 +2,7 @@
 
 BOOST_SERIALIZATION_ASSUME_ABSTRACT(AddParamNode)
 
-void generateAddParamNode(std::vector<node_ptr>& feat_list, node_ptr feat_1, node_ptr feat_2, int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer)
+void generateAddParamNode(std::vector<node_ptr>& feat_list, node_ptr feat_1, node_ptr feat_2, unsigned long int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer)
 {
     ++feat_ind;
     node_ptr new_feat = std::make_shared<AddParamNode>(feat_1, feat_2, feat_ind, optimizer);
@@ -20,7 +20,7 @@ void generateAddParamNode(std::vector<node_ptr>& feat_list, node_ptr feat_1, nod
 AddParamNode::AddParamNode()
 {}
 
-AddParamNode::AddParamNode(node_ptr feat_1, node_ptr feat_2, int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer) :
+AddParamNode::AddParamNode(node_ptr feat_1, node_ptr feat_2, unsigned long int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer) :
     AddNode(feat_1, feat_2, feat_ind)
 {
     _params.resize(n_params(), 0.0);
@@ -30,14 +30,14 @@ AddParamNode::AddParamNode(node_ptr feat_1, node_ptr feat_2, int feat_ind, doubl
         throw InvalidFeatureException();
 }
 
-AddParamNode::AddParamNode(node_ptr feat_1, node_ptr feat_2, int feat_ind, std::shared_ptr<NLOptimizer> optimizer) :
+AddParamNode::AddParamNode(node_ptr feat_1, node_ptr feat_2, unsigned long int feat_ind, std::shared_ptr<NLOptimizer> optimizer) :
     AddNode(feat_1, feat_2, feat_ind)
 {
     _params.resize(n_params(), 0.0);
     get_parameters(optimizer);
 }
 
-AddParamNode::AddParamNode(node_ptr feat_1, node_ptr feat_2, int feat_ind, double l_bound, double u_bound) :
+AddParamNode::AddParamNode(node_ptr feat_1, node_ptr feat_2, unsigned long int feat_ind, double l_bound, double u_bound) :
     AddNode(feat_1, feat_2, feat_ind)
 {
     _params.resize(n_params(), 0.0);
diff --git a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/add/parameterized_add.hpp b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/add/parameterized_add.hpp
index 02533c01581af62dfe3f36f420266d6e6c3f6495..151dd72925990b34aaa8c39d90ee95aae5b58551 100644
--- a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/add/parameterized_add.hpp
+++ b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/add/parameterized_add.hpp
@@ -61,7 +61,7 @@ public:
      * @param u_bound Maximum absolute value allowed for the feature.
      * @param prop The property to fit to
      */
-    AddParamNode(node_ptr feat_1, node_ptr feat_2, int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
+    AddParamNode(node_ptr feat_1, node_ptr feat_2, unsigned long int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
 
     /**
      * @brief Constructor
@@ -72,7 +72,7 @@ public:
      * @param feat_ind Index of the new feature
      * @param prop The property to fit to
      */
-    AddParamNode(node_ptr feat_1, node_ptr feat_2, int feat_ind, std::shared_ptr<NLOptimizer> optimizer);
+    AddParamNode(node_ptr feat_1, node_ptr feat_2, unsigned long int feat_ind, std::shared_ptr<NLOptimizer> optimizer);
 
     /**
      * @brief Constructor
@@ -84,7 +84,7 @@ public:
      * @param u_bound Maximum absolute value allowed for the feature.
      * @param param_list The list of parameters to optimize using non-linear least squares
      */
-    AddParamNode(node_ptr feat_1, node_ptr feat_2, int feat_ind, double l_bound=1e-50, double u_bound=1e50);
+    AddParamNode(node_ptr feat_1, node_ptr feat_2, unsigned long int feat_ind, double l_bound=1e-50, double u_bound=1e50);
 
     // DocString: add_param_node_set_value
     /**
@@ -184,6 +184,6 @@ public:
     }
 };
 
-void generateAddParamNode(std::vector<node_ptr>& feat_list, node_ptr feat_1, node_ptr feat_2, int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
+void generateAddParamNode(std::vector<node_ptr>& feat_list, node_ptr feat_1, node_ptr feat_2, unsigned long int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
 
 #endif
diff --git a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/cb/parameterized_cube.cpp b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/cb/parameterized_cube.cpp
index 420f912a0a0980d38ce9d5fd7651f3a8dbf634b3..14befdb4aa0f09434b10302d7b18f86bcde3c34e 100644
--- a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/cb/parameterized_cube.cpp
+++ b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/cb/parameterized_cube.cpp
@@ -2,7 +2,7 @@
 
 BOOST_SERIALIZATION_ASSUME_ABSTRACT(CbParamNode)
 
-void generateCbParamNode(std::vector<node_ptr>& feat_list, node_ptr feat, int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer)
+void generateCbParamNode(std::vector<node_ptr>& feat_list, node_ptr feat, unsigned long int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer)
 {
     ++feat_ind;
     node_ptr new_feat = std::make_shared<CbParamNode>(feat, feat_ind, optimizer);
@@ -19,7 +19,7 @@ void generateCbParamNode(std::vector<node_ptr>& feat_list, node_ptr feat, int& f
 CbParamNode::CbParamNode()
 {}
 
-CbParamNode::CbParamNode(node_ptr feat, int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer) :
+CbParamNode::CbParamNode(node_ptr feat, unsigned long int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer) :
     CbNode(feat, feat_ind)
 {
     _params.resize(n_params(), 0.0);
@@ -30,7 +30,7 @@ CbParamNode::CbParamNode(node_ptr feat, int feat_ind, double l_bound, double u_b
         throw InvalidFeatureException();
 }
 
-CbParamNode::CbParamNode(node_ptr feat, int feat_ind, std::shared_ptr<NLOptimizer> optimizer) :
+CbParamNode::CbParamNode(node_ptr feat, unsigned long int feat_ind, std::shared_ptr<NLOptimizer> optimizer) :
     CbNode(feat, feat_ind)
 {
     _params.resize(n_params(), 0.0);
@@ -39,7 +39,7 @@ CbParamNode::CbParamNode(node_ptr feat, int feat_ind, std::shared_ptr<NLOptimize
     set_value();
 }
 
-CbParamNode::CbParamNode(node_ptr feat, int feat_ind, double l_bound, double u_bound) :
+CbParamNode::CbParamNode(node_ptr feat, unsigned long int feat_ind, double l_bound, double u_bound) :
     CbNode(feat, feat_ind)
 {
     _params.resize(n_params(), 0.0);
diff --git a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/cb/parameterized_cube.hpp b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/cb/parameterized_cube.hpp
index 2d56e25eafdd40b3782089bf7085858993fb30c1..a3f5e6f294a1dd6731b56b66cf020c5e76960233 100644
--- a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/cb/parameterized_cube.hpp
+++ b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/cb/parameterized_cube.hpp
@@ -60,7 +60,7 @@ public:
      * @param u_bound Maximum absolute value allowed for the feature.
      * @param prop The property to fit to
      */
-    CbParamNode(node_ptr feat, int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
+    CbParamNode(node_ptr feat, unsigned long int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
 
     /**
      * @brief Constructor
@@ -70,7 +70,7 @@ public:
      * @param feat_ind Index of the new feature
      * @param prop The property to fit to
      */
-    CbParamNode(node_ptr feat, int feat_ind, std::shared_ptr<NLOptimizer> optimizer);
+    CbParamNode(node_ptr feat, unsigned long int feat_ind, std::shared_ptr<NLOptimizer> optimizer);
 
     /**
      * @brief Constructor
@@ -82,7 +82,7 @@ public:
      * @param u_bound Maximum absolute value allowed for the feature.
      * @param param_list The list of parameters to optimize using non-linear least squares
      */
-    CbParamNode(node_ptr feat, int feat_ind, double l_bound=1e-50, double u_bound=1e50);
+    CbParamNode(node_ptr feat, unsigned long int feat_ind, double l_bound=1e-50, double u_bound=1e50);
 
     // DocString: cb_param_node_set_value
     /**
@@ -182,6 +182,6 @@ public:
     }
 };
 
-void generateCbParamNode(std::vector<node_ptr>& feat_list, node_ptr feat, int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
+void generateCbParamNode(std::vector<node_ptr>& feat_list, node_ptr feat, unsigned long int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
 
 #endif
diff --git a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/cbrt/parameterized_cube_root.cpp b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/cbrt/parameterized_cube_root.cpp
index 683cf9a813a4b75c3d03152e43c1503574807c0f..ab9b657bde1e52c1f7772c4f55a4e392c71f17fa 100644
--- a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/cbrt/parameterized_cube_root.cpp
+++ b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/cbrt/parameterized_cube_root.cpp
@@ -2,7 +2,7 @@
 
 BOOST_SERIALIZATION_ASSUME_ABSTRACT(CbrtParamNode)
 
-void generateCbrtParamNode(std::vector<node_ptr>& feat_list, node_ptr feat, int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer)
+void generateCbrtParamNode(std::vector<node_ptr>& feat_list, node_ptr feat, unsigned long int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer)
 {
     ++feat_ind;
     node_ptr new_feat = std::make_shared<CbrtParamNode>(feat, feat_ind, optimizer);
@@ -19,7 +19,7 @@ void generateCbrtParamNode(std::vector<node_ptr>& feat_list, node_ptr feat, int&
 CbrtParamNode::CbrtParamNode()
 {}
 
-CbrtParamNode::CbrtParamNode(node_ptr feat, int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer) :
+CbrtParamNode::CbrtParamNode(node_ptr feat, unsigned long int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer) :
     CbrtNode(feat, feat_ind),
     _sign_alpha(1.0)
 {
@@ -30,7 +30,7 @@ CbrtParamNode::CbrtParamNode(node_ptr feat, int feat_ind, double l_bound, double
         throw InvalidFeatureException();
 }
 
-CbrtParamNode::CbrtParamNode(node_ptr feat, int feat_ind, std::shared_ptr<NLOptimizer> optimizer) :
+CbrtParamNode::CbrtParamNode(node_ptr feat, unsigned long int feat_ind, std::shared_ptr<NLOptimizer> optimizer) :
     CbrtNode(feat, feat_ind),
     _sign_alpha(1.0)
 {
@@ -38,7 +38,7 @@ CbrtParamNode::CbrtParamNode(node_ptr feat, int feat_ind, std::shared_ptr<NLOpti
     get_parameters(optimizer);
 }
 
-CbrtParamNode::CbrtParamNode(node_ptr feat, int feat_ind, double l_bound, double u_bound) :
+CbrtParamNode::CbrtParamNode(node_ptr feat, unsigned long int feat_ind, double l_bound, double u_bound) :
     CbrtNode(feat, feat_ind),
     _sign_alpha(1.0)
 {
diff --git a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/cbrt/parameterized_cube_root.hpp b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/cbrt/parameterized_cube_root.hpp
index 424a292c81fe069178064ef9136f5d09f9ea467e..98ac0cd62fc405e0f04887b08f37d6e8fbc32201 100644
--- a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/cbrt/parameterized_cube_root.hpp
+++ b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/cbrt/parameterized_cube_root.hpp
@@ -61,7 +61,7 @@ public:
      * @param u_bound Maximum absolute value allowed for the feature.
      * @param prop The property to fit to
      */
-    CbrtParamNode(node_ptr feat, int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
+    CbrtParamNode(node_ptr feat, unsigned long int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
 
     /**
      * @brief Constructor
@@ -71,7 +71,7 @@ public:
      * @param feat_ind Index of the new feature
      * @param prop The property to fit to
      */
-    CbrtParamNode(node_ptr feat, int feat_ind, std::shared_ptr<NLOptimizer> optimizer);
+    CbrtParamNode(node_ptr feat, unsigned long int feat_ind, std::shared_ptr<NLOptimizer> optimizer);
 
     /**
      * @brief Constructor
@@ -83,7 +83,7 @@ public:
      * @param u_bound Maximum absolute value allowed for the feature.
      * @param param_list The list of parameters to optimize using non-linear least squares
      */
-    CbrtParamNode(node_ptr feat, int feat_ind, double l_bound=1e-50, double u_bound=1e50);
+    CbrtParamNode(node_ptr feat, unsigned long int feat_ind, double l_bound=1e-50, double u_bound=1e50);
 
     // DocString: cbrt_param_node_set_value
     /**
@@ -190,6 +190,6 @@ public:
     }
 };
 
-void generateCbrtParamNode(std::vector<node_ptr>& feat_list, node_ptr feat, int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
+void generateCbrtParamNode(std::vector<node_ptr>& feat_list, node_ptr feat, unsigned long int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
 
 #endif
diff --git a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/cos/parameterized_cos.cpp b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/cos/parameterized_cos.cpp
index d3fa1e0f1915134332e34dc27088848b9e0b748e..2941f1408f12f2bb8bd88287e4b6a94e71df12e0 100644
--- a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/cos/parameterized_cos.cpp
+++ b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/cos/parameterized_cos.cpp
@@ -2,7 +2,7 @@
 
 BOOST_SERIALIZATION_ASSUME_ABSTRACT(CosParamNode)
 
-void generateCosParamNode(std::vector<node_ptr>& feat_list, node_ptr feat, int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer)
+void generateCosParamNode(std::vector<node_ptr>& feat_list, node_ptr feat, unsigned long int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer)
 {
     ++feat_ind;
 
@@ -23,7 +23,7 @@ void generateCosParamNode(std::vector<node_ptr>& feat_list, node_ptr feat, int&
 CosParamNode::CosParamNode()
 {}
 
-CosParamNode::CosParamNode(node_ptr feat, int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer) :
+CosParamNode::CosParamNode(node_ptr feat, unsigned long int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer) :
     CosNode(feat, feat_ind)
 {
     if((feat->type() == NODE_TYPE::SIN) || (feat->type() == NODE_TYPE::COS))
@@ -36,14 +36,14 @@ CosParamNode::CosParamNode(node_ptr feat, int feat_ind, double l_bound, double u
         throw InvalidFeatureException();
 }
 
-CosParamNode::CosParamNode(node_ptr feat, int feat_ind, std::shared_ptr<NLOptimizer> optimizer) :
+CosParamNode::CosParamNode(node_ptr feat, unsigned long int feat_ind, std::shared_ptr<NLOptimizer> optimizer) :
     CosNode(feat, feat_ind)
 {
     _params.resize(n_params(), 0.0);
     get_parameters(optimizer);
 }
 
-CosParamNode::CosParamNode(node_ptr feat, int feat_ind, double l_bound, double u_bound) :
+CosParamNode::CosParamNode(node_ptr feat, unsigned long int feat_ind, double l_bound, double u_bound) :
     CosNode(feat, feat_ind)
 {
     _params.resize(n_params(), 0.0);
diff --git a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/cos/parameterized_cos.hpp b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/cos/parameterized_cos.hpp
index fb6ace4cca63b8dc4df2c514616a58806e2d3239..5849fc0e5b825dc44372def8707b18306f1ec013 100644
--- a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/cos/parameterized_cos.hpp
+++ b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/cos/parameterized_cos.hpp
@@ -61,7 +61,7 @@ public:
      * @param param_list The list of parameters to optimize using non-linear least squares
      * @param prop The property to fit to
      */
-    CosParamNode(node_ptr feat, int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
+    CosParamNode(node_ptr feat, unsigned long int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
 
     /**
      * @brief Constructor
@@ -71,7 +71,7 @@ public:
      * @param feat_ind Index of the new feature
      * @param prop The property to fit to
      */
-    CosParamNode(node_ptr feat, int feat_ind, std::shared_ptr<NLOptimizer> optimizer);
+    CosParamNode(node_ptr feat, unsigned long int feat_ind, std::shared_ptr<NLOptimizer> optimizer);
 
     /**
      * @brief Constructor
@@ -83,7 +83,7 @@ public:
      * @param u_bound Maximum absolute value allowed for the feature.
      * @param param_list The list of parameters to optimize using non-linear least squares
      */
-    CosParamNode(node_ptr feat, int feat_ind, double l_bound=1e-50, double u_bound=1e50);
+    CosParamNode(node_ptr feat, unsigned long int feat_ind, double l_bound=1e-50, double u_bound=1e50);
 
     // DocString: cos_param_node_set_value
     /**
@@ -182,6 +182,6 @@ public:
     }
 };
 
-void generateCosParamNode(std::vector<node_ptr>& feat_list, node_ptr feat, int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
+void generateCosParamNode(std::vector<node_ptr>& feat_list, node_ptr feat, unsigned long int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
 
 #endif
diff --git a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/div/parameterized_divide.cpp b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/div/parameterized_divide.cpp
index 1c3eed00a02018ec6b0630f185c1171fdebe36a3..2e55503ec10b55ebb8ad43d848005437d975661e 100644
--- a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/div/parameterized_divide.cpp
+++ b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/div/parameterized_divide.cpp
@@ -2,7 +2,7 @@
 
 BOOST_SERIALIZATION_ASSUME_ABSTRACT(DivParamNode)
 
-void generateDivParamNode(std::vector<node_ptr>& feat_list, node_ptr feat_1, node_ptr feat_2, int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer)
+void generateDivParamNode(std::vector<node_ptr>& feat_list, node_ptr feat_1, node_ptr feat_2, unsigned long int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer)
 {
     ++feat_ind;
     if((feat_1->type() == NODE_TYPE::INV) || (feat_2->type() == NODE_TYPE::INV) || (feat_2->type() == NODE_TYPE::DIV))
@@ -22,7 +22,7 @@ void generateDivParamNode(std::vector<node_ptr>& feat_list, node_ptr feat_1, nod
 DivParamNode::DivParamNode()
 {}
 
-DivParamNode::DivParamNode(node_ptr feat_1, node_ptr feat_2, int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer) :
+DivParamNode::DivParamNode(node_ptr feat_1, node_ptr feat_2, unsigned long int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer) :
     DivNode(feat_1, feat_2, feat_ind)
 {
      if((feat_1->type() == NODE_TYPE::INV) || (feat_2->type() == NODE_TYPE::INV) || (feat_2->type() == NODE_TYPE::DIV))
@@ -36,7 +36,7 @@ DivParamNode::DivParamNode(node_ptr feat_1, node_ptr feat_2, int feat_ind, doubl
         throw InvalidFeatureException();
 }
 
-DivParamNode::DivParamNode(node_ptr feat_1, node_ptr feat_2, int feat_ind, std::shared_ptr<NLOptimizer> optimizer) :
+DivParamNode::DivParamNode(node_ptr feat_1, node_ptr feat_2, unsigned long int feat_ind, std::shared_ptr<NLOptimizer> optimizer) :
     DivNode(feat_1, feat_2, feat_ind)
 {
     _params.resize(n_params(), 0.0);
@@ -44,7 +44,7 @@ DivParamNode::DivParamNode(node_ptr feat_1, node_ptr feat_2, int feat_ind, std::
     get_parameters(optimizer);
 }
 
-DivParamNode::DivParamNode(node_ptr feat_1, node_ptr feat_2, int feat_ind, double l_bound, double u_bound) :
+DivParamNode::DivParamNode(node_ptr feat_1, node_ptr feat_2, unsigned long int feat_ind, double l_bound, double u_bound) :
     DivNode(feat_1, feat_2, feat_ind)
 {
     _params.resize(n_params(), 0.0);
diff --git a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/div/parameterized_divide.hpp b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/div/parameterized_divide.hpp
index 35f5a89a2731b780aee0b5268b9fb7252aa8f742..97bfb79322d6fbba48a11554dd37749e2f04e7e2 100644
--- a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/div/parameterized_divide.hpp
+++ b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/div/parameterized_divide.hpp
@@ -61,7 +61,7 @@ public:
      * @param u_bound Maximum absolute value allowed for the feature.
      * @param prop The property to fit to
      */
-    DivParamNode(node_ptr feat_1, node_ptr feat_2, int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
+    DivParamNode(node_ptr feat_1, node_ptr feat_2, unsigned long int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
 
     /**
      * @brief Constructor
@@ -72,7 +72,7 @@ public:
      * @param feat_ind Index of the new feature
      * @param prop The property to fit to
      */
-    DivParamNode(node_ptr feat_1, node_ptr feat_2, int feat_ind, std::shared_ptr<NLOptimizer> optimizer);
+    DivParamNode(node_ptr feat_1, node_ptr feat_2, unsigned long int feat_ind, std::shared_ptr<NLOptimizer> optimizer);
 
     /**
      * @brief Constructor
@@ -84,7 +84,7 @@ public:
      * @param u_bound Maximum absolute value allowed for the feature.
      * @param param_list The list of parameters to optimize using non-linear least squares
      */
-    DivParamNode(node_ptr feat_1, node_ptr feat_2, int feat_ind, double l_bound=1e-50, double u_bound=1e50);
+    DivParamNode(node_ptr feat_1, node_ptr feat_2, unsigned long int feat_ind, double l_bound=1e-50, double u_bound=1e50);
 
     // DocString: div_param_node_set_value
     /**
@@ -184,6 +184,6 @@ public:
     }
 };
 
-void generateDivParamNode(std::vector<node_ptr>& feat_list, node_ptr feat_1, node_ptr feat_2, int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
+void generateDivParamNode(std::vector<node_ptr>& feat_list, node_ptr feat_1, node_ptr feat_2, unsigned long int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
 
 #endif
diff --git a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/exp/parameterized_exponential.cpp b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/exp/parameterized_exponential.cpp
index 79fc69990dedf653c177fca767e4a5ad97be95f9..a9c3046c109a7820cddc027e7428d13b91dbebe6 100644
--- a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/exp/parameterized_exponential.cpp
+++ b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/exp/parameterized_exponential.cpp
@@ -2,7 +2,7 @@
 
 BOOST_SERIALIZATION_ASSUME_ABSTRACT(ExpParamNode)
 
-void generateExpParamNode(std::vector<node_ptr>& feat_list, node_ptr feat, int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer)
+void generateExpParamNode(std::vector<node_ptr>& feat_list, node_ptr feat, unsigned long int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer)
 {
     ++feat_ind;
 
@@ -23,7 +23,7 @@ void generateExpParamNode(std::vector<node_ptr>& feat_list, node_ptr feat, int&
 ExpParamNode::ExpParamNode()
 {}
 
-ExpParamNode::ExpParamNode(node_ptr feat, int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer) :
+ExpParamNode::ExpParamNode(node_ptr feat, unsigned long int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer) :
     ExpNode(feat, feat_ind)
 {
     if((feat->type() == NODE_TYPE::NEG_EXP) || (feat->type() == NODE_TYPE::EXP) || (feat->type() == NODE_TYPE::ADD) || (feat->type() == NODE_TYPE::SUB) || (feat->type() == NODE_TYPE::LOG))
@@ -36,14 +36,14 @@ ExpParamNode::ExpParamNode(node_ptr feat, int feat_ind, double l_bound, double u
         throw InvalidFeatureException();
 }
 
-ExpParamNode::ExpParamNode(node_ptr feat, int feat_ind, std::shared_ptr<NLOptimizer> optimizer) :
+ExpParamNode::ExpParamNode(node_ptr feat, unsigned long int feat_ind, std::shared_ptr<NLOptimizer> optimizer) :
     ExpNode(feat, feat_ind)
 {
     _params.resize(n_params(), 0.0);
     get_parameters(optimizer);
 }
 
-ExpParamNode::ExpParamNode(node_ptr feat, int feat_ind, double l_bound, double u_bound) :
+ExpParamNode::ExpParamNode(node_ptr feat, unsigned long int feat_ind, double l_bound, double u_bound) :
     ExpNode(feat, feat_ind)
 {
     _params.resize(n_params(), 0.0);
diff --git a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/exp/parameterized_exponential.hpp b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/exp/parameterized_exponential.hpp
index 6fae956f1f742469a9051fdf788413e021eb47d0..b345ad4004364f517b86b6c65cf0268e17fbba5b 100644
--- a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/exp/parameterized_exponential.hpp
+++ b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/exp/parameterized_exponential.hpp
@@ -60,7 +60,7 @@ public:
      * @param u_bound Maximum absolute value allowed for the feature.
      * @param prop The property to fit to
      */
-    ExpParamNode(node_ptr feat, int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
+    ExpParamNode(node_ptr feat, unsigned long int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
 
     /**
      * @brief Constructor
@@ -70,7 +70,7 @@ public:
      * @param feat_ind Index of the new feature
      * @param prop The property to fit to
      */
-    ExpParamNode(node_ptr feat, int feat_ind, std::shared_ptr<NLOptimizer> optimizer);
+    ExpParamNode(node_ptr feat, unsigned long int feat_ind, std::shared_ptr<NLOptimizer> optimizer);
 
     /**
      * @brief Constructor
@@ -82,7 +82,7 @@ public:
      * @param u_bound Maximum absolute value allowed for the feature.
      * @param param_list The list of parameters to optimize using non-linear least squares
      */
-    ExpParamNode(node_ptr feat, int feat_ind, double l_bound=1e-50, double u_bound=1e50);
+    ExpParamNode(node_ptr feat, unsigned long int feat_ind, double l_bound=1e-50, double u_bound=1e50);
 
     // DocString: exp_param_node_set_value
     /**
@@ -181,6 +181,6 @@ public:
     }
 };
 
-void generateExpParamNode(std::vector<node_ptr>& feat_list, node_ptr feat, int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
+void generateExpParamNode(std::vector<node_ptr>& feat_list, node_ptr feat, unsigned long int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
 
 #endif
diff --git a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/inv/parameterized_inverse.cpp b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/inv/parameterized_inverse.cpp
index 735c64e26a4622804d68deab449a724bbba92213..51672fac9dfdcfa7e06b8ea1d93092e0a3909396 100644
--- a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/inv/parameterized_inverse.cpp
+++ b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/inv/parameterized_inverse.cpp
@@ -2,7 +2,7 @@
 
 BOOST_SERIALIZATION_ASSUME_ABSTRACT(InvParamNode)
 
-void generateInvParamNode(std::vector<node_ptr>& feat_list, node_ptr feat, int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer)
+void generateInvParamNode(std::vector<node_ptr>& feat_list, node_ptr feat, unsigned long int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer)
 {
     ++feat_ind;
 
@@ -23,7 +23,7 @@ void generateInvParamNode(std::vector<node_ptr>& feat_list, node_ptr feat, int&
 InvParamNode::InvParamNode()
 {}
 
-InvParamNode::InvParamNode(node_ptr feat, int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer) :
+InvParamNode::InvParamNode(node_ptr feat, unsigned long int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer) :
     InvNode(feat, feat_ind)
 {
     if((feat->type() == NODE_TYPE::DIV) || (feat->type() == NODE_TYPE::INV))
@@ -36,14 +36,14 @@ InvParamNode::InvParamNode(node_ptr feat, int feat_ind, double l_bound, double u
         throw InvalidFeatureException();
 }
 
-InvParamNode::InvParamNode(node_ptr feat, int feat_ind, std::shared_ptr<NLOptimizer> optimizer) :
+InvParamNode::InvParamNode(node_ptr feat, unsigned long int feat_ind, std::shared_ptr<NLOptimizer> optimizer) :
     InvNode(feat, feat_ind)
 {
     _params.resize(n_params(), 0.0);
     get_parameters(optimizer);
 }
 
-InvParamNode::InvParamNode(node_ptr feat, int feat_ind, double l_bound, double u_bound) :
+InvParamNode::InvParamNode(node_ptr feat, unsigned long int feat_ind, double l_bound, double u_bound) :
     InvNode(feat, feat_ind)
 {
     _params.resize(n_params(), 0.0);
diff --git a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/inv/parameterized_inverse.hpp b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/inv/parameterized_inverse.hpp
index c926e57e2e6fd2db4cfa472492bb1a08221b95ae..62a207b0e2c334023c773bda9d38bf6848f12d56 100644
--- a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/inv/parameterized_inverse.hpp
+++ b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/inv/parameterized_inverse.hpp
@@ -60,7 +60,7 @@ public:
      * @param u_bound Maximum absolute value allowed for the feature.
      * @param prop The property to fit to
      */
-    InvParamNode(node_ptr feat, int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
+    InvParamNode(node_ptr feat, unsigned long int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
 
     /**
      * @brief Constructor
@@ -70,7 +70,7 @@ public:
      * @param feat_ind Index of the new feature
      * @param prop The property to fit to
      */
-    InvParamNode(node_ptr feat, int feat_ind, std::shared_ptr<NLOptimizer> optimizer);
+    InvParamNode(node_ptr feat, unsigned long int feat_ind, std::shared_ptr<NLOptimizer> optimizer);
 
     /**
      * @brief Constructor
@@ -82,7 +82,7 @@ public:
      * @param u_bound Maximum absolute value allowed for the feature.
      * @param param_list The list of parameters to optimize using non-linear least squares
      */
-    InvParamNode(node_ptr feat, int feat_ind, double l_bound=1e-50, double u_bound=1e50);
+    InvParamNode(node_ptr feat, unsigned long int feat_ind, double l_bound=1e-50, double u_bound=1e50);
 
     // DocString: inv_param_node_set_value
     /**
@@ -181,6 +181,6 @@ public:
     }
 };
 
-void generateInvParamNode(std::vector<node_ptr>& feat_list, node_ptr feat, int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
+void generateInvParamNode(std::vector<node_ptr>& feat_list, node_ptr feat, unsigned long int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
 
 #endif
diff --git a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/log/parameterized_log.cpp b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/log/parameterized_log.cpp
index 3f0f38f7f5399bff8f3dcca7b1948d0fc3c76241..464ccb303d19d06245f0e590ef320cec81507e83 100644
--- a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/log/parameterized_log.cpp
+++ b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/log/parameterized_log.cpp
@@ -2,7 +2,7 @@
 
 BOOST_SERIALIZATION_ASSUME_ABSTRACT(LogParamNode)
 
-void generateLogParamNode(std::vector<node_ptr>& feat_list, node_ptr feat, int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer)
+void generateLogParamNode(std::vector<node_ptr>& feat_list, node_ptr feat, unsigned long int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer)
 {
     ++feat_ind;
 
@@ -23,7 +23,7 @@ void generateLogParamNode(std::vector<node_ptr>& feat_list, node_ptr feat, int&
 LogParamNode::LogParamNode()
 {}
 
-LogParamNode::LogParamNode(node_ptr feat, int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer) :
+LogParamNode::LogParamNode(node_ptr feat, unsigned long int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer) :
     LogNode(feat, feat_ind)
 {
     if((feat->type() == NODE_TYPE::NEG_EXP) || (feat->type() == NODE_TYPE::EXP) || (feat->type() == NODE_TYPE::DIV) || (feat->type() == NODE_TYPE::INV) || (feat->type() == NODE_TYPE::MULT) || (feat->type() == NODE_TYPE::LOG) || (feat->type() == NODE_TYPE::SIX_POW) || (feat->type() == NODE_TYPE::CB) || (feat->type() == NODE_TYPE::SQ) || (feat->type() == NODE_TYPE::CBRT) || (feat->type() == NODE_TYPE::SQRT))
@@ -36,14 +36,14 @@ LogParamNode::LogParamNode(node_ptr feat, int feat_ind, double l_bound, double u
         throw InvalidFeatureException();
 }
 
-LogParamNode::LogParamNode(node_ptr feat, int feat_ind, std::shared_ptr<NLOptimizer> optimizer) :
+LogParamNode::LogParamNode(node_ptr feat, unsigned long int feat_ind, std::shared_ptr<NLOptimizer> optimizer) :
     LogNode(feat, feat_ind)
 {
     _params.resize(n_params(), 0.0);
     get_parameters(optimizer);
 }
 
-LogParamNode::LogParamNode(node_ptr feat, int feat_ind, double l_bound, double u_bound) :
+LogParamNode::LogParamNode(node_ptr feat, unsigned long int feat_ind, double l_bound, double u_bound) :
     LogNode(feat, feat_ind)
 {
     _params.resize(n_params(), 0.0);
diff --git a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/log/parameterized_log.hpp b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/log/parameterized_log.hpp
index 0d75c274082194debcb6c0fba8394b8781f0e4c9..e937d289afb489c60f2ee05f3dba160b70800aeb 100644
--- a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/log/parameterized_log.hpp
+++ b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/log/parameterized_log.hpp
@@ -60,7 +60,7 @@ public:
      * @param u_bound Maximum absolute value allowed for the feature.
      * @param prop The property to fit to
      */
-    LogParamNode(node_ptr feat, int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
+    LogParamNode(node_ptr feat, unsigned long int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
 
     /**
      * @brief Constructor
@@ -70,7 +70,7 @@ public:
      * @param feat_ind Index of the new feature
      * @param prop The property to fit to
      */
-    LogParamNode(node_ptr feat, int feat_ind, std::shared_ptr<NLOptimizer> optimizer);
+    LogParamNode(node_ptr feat, unsigned long int feat_ind, std::shared_ptr<NLOptimizer> optimizer);
 
     /**
      * @brief Constructor
@@ -82,7 +82,7 @@ public:
      * @param u_bound Maximum absolute value allowed for the feature.
      * @param param_list The list of parameters to optimize using non-linear least squares
      */
-    LogParamNode(node_ptr feat, int feat_ind, double l_bound=1e-50, double u_bound=1e50);
+    LogParamNode(node_ptr feat, unsigned long int feat_ind, double l_bound=1e-50, double u_bound=1e50);
 
     // DocString: log_param_node_set_value
     /**
@@ -181,6 +181,6 @@ public:
     }
 };
 
-void generateLogParamNode(std::vector<node_ptr>& feat_list, node_ptr feat, int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
+void generateLogParamNode(std::vector<node_ptr>& feat_list, node_ptr feat, unsigned long int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
 
 #endif
diff --git a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/mult/parameterized_multiply.cpp b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/mult/parameterized_multiply.cpp
index d5e8421cff81b5411cda99ed7e3b9e847eb71bc0..1176d6d9d44ecc686fe8ec263c75e0ebc3c0e0f6 100644
--- a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/mult/parameterized_multiply.cpp
+++ b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/mult/parameterized_multiply.cpp
@@ -2,7 +2,7 @@
 
 BOOST_SERIALIZATION_ASSUME_ABSTRACT(MultParamNode)
 
-void generateMultParamNode(std::vector<node_ptr>& feat_list, node_ptr feat_1, node_ptr feat_2, int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer)
+void generateMultParamNode(std::vector<node_ptr>& feat_list, node_ptr feat_1, node_ptr feat_2, unsigned long int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer)
 {
     ++feat_ind;
     node_ptr new_feat = std::make_shared<MultParamNode>(feat_1, feat_2, feat_ind, optimizer);
@@ -19,7 +19,7 @@ void generateMultParamNode(std::vector<node_ptr>& feat_list, node_ptr feat_1, no
 MultParamNode::MultParamNode()
 {}
 
-MultParamNode::MultParamNode(node_ptr feat_1, node_ptr feat_2, int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer):
+MultParamNode::MultParamNode(node_ptr feat_1, node_ptr feat_2, unsigned long int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer):
     MultNode(feat_1, feat_2, feat_ind)
 {
     _params.resize(n_params(), 0.0);
@@ -29,13 +29,13 @@ MultParamNode::MultParamNode(node_ptr feat_1, node_ptr feat_2, int feat_ind, dou
         throw InvalidFeatureException();
 }
 
-MultParamNode::MultParamNode(node_ptr feat_1, node_ptr feat_2, int feat_ind, double l_bound, double u_bound):
+MultParamNode::MultParamNode(node_ptr feat_1, node_ptr feat_2, unsigned long int feat_ind, double l_bound, double u_bound):
     MultNode(feat_1, feat_2, feat_ind)
 {
     _params.resize(n_params(), 0.0);
 }
 
-MultParamNode::MultParamNode(node_ptr feat_1, node_ptr feat_2, int feat_ind, std::shared_ptr<NLOptimizer> optimizer):
+MultParamNode::MultParamNode(node_ptr feat_1, node_ptr feat_2, unsigned long int feat_ind, std::shared_ptr<NLOptimizer> optimizer):
     MultNode(feat_1, feat_2, feat_ind)
 {
     _params.resize(n_params(), 0.0);
diff --git a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/mult/parameterized_multiply.hpp b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/mult/parameterized_multiply.hpp
index a3bc169cb91a469d5ff7db72899e50414247e508..58c25d4af91c6c6a6cd29bd7b365bcc1fd2f1e3c 100644
--- a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/mult/parameterized_multiply.hpp
+++ b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/mult/parameterized_multiply.hpp
@@ -60,7 +60,7 @@ public:
      * @param u_bound Maximum absolute value allowed for the feature.
      * @param prop The property to fit to
      */
-    MultParamNode(node_ptr feat_1, node_ptr feat_2, int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
+    MultParamNode(node_ptr feat_1, node_ptr feat_2, unsigned long int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
 
     /**
      * @brief Constructor
@@ -70,7 +70,7 @@ public:
      * @param feat_ind Index of the new feature
      * @param prop The property to fit to
      */
-    MultParamNode(node_ptr feat_1, node_ptr feat_2, int feat_ind, std::shared_ptr<NLOptimizer> optimizer);
+    MultParamNode(node_ptr feat_1, node_ptr feat_2, unsigned long int feat_ind, std::shared_ptr<NLOptimizer> optimizer);
 
     /**
      * @brief Constructor
@@ -82,7 +82,7 @@ public:
      * @param u_bound Maximum absolute value allowed for the feature.
      * @param param_list The list of parameters to optimize using non-linear least squares
      */
-    MultParamNode(node_ptr feat_1, node_ptr feat_2, int feat_ind, double l_bound=1e-50, double u_bound=1e50);
+    MultParamNode(node_ptr feat_1, node_ptr feat_2, unsigned long int feat_ind, double l_bound=1e-50, double u_bound=1e50);
 
     // DocString: mult_param_node_set_value
     /**
@@ -182,6 +182,6 @@ public:
     }
 };
 
-void generateMultParamNode(std::vector<node_ptr>& feat_list, node_ptr feat_1, node_ptr feat_2, int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
+void generateMultParamNode(std::vector<node_ptr>& feat_list, node_ptr feat_1, node_ptr feat_2, unsigned long int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
 
 #endif
diff --git a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/neg_exp/parameterized_negative_exponential.cpp b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/neg_exp/parameterized_negative_exponential.cpp
index a77d222df6c5a98dc6ce2a0cb217ca013171575b..b75078864edea758ac6800ca8d89e99aad444fec 100644
--- a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/neg_exp/parameterized_negative_exponential.cpp
+++ b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/neg_exp/parameterized_negative_exponential.cpp
@@ -2,7 +2,7 @@
 
 BOOST_SERIALIZATION_ASSUME_ABSTRACT(NegExpParamNode)
 
-void generateNegExpParamNode(std::vector<node_ptr>& feat_list, node_ptr feat, int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer)
+void generateNegExpParamNode(std::vector<node_ptr>& feat_list, node_ptr feat, unsigned long int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer)
 {
     ++feat_ind;
 
@@ -23,7 +23,7 @@ void generateNegExpParamNode(std::vector<node_ptr>& feat_list, node_ptr feat, in
 NegExpParamNode::NegExpParamNode()
 {}
 
-NegExpParamNode::NegExpParamNode(node_ptr feat, int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer) :
+NegExpParamNode::NegExpParamNode(node_ptr feat, unsigned long int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer) :
     NegExpNode(feat, feat_ind)
 {
     if((feat->type() == NODE_TYPE::NEG_EXP) || (feat->type() == NODE_TYPE::EXP) || (feat->type() == NODE_TYPE::ADD) || (feat->type() == NODE_TYPE::SUB) || (feat->type() == NODE_TYPE::LOG))
@@ -36,14 +36,14 @@ NegExpParamNode::NegExpParamNode(node_ptr feat, int feat_ind, double l_bound, do
         throw InvalidFeatureException();
 }
 
-NegExpParamNode::NegExpParamNode(node_ptr feat, int feat_ind, std::shared_ptr<NLOptimizer> optimizer) :
+NegExpParamNode::NegExpParamNode(node_ptr feat, unsigned long int feat_ind, std::shared_ptr<NLOptimizer> optimizer) :
     NegExpNode(feat, feat_ind)
 {
     _params.resize(n_params(),  0.0);
     get_parameters(optimizer);
 }
 
-NegExpParamNode::NegExpParamNode(node_ptr feat, int feat_ind, double l_bound, double u_bound) :
+NegExpParamNode::NegExpParamNode(node_ptr feat, unsigned long int feat_ind, double l_bound, double u_bound) :
     NegExpNode(feat, feat_ind)
 {
     _params.resize(n_params(),  0.0);
diff --git a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/neg_exp/parameterized_negative_exponential.hpp b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/neg_exp/parameterized_negative_exponential.hpp
index 920c1132f04337f9a0d5a954205a42dabc2f1e57..51d2cac2914274e8658cb67acc147dd9592a6276 100644
--- a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/neg_exp/parameterized_negative_exponential.hpp
+++ b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/neg_exp/parameterized_negative_exponential.hpp
@@ -60,7 +60,7 @@ public:
      * @param u_bound Maximum absolute value allowed for the feature.
      * @param prop The property to fit to
      */
-    NegExpParamNode(node_ptr feat, int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
+    NegExpParamNode(node_ptr feat, unsigned long int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
 
     /**
      * @brief Constructor
@@ -70,7 +70,7 @@ public:
      * @param feat_ind Index of the new feature
      * @param prop The property to fit to
      */
-    NegExpParamNode(node_ptr feat, int feat_ind, std::shared_ptr<NLOptimizer> optimizer);
+    NegExpParamNode(node_ptr feat, unsigned long int feat_ind, std::shared_ptr<NLOptimizer> optimizer);
 
     /**
      * @brief Constructor
@@ -82,7 +82,7 @@ public:
      * @param u_bound Maximum absolute value allowed for the feature.
      * @param param_list The list of parameters to optimize using non-linear least squares
      */
-    NegExpParamNode(node_ptr feat, int feat_ind, double l_bound=1e-50, double u_bound=1e50);
+    NegExpParamNode(node_ptr feat, unsigned long int feat_ind, double l_bound=1e-50, double u_bound=1e50);
 
     // DocString: neg_exp_param_node_set_value
     /**
@@ -181,6 +181,6 @@ public:
     }
 };
 
-void generateNegExpParamNode(std::vector<node_ptr>& feat_list, node_ptr feat, int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
+void generateNegExpParamNode(std::vector<node_ptr>& feat_list, node_ptr feat, unsigned long int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
 
 #endif
diff --git a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/sin/parameterized_sin.cpp b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/sin/parameterized_sin.cpp
index f8402ef73e85939bf377fdbadbb5225c6155da17..faf8b667c29a322252c99876b2873c01ee654b0e 100644
--- a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/sin/parameterized_sin.cpp
+++ b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/sin/parameterized_sin.cpp
@@ -2,7 +2,7 @@
 
 BOOST_SERIALIZATION_ASSUME_ABSTRACT(SinParamNode)
 
-void generateSinParamNode(std::vector<node_ptr>& feat_list, node_ptr feat, int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer)
+void generateSinParamNode(std::vector<node_ptr>& feat_list, node_ptr feat, unsigned long int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer)
 {
     ++feat_ind;
 
@@ -23,7 +23,7 @@ void generateSinParamNode(std::vector<node_ptr>& feat_list, node_ptr feat, int&
 SinParamNode::SinParamNode()
 {}
 
-SinParamNode::SinParamNode(node_ptr feat, int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer) :
+SinParamNode::SinParamNode(node_ptr feat, unsigned long int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer) :
     SinNode(feat, feat_ind)
 {
     if((feat->type() == NODE_TYPE::SIN) || (feat->type() == NODE_TYPE::COS))
@@ -36,14 +36,14 @@ SinParamNode::SinParamNode(node_ptr feat, int feat_ind, double l_bound, double u
         throw InvalidFeatureException();
 }
 
-SinParamNode::SinParamNode(node_ptr feat, int feat_ind, std::shared_ptr<NLOptimizer> optimizer) :
+SinParamNode::SinParamNode(node_ptr feat, unsigned long int feat_ind, std::shared_ptr<NLOptimizer> optimizer) :
     SinNode(feat, feat_ind)
 {
     _params.resize(n_params(), 0.0);
     get_parameters(optimizer);
 }
 
-SinParamNode::SinParamNode(node_ptr feat, int feat_ind, double l_bound, double u_bound) :
+SinParamNode::SinParamNode(node_ptr feat, unsigned long int feat_ind, double l_bound, double u_bound) :
     SinNode(feat, feat_ind)
 {
     _params.resize(n_params(), 0.0);
diff --git a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/sin/parameterized_sin.hpp b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/sin/parameterized_sin.hpp
index 06df38e42453ddb53446dcb524259a5ee282d9ea..a904961674e3833d6c7951cae37a5f72bde2aca1 100644
--- a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/sin/parameterized_sin.hpp
+++ b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/sin/parameterized_sin.hpp
@@ -60,7 +60,7 @@ public:
      * @param u_bound Maximum absolute value allowed for the feature.
      * @param prop The property to fit to
      */
-    SinParamNode(node_ptr feat, int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
+    SinParamNode(node_ptr feat, unsigned long int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
 
     /**
      * @brief Constructor
@@ -70,7 +70,7 @@ public:
      * @param feat_ind Index of the new feature
      * @param prop The property to fit to
      */
-    SinParamNode(node_ptr feat, int feat_ind, std::shared_ptr<NLOptimizer> optimizer);
+    SinParamNode(node_ptr feat, unsigned long int feat_ind, std::shared_ptr<NLOptimizer> optimizer);
 
     /**
      * @brief Constructor
@@ -82,7 +82,7 @@ public:
      * @param u_bound Maximum absolute value allowed for the feature.
      * @param param_list The list of parameters to optimize using non-linear least squares
      */
-    SinParamNode(node_ptr feat, int feat_ind, double l_bound=1e-50, double u_bound=1e50);
+    SinParamNode(node_ptr feat, unsigned long int feat_ind, double l_bound=1e-50, double u_bound=1e50);
 
     // DocString: sin_param_node_set_value
     /**
@@ -181,6 +181,6 @@ public:
     }
 };
 
-void generateSinParamNode(std::vector<node_ptr>& feat_list, node_ptr feat, int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
+void generateSinParamNode(std::vector<node_ptr>& feat_list, node_ptr feat, unsigned long int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
 
 #endif
diff --git a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/six_pow/parameterized_sixth_power.cpp b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/six_pow/parameterized_sixth_power.cpp
index f49fa9717e77ed362a7ffbeeff376781e9e1a5ef..49a5e2e01186d04b62dcddf5897e23efcdab6698 100644
--- a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/six_pow/parameterized_sixth_power.cpp
+++ b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/six_pow/parameterized_sixth_power.cpp
@@ -2,7 +2,7 @@
 
 BOOST_SERIALIZATION_ASSUME_ABSTRACT(SixPowParamNode)
 
-void generateSixPowParamNode(std::vector<node_ptr>& feat_list, node_ptr feat, int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer)
+void generateSixPowParamNode(std::vector<node_ptr>& feat_list, node_ptr feat, unsigned long int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer)
 {
     ++feat_ind;
     node_ptr new_feat = std::make_shared<SixPowParamNode>(feat, feat_ind, optimizer);
@@ -19,7 +19,7 @@ void generateSixPowParamNode(std::vector<node_ptr>& feat_list, node_ptr feat, in
 SixPowParamNode::SixPowParamNode()
 {}
 
-SixPowParamNode::SixPowParamNode(node_ptr feat, int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer) :
+SixPowParamNode::SixPowParamNode(node_ptr feat, unsigned long int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer) :
     SixPowNode(feat, feat_ind)
 {
     _params.resize(n_params(), 0.0);
@@ -29,14 +29,14 @@ SixPowParamNode::SixPowParamNode(node_ptr feat, int feat_ind, double l_bound, do
         throw InvalidFeatureException();
 }
 
-SixPowParamNode::SixPowParamNode(node_ptr feat, int feat_ind, std::shared_ptr<NLOptimizer> optimizer) :
+SixPowParamNode::SixPowParamNode(node_ptr feat, unsigned long int feat_ind, std::shared_ptr<NLOptimizer> optimizer) :
     SixPowNode(feat, feat_ind)
 {
     _params.resize(n_params(), 0.0);
     get_parameters(optimizer);
 }
 
-SixPowParamNode::SixPowParamNode(node_ptr feat, int feat_ind, double l_bound, double u_bound) :
+SixPowParamNode::SixPowParamNode(node_ptr feat, unsigned long int feat_ind, double l_bound, double u_bound) :
     SixPowNode(feat, feat_ind)
 {
     _params.resize(n_params(), 0.0);
diff --git a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/six_pow/parameterized_sixth_power.hpp b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/six_pow/parameterized_sixth_power.hpp
index 296f395098293f159b080a3e44be4f9999d8766f..97a3b431ea704946c5e0941d350b31bbc9a38ebd 100644
--- a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/six_pow/parameterized_sixth_power.hpp
+++ b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/six_pow/parameterized_sixth_power.hpp
@@ -61,7 +61,7 @@ public:
      * @param param_list The list of parameters to optimize using non-linear least squares
      * @param prop The property to fit to
      */
-    SixPowParamNode(node_ptr feat, int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
+    SixPowParamNode(node_ptr feat, unsigned long int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
 
     /**
      * @brief Constructor
@@ -71,7 +71,7 @@ public:
      * @param feat_ind Index of the new feature
      * @param prop The property to fit to
      */
-    SixPowParamNode(node_ptr feat, int feat_ind, std::shared_ptr<NLOptimizer> optimizer);
+    SixPowParamNode(node_ptr feat, unsigned long int feat_ind, std::shared_ptr<NLOptimizer> optimizer);
 
     /**
      * @brief Constructor
@@ -83,7 +83,7 @@ public:
      * @param u_bound Maximum absolute value allowed for the feature.
      * @param param_list The list of parameters to optimize using non-linear least squares
      */
-    SixPowParamNode(node_ptr feat, int feat_ind, double l_bound=1e-50, double u_bound=1e50);
+    SixPowParamNode(node_ptr feat, unsigned long int feat_ind, double l_bound=1e-50, double u_bound=1e50);
 
     // DocString: six_pow_param_node_set_value
     /**
@@ -182,6 +182,6 @@ public:
     }
 };
 
-void generateSixPowParamNode(std::vector<node_ptr>& feat_list, node_ptr feat, int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
+void generateSixPowParamNode(std::vector<node_ptr>& feat_list, node_ptr feat, unsigned long int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
 
 #endif
diff --git a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/sq/parameterized_square.cpp b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/sq/parameterized_square.cpp
index 22ebe969ff780e3c46a30e19217269f05005c51d..a2ba568be79622bcc7bffd6e6f7701255b34f6cb 100644
--- a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/sq/parameterized_square.cpp
+++ b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/sq/parameterized_square.cpp
@@ -2,7 +2,7 @@
 
 BOOST_SERIALIZATION_ASSUME_ABSTRACT(SqParamNode)
 
-void generateSqParamNode(std::vector<node_ptr>& feat_list, node_ptr feat, int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer)
+void generateSqParamNode(std::vector<node_ptr>& feat_list, node_ptr feat, unsigned long int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer)
 {
     ++feat_ind;
     node_ptr new_feat = std::make_shared<SqParamNode>(feat, feat_ind, optimizer);
@@ -20,7 +20,7 @@ void generateSqParamNode(std::vector<node_ptr>& feat_list, node_ptr feat, int& f
 SqParamNode::SqParamNode()
 {}
 
-SqParamNode::SqParamNode(node_ptr feat, int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer) :
+SqParamNode::SqParamNode(node_ptr feat, unsigned long int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer) :
     SqNode(feat, feat_ind)
 {
     _params.resize(n_params(), 0.0);
@@ -30,14 +30,14 @@ SqParamNode::SqParamNode(node_ptr feat, int feat_ind, double l_bound, double u_b
         throw InvalidFeatureException();
 }
 
-SqParamNode::SqParamNode(node_ptr feat, int feat_ind, std::shared_ptr<NLOptimizer> optimizer) :
+SqParamNode::SqParamNode(node_ptr feat, unsigned long int feat_ind, std::shared_ptr<NLOptimizer> optimizer) :
     SqNode(feat, feat_ind)
 {
     _params.resize(n_params(), 0.0);
     get_parameters(optimizer);
 }
 
-SqParamNode::SqParamNode(node_ptr feat, int feat_ind, double l_bound, double u_bound) :
+SqParamNode::SqParamNode(node_ptr feat, unsigned long int feat_ind, double l_bound, double u_bound) :
     SqNode(feat, feat_ind)
 {
     _params.resize(n_params(), 0.0);
diff --git a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/sq/parameterized_square.hpp b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/sq/parameterized_square.hpp
index ce3f7a2e35adbada868856e056c6e5710b3369d0..9c5df7c2f788f46c2fb933851aae5db76e11e0df 100644
--- a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/sq/parameterized_square.hpp
+++ b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/sq/parameterized_square.hpp
@@ -60,7 +60,7 @@ public:
      * @param u_bound Maximum absolute value allowed for the feature.
      * @param prop The property to fit to
      */
-    SqParamNode(node_ptr feat, int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
+    SqParamNode(node_ptr feat, unsigned long int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
 
     /**
      * @brief Constructor
@@ -70,7 +70,7 @@ public:
      * @param feat_ind Index of the new feature
      * @param prop The property to fit to
      */
-    SqParamNode(node_ptr feat, int feat_ind, std::shared_ptr<NLOptimizer> optimizer);
+    SqParamNode(node_ptr feat, unsigned long int feat_ind, std::shared_ptr<NLOptimizer> optimizer);
 
     /**
      * @brief Constructor
@@ -82,7 +82,7 @@ public:
      * @param u_bound Maximum absolute value allowed for the feature.
      * @param param_list The list of parameters to optimize using non-linear least squares
      */
-    SqParamNode(node_ptr feat, int feat_ind, double l_bound=1e-50, double u_bound=1e50);
+    SqParamNode(node_ptr feat, unsigned long int feat_ind, double l_bound=1e-50, double u_bound=1e50);
 
     // DocString: sq_param_node_set_value
     /**
@@ -181,6 +181,6 @@ public:
     }
 };
 
-void generateSqParamNode(std::vector<node_ptr>& feat_list, node_ptr feat, int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
+void generateSqParamNode(std::vector<node_ptr>& feat_list, node_ptr feat, unsigned long int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
 
 #endif
diff --git a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/sqrt/parameterized_square_root.cpp b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/sqrt/parameterized_square_root.cpp
index 8a027e9f38609361ecd13eade5a0e96ee0d39c69..4253636afb2c1184fde7ee22b705316345c2315c 100644
--- a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/sqrt/parameterized_square_root.cpp
+++ b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/sqrt/parameterized_square_root.cpp
@@ -2,7 +2,7 @@
 
 BOOST_SERIALIZATION_ASSUME_ABSTRACT(SqrtParamNode)
 
-void generateSqrtParamNode(std::vector<node_ptr>& feat_list, node_ptr feat, int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer)
+void generateSqrtParamNode(std::vector<node_ptr>& feat_list, node_ptr feat, unsigned long int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer)
 {
     ++feat_ind;
     node_ptr new_feat = std::make_shared<SqrtParamNode>(feat, feat_ind, optimizer);
@@ -20,7 +20,7 @@ void generateSqrtParamNode(std::vector<node_ptr>& feat_list, node_ptr feat, int&
 SqrtParamNode::SqrtParamNode()
 {}
 
-SqrtParamNode::SqrtParamNode(node_ptr feat, int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer) :
+SqrtParamNode::SqrtParamNode(node_ptr feat, unsigned long int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer) :
     SqrtNode(feat, feat_ind),
     _sign_alpha(1.0)
 {
@@ -31,7 +31,7 @@ SqrtParamNode::SqrtParamNode(node_ptr feat, int feat_ind, double l_bound, double
         throw InvalidFeatureException();
 }
 
-SqrtParamNode::SqrtParamNode(node_ptr feat, int feat_ind, std::shared_ptr<NLOptimizer> optimizer) :
+SqrtParamNode::SqrtParamNode(node_ptr feat, unsigned long int feat_ind, std::shared_ptr<NLOptimizer> optimizer) :
     SqrtNode(feat, feat_ind),
     _sign_alpha(1.0)
 {
@@ -39,7 +39,7 @@ SqrtParamNode::SqrtParamNode(node_ptr feat, int feat_ind, std::shared_ptr<NLOpti
     get_parameters(optimizer);
 }
 
-SqrtParamNode::SqrtParamNode(node_ptr feat, int feat_ind, double l_bound, double u_bound) :
+SqrtParamNode::SqrtParamNode(node_ptr feat, unsigned long int feat_ind, double l_bound, double u_bound) :
     SqrtNode(feat, feat_ind),
     _sign_alpha(1.0)
 {
diff --git a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/sqrt/parameterized_square_root.hpp b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/sqrt/parameterized_square_root.hpp
index 173b09e97737d7159697dcee07b6c57e097898a5..a82ab1fb83e20103f63a74ed875f43840257e9fc 100644
--- a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/sqrt/parameterized_square_root.hpp
+++ b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/sqrt/parameterized_square_root.hpp
@@ -62,7 +62,7 @@ public:
      * @param u_bound Maximum absolute value allowed for the feature.
      * @param prop The property to fit to
      */
-    SqrtParamNode(node_ptr feat, int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
+    SqrtParamNode(node_ptr feat, unsigned long int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
 
     /**
      * @brief Constructor
@@ -72,7 +72,7 @@ public:
      * @param feat_ind Index of the new feature
      * @param prop The property to fit to
      */
-    SqrtParamNode(node_ptr feat, int feat_ind, std::shared_ptr<NLOptimizer> optimizer);
+    SqrtParamNode(node_ptr feat, unsigned long int feat_ind, std::shared_ptr<NLOptimizer> optimizer);
 
     /**
      * @brief Constructor
@@ -84,7 +84,7 @@ public:
      * @param u_bound Maximum absolute value allowed for the feature.
      * @param param_list The list of parameters to optimize using non-linear least squares
      */
-    SqrtParamNode(node_ptr feat, int feat_ind, double l_bound=1e-50, double u_bound=1e50);
+    SqrtParamNode(node_ptr feat, unsigned long int feat_ind, double l_bound=1e-50, double u_bound=1e50);
 
     // DocString: sqrt_param_node_set_value
     /**
@@ -191,6 +191,6 @@ public:
     }
 };
 
-void generateSqrtParamNode(std::vector<node_ptr>& feat_list, node_ptr feat, int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
+void generateSqrtParamNode(std::vector<node_ptr>& feat_list, node_ptr feat, unsigned long int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
 
 #endif
diff --git a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/sub/parameterized_subtract.cpp b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/sub/parameterized_subtract.cpp
index e58f28011ea3bc95e18d2970542b1c2592632426..f42ca8934eb616e21a7e537996892f0f0b74e753 100644
--- a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/sub/parameterized_subtract.cpp
+++ b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/sub/parameterized_subtract.cpp
@@ -2,7 +2,7 @@
 
 BOOST_SERIALIZATION_ASSUME_ABSTRACT(SubParamNode)
 
-void generateSubParamNode(std::vector<node_ptr>& feat_list, node_ptr feat_1, node_ptr feat_2, int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer)
+void generateSubParamNode(std::vector<node_ptr>& feat_list, node_ptr feat_1, node_ptr feat_2, unsigned long int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer)
 {
     ++feat_ind;
     node_ptr new_feat = std::make_shared<SubParamNode>(feat_1, feat_2, feat_ind, optimizer);
@@ -20,7 +20,7 @@ void generateSubParamNode(std::vector<node_ptr>& feat_list, node_ptr feat_1, nod
 SubParamNode::SubParamNode()
 {}
 
-SubParamNode::SubParamNode(node_ptr feat_1, node_ptr feat_2, int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer) :
+SubParamNode::SubParamNode(node_ptr feat_1, node_ptr feat_2, unsigned long int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer) :
     SubNode(feat_1, feat_2, feat_ind)
 {
     _params.resize(n_params(), 0.0);
@@ -30,14 +30,14 @@ SubParamNode::SubParamNode(node_ptr feat_1, node_ptr feat_2, int feat_ind, doubl
         throw InvalidFeatureException();
 }
 
-SubParamNode::SubParamNode(node_ptr feat_1, node_ptr feat_2, int feat_ind, std::shared_ptr<NLOptimizer> optimizer) :
+SubParamNode::SubParamNode(node_ptr feat_1, node_ptr feat_2, unsigned long int feat_ind, std::shared_ptr<NLOptimizer> optimizer) :
     SubNode(feat_1, feat_2, feat_ind)
 {
     _params.resize(n_params(), 0.0);
     get_parameters(optimizer);
 }
 
-SubParamNode::SubParamNode(node_ptr feat_1, node_ptr feat_2, int feat_ind, double l_bound, double u_bound) :
+SubParamNode::SubParamNode(node_ptr feat_1, node_ptr feat_2, unsigned long int feat_ind, double l_bound, double u_bound) :
     SubNode(feat_1, feat_2, feat_ind)
 {
     _params.resize(n_params(), 0.0);
diff --git a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/sub/parameterized_subtract.hpp b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/sub/parameterized_subtract.hpp
index 5038b556d9e94ea3786c244f2ca8629c96a7e956..43f7cbb5e73472c86630920a46b5968104968289 100644
--- a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/sub/parameterized_subtract.hpp
+++ b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/sub/parameterized_subtract.hpp
@@ -61,7 +61,7 @@ public:
      * @param u_bound Maximum absolute value allowed for the feature.
      * @param prop The property to fit to
      */
-    SubParamNode(node_ptr feat_1, node_ptr feat_2, int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
+    SubParamNode(node_ptr feat_1, node_ptr feat_2, unsigned long int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
 
     /**
      * @brief Constructor
@@ -72,7 +72,7 @@ public:
      * @param feat_ind Index of the new feature
      * @param prop The property to fit to
      */
-    SubParamNode(node_ptr feat_1, node_ptr feat_2, int feat_ind, std::shared_ptr<NLOptimizer> optimizer);
+    SubParamNode(node_ptr feat_1, node_ptr feat_2, unsigned long int feat_ind, std::shared_ptr<NLOptimizer> optimizer);
 
     /**
      * @brief Constructor
@@ -84,7 +84,7 @@ public:
      * @param u_bound Maximum absolute value allowed for the feature.
      * @param param_list The list of parameters to optimize using non-linear least squares
      */
-    SubParamNode(node_ptr feat_1, node_ptr feat_2, int feat_ind, double l_bound=1e-50, double u_bound=1e50);
+    SubParamNode(node_ptr feat_1, node_ptr feat_2, unsigned long int feat_ind, double l_bound=1e-50, double u_bound=1e50);
 
     // DocString: sub_param_node_set_value
     /**
@@ -184,6 +184,6 @@ public:
     }
 };
 
-void generateSubParamNode(std::vector<node_ptr>& feat_list, node_ptr feat_1, node_ptr feat_2, int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
+void generateSubParamNode(std::vector<node_ptr>& feat_list, node_ptr feat_1, node_ptr feat_2, unsigned long int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
 
 #endif
diff --git a/src/feature_creation/node/operator_nodes/allowed_ops.hpp b/src/feature_creation/node/operator_nodes/allowed_ops.hpp
index e4d5f0ea77f4080ad5322821ddf5b80ac11cb519..af66bd94789e4a2a87f0e7473b5fad41817ff938 100644
--- a/src/feature_creation/node/operator_nodes/allowed_ops.hpp
+++ b/src/feature_creation/node/operator_nodes/allowed_ops.hpp
@@ -52,8 +52,8 @@ typedef std::function<void(std::vector<node_ptr>&, node_ptr, unsigned long int&,
 typedef std::function<void(std::vector<node_ptr>&, node_ptr, node_ptr, unsigned long int&, double, double)> bin_op_node_gen;
 
 #ifdef PARAMETERIZE
-    typedef std::function<void(std::vector<node_ptr>&, node_ptr, int&, double, double, std::shared_ptr<NLOptimizer>)> un_param_op_node_gen;
-    typedef std::function<void(std::vector<node_ptr>&, node_ptr, node_ptr, int&, double, double, std::shared_ptr<NLOptimizer>)> bin_param_op_node_gen;
+    typedef std::function<void(std::vector<node_ptr>&, node_ptr, unsigned long int&, double, double, std::shared_ptr<NLOptimizer>)> un_param_op_node_gen;
+    typedef std::function<void(std::vector<node_ptr>&, node_ptr, node_ptr, unsigned long int&, double, double, std::shared_ptr<NLOptimizer>)> bin_param_op_node_gen;
 #endif
 
 namespace allowed_op_maps
diff --git a/tests/googletest/feature_creation/parameterization/test_abs_diff_node.cc b/tests/googletest/feature_creation/parameterization/test_abs_diff_node.cc
index e784c16ae3b21a0bc289d62eed35759c0bed1dbf..5192a4c8e2ba1691392088f345d87be2a8f1057e 100644
--- a/tests/googletest/feature_creation/parameterization/test_abs_diff_node.cc
+++ b/tests/googletest/feature_creation/parameterization/test_abs_diff_node.cc
@@ -70,7 +70,7 @@ namespace
 
     TEST_F(AbsDiffParamNodeTest, GeneratorTest)
     {
-        int feat_ind = _phi.size();
+        unsigned long int feat_ind = _phi.size();
 
         generateAbsDiffParamNode(_phi, _phi[0], _phi[1], feat_ind, 1e-50, 1e-40, _optimizer);
         EXPECT_EQ(_phi.size(), 2) << " (AbsDiffParamNode created with an absolute value above the upper bound)";
@@ -86,7 +86,7 @@ namespace
 
     TEST_F(AbsDiffParamNodeTest, ConstructorTest)
     {
-        int feat_ind = _phi.size();
+        unsigned long int feat_ind = _phi.size();
 
         try
         {
@@ -125,7 +125,7 @@ namespace
 
     TEST_F(AbsDiffParamNodeTest, AttributesTest)
     {
-        int feat_ind = _phi.size();
+        unsigned long int feat_ind = _phi.size();
         _abs_diff_test = std::make_shared<AbsDiffParamNode>(_phi[0], _phi[1], feat_ind, 1e-50, 1e50, _optimizer);
 
         EXPECT_EQ(_abs_diff_test->rung(), 1);
diff --git a/tests/googletest/feature_creation/parameterization/test_abs_node.cc b/tests/googletest/feature_creation/parameterization/test_abs_node.cc
index 02e27e70f3a1851295a1336ef5c6c43e2730e127..50bb26a4a7e8978652727981d5b89731ecc0ca91 100644
--- a/tests/googletest/feature_creation/parameterization/test_abs_node.cc
+++ b/tests/googletest/feature_creation/parameterization/test_abs_node.cc
@@ -59,7 +59,7 @@ namespace
 
     TEST_F(AbsParamNodeTest, GeneratorTest)
     {
-        int feat_ind = _phi.size();
+        unsigned long int feat_ind = _phi.size();
 
         generateAbsParamNode(_phi, _phi[0], feat_ind, 1e-50, 1e-40, _optimizer);
         EXPECT_EQ(_phi.size(), 1) << " (AbsParamNode created with an absolute value above the upper bound)";
@@ -74,7 +74,7 @@ namespace
 
     TEST_F(AbsParamNodeTest, ConstructorTest)
     {
-        int feat_ind = _phi.size();
+        unsigned long int feat_ind = _phi.size();
 
         try
         {
@@ -105,7 +105,7 @@ namespace
 
     TEST_F(AbsParamNodeTest, AttributesTest)
     {
-        int feat_ind = _phi.size();
+        unsigned long int feat_ind = _phi.size();
         _abs_test = std::make_shared<AbsParamNode>(_phi[0], feat_ind, 1e-50, 1e50, _optimizer);
 
         EXPECT_EQ(_abs_test->rung(), 1);
diff --git a/tests/googletest/feature_creation/parameterization/test_add_node.cc b/tests/googletest/feature_creation/parameterization/test_add_node.cc
index f9c0b85dbce1092d616c10013332c09780136cc6..69542246802a646d79b9a98f6df7fc05691412eb 100644
--- a/tests/googletest/feature_creation/parameterization/test_add_node.cc
+++ b/tests/googletest/feature_creation/parameterization/test_add_node.cc
@@ -69,7 +69,7 @@ namespace
 
     TEST_F(AddParamNodeTest, GeneratorTest)
     {
-        int feat_ind = _phi.size();
+        unsigned long int feat_ind = _phi.size();
 
         generateAddParamNode(_phi, _phi[0], _phi[1], feat_ind, 1e-50, 1e-40, _optimizer);
         EXPECT_EQ(_phi.size(), 2) << " (AddParamNode created with an absolute value above the upper bound)";
@@ -84,7 +84,7 @@ namespace
 
     TEST_F(AddParamNodeTest, ConstructorTest)
     {
-        int feat_ind = _phi.size();
+        unsigned long int feat_ind = _phi.size();
 
         try
         {
@@ -115,7 +115,7 @@ namespace
 
     TEST_F(AddParamNodeTest, AttributesTest)
     {
-        int feat_ind = _phi.size();
+        unsigned long int feat_ind = _phi.size();
         _add_test = std::make_shared<AddParamNode>(_phi[0], _phi[1], feat_ind, 1e-50, 1e50, _optimizer);
 
         EXPECT_EQ(_add_test->rung(), 1);
diff --git a/tests/googletest/feature_creation/parameterization/test_cb_node.cc b/tests/googletest/feature_creation/parameterization/test_cb_node.cc
index 4e40ac2d30a737988143b880cd7ffd50255b8e7a..bb39a233c9a184a6dd9568905b927ac3c8b89d37 100644
--- a/tests/googletest/feature_creation/parameterization/test_cb_node.cc
+++ b/tests/googletest/feature_creation/parameterization/test_cb_node.cc
@@ -69,7 +69,7 @@ namespace
 
     TEST_F(CbParamNodeTest, GeneratorTest)
     {
-        int feat_ind = _phi.size();
+        unsigned long int feat_ind = _phi.size();
 
         generateCbParamNode(_phi, _phi[1], feat_ind, 1e-50, 1e-40, _optimizer);
         EXPECT_EQ(_phi.size(), 2) << " (CbParamNode created with an absolute value above the upper bound)";
@@ -84,7 +84,7 @@ namespace
 
     TEST_F(CbParamNodeTest, ConstructorTest)
     {
-        int feat_ind = _phi.size();
+        unsigned long int feat_ind = _phi.size();
 
         try
         {
@@ -115,7 +115,7 @@ namespace
 
     TEST_F(CbParamNodeTest, AttributesTest)
     {
-        int feat_ind = _phi.size();
+        unsigned long int feat_ind = _phi.size();
         _exp_test = std::make_shared<CbParamNode>(_phi[1], feat_ind, 1e-50, 1e50, _optimizer);
 
         EXPECT_EQ(_exp_test->rung(), 1);
diff --git a/tests/googletest/feature_creation/parameterization/test_cbrt_node.cc b/tests/googletest/feature_creation/parameterization/test_cbrt_node.cc
index 158bd65c0c39b3eb5666ec6ca01065194c3f91c5..40832ec54f713b71f2292a4707b1ec324808ed3e 100644
--- a/tests/googletest/feature_creation/parameterization/test_cbrt_node.cc
+++ b/tests/googletest/feature_creation/parameterization/test_cbrt_node.cc
@@ -69,7 +69,7 @@ namespace
 
     TEST_F(CbrtParamNodeTest, GeneratorTest)
     {
-        int feat_ind = _phi.size();
+        unsigned long int feat_ind = _phi.size();
 
         generateCbrtParamNode(_phi, _phi[1], feat_ind, 1e-50, 1e-40, _optimizer);
         EXPECT_EQ(_phi.size(), 2) << " (CbrtParamNode created with an absolute value above the upper bound)";
@@ -84,7 +84,7 @@ namespace
 
     TEST_F(CbrtParamNodeTest, ConstructorTest)
     {
-        int feat_ind = _phi.size();
+        unsigned long int feat_ind = _phi.size();
 
         try
         {
@@ -115,7 +115,7 @@ namespace
 
     TEST_F(CbrtParamNodeTest, AttributesTest)
     {
-        int feat_ind = _phi.size();
+        unsigned long int feat_ind = _phi.size();
         _cbrt_test = std::make_shared<CbrtParamNode>(_phi[1], feat_ind, 1e-50, 1e50, _optimizer);
 
         EXPECT_EQ(_cbrt_test->rung(), 1);
diff --git a/tests/googletest/feature_creation/parameterization/test_cos_node.cc b/tests/googletest/feature_creation/parameterization/test_cos_node.cc
index 63a1285ef82a0c0ce12c0749de116313244e63db..c3f3092bbd0836b1b8a2255a5eec151de942a142 100644
--- a/tests/googletest/feature_creation/parameterization/test_cos_node.cc
+++ b/tests/googletest/feature_creation/parameterization/test_cos_node.cc
@@ -74,7 +74,7 @@ namespace
 
     TEST_F(CosParamNodeTest, GeneratorTest)
     {
-        int feat_ind = _phi.size();
+        unsigned long int feat_ind = _phi.size();
         int phi_sz = _phi.size();
 
         generateCosParamNode(_phi, _phi[0], feat_ind, 1e-50, 1e-40, _optimizer);
@@ -96,7 +96,7 @@ namespace
 
     TEST_F(CosParamNodeTest, ConstructorTest)
     {
-        int feat_ind = _phi.size();
+        unsigned long int feat_ind = _phi.size();
 
         try
         {
@@ -143,7 +143,7 @@ namespace
 
     TEST_F(CosParamNodeTest, AttributesTest)
     {
-        int feat_ind = _phi.size();
+        unsigned long int feat_ind = _phi.size();
         _cos_test = std::make_shared<CosParamNode>(_phi[1], feat_ind, 1e-50, 1e50, _optimizer);
 
         EXPECT_EQ(_cos_test->rung(), 1);
diff --git a/tests/googletest/feature_creation/parameterization/test_div_node.cc b/tests/googletest/feature_creation/parameterization/test_div_node.cc
index 886d97152bc9d3d736dabbe301975f7b2d8b398b..af77832b925c9e8391951cc11aedbf3601e754b6 100644
--- a/tests/googletest/feature_creation/parameterization/test_div_node.cc
+++ b/tests/googletest/feature_creation/parameterization/test_div_node.cc
@@ -68,7 +68,7 @@ namespace
 
     TEST_F(DivParamNodeTest, GeneratorTest)
     {
-        int feat_ind = _phi.size();
+        unsigned long int feat_ind = _phi.size();
 
         generateDivParamNode(_phi, _phi[0], _phi[1], feat_ind, 1e-50, 1e-40, _optimizer);
         EXPECT_EQ(_phi.size(), 2) << " (DivParamNode created with an absolute value above the upper bound)";
@@ -83,7 +83,7 @@ namespace
 
     TEST_F(DivParamNodeTest, ConstructorTest)
     {
-        int feat_ind = _phi.size();
+        unsigned long int feat_ind = _phi.size();
 
         try
         {
@@ -114,7 +114,7 @@ namespace
 
     TEST_F(DivParamNodeTest, AttributesTest)
     {
-        int feat_ind = _phi.size();
+        unsigned long int feat_ind = _phi.size();
         _div_test = std::make_shared<DivParamNode>(_phi[0], _phi[1], feat_ind, 1e-50, 1e50, _optimizer);
 
         EXPECT_EQ(_div_test->rung(), 1);
diff --git a/tests/googletest/feature_creation/parameterization/test_exp_node.cc b/tests/googletest/feature_creation/parameterization/test_exp_node.cc
index e97ed8c6f38f3e89f4f1ec774746f8a7e5a4aba9..48501675ca71569011a00437b1a557478d719d84 100644
--- a/tests/googletest/feature_creation/parameterization/test_exp_node.cc
+++ b/tests/googletest/feature_creation/parameterization/test_exp_node.cc
@@ -77,7 +77,7 @@ namespace
 
     TEST_F(ExpParamNodeTest, GeneratorTest)
     {
-        int feat_ind = _phi.size();
+        unsigned long int feat_ind = _phi.size();
         int phi_sz = _phi.size();
         generateExpParamNode(_phi, _phi[1], feat_ind, 1e-50, 1e-40, _optimizer);
         EXPECT_EQ(_phi.size(), phi_sz) << " (ExpParamNode created with an absolute value above the upper bound)";
@@ -101,7 +101,7 @@ namespace
 
     TEST_F(ExpParamNodeTest, ConstructorTest)
     {
-        int feat_ind = _phi.size();
+        unsigned long int feat_ind = _phi.size();
 
         try
         {
@@ -156,7 +156,7 @@ namespace
 
     TEST_F(ExpParamNodeTest, AttributesTest)
     {
-        int feat_ind = _phi.size();
+        unsigned long int feat_ind = _phi.size();
         _exp_test = std::make_shared<ExpParamNode>(_phi[1], feat_ind, 1e-50, 1e50, _optimizer);
 
         EXPECT_EQ(_exp_test->rung(), 1);
diff --git a/tests/googletest/feature_creation/parameterization/test_inv_node.cc b/tests/googletest/feature_creation/parameterization/test_inv_node.cc
index 7e62b54ec80480f6b79d82242d48225c0a14fda9..66d76951b8cb38d8aefd5779e1278a5a302ae48a 100644
--- a/tests/googletest/feature_creation/parameterization/test_inv_node.cc
+++ b/tests/googletest/feature_creation/parameterization/test_inv_node.cc
@@ -68,7 +68,7 @@ namespace
 
     TEST_F(InvParamNodeTest, GeneratorTest)
     {
-        int feat_ind = _phi.size();
+        unsigned long int feat_ind = _phi.size();
 
         generateInvParamNode(_phi, _phi[1], feat_ind, 1e-50, 1e-40, _optimizer);
         EXPECT_EQ(_phi.size(), 2) << " (InvParamNode created with an absolute value above the upper bound)";
@@ -83,7 +83,7 @@ namespace
 
     TEST_F(InvParamNodeTest, ConstructorTest)
     {
-        int feat_ind = _phi.size();
+        unsigned long int feat_ind = _phi.size();
 
         try
         {
@@ -114,7 +114,7 @@ namespace
 
     TEST_F(InvParamNodeTest, AttributesTest)
     {
-        int feat_ind = _phi.size();
+        unsigned long int feat_ind = _phi.size();
         _inv_test = std::make_shared<InvParamNode>(_phi[1], feat_ind, 1e-50, 1e50, _optimizer);
 
         EXPECT_EQ(_inv_test->rung(), 1);
diff --git a/tests/googletest/feature_creation/parameterization/test_log_node.cc b/tests/googletest/feature_creation/parameterization/test_log_node.cc
index b7d18a927e7623c2ccd409fbeeccfd26e5ea6c60..609282d41c4e43d0ccdf1d9af0463a2e45fdcd3f 100644
--- a/tests/googletest/feature_creation/parameterization/test_log_node.cc
+++ b/tests/googletest/feature_creation/parameterization/test_log_node.cc
@@ -75,7 +75,7 @@ namespace
 
     TEST_F(LogParamNodeTest, GeneratorTest)
     {
-        int feat_ind = _phi.size();
+        unsigned long int feat_ind = _phi.size();
         int phi_sz = _phi.size();
 
         generateLogParamNode(_phi, _phi[1], feat_ind, 1e-50, 1e-40, _optimizer);
@@ -100,7 +100,7 @@ namespace
 
     TEST_F(LogParamNodeTest, ConstructorTest)
     {
-        int feat_ind = _phi.size();
+        unsigned long int feat_ind = _phi.size();
 
         try
         {
@@ -155,7 +155,7 @@ namespace
 
     TEST_F(LogParamNodeTest, AttributesTest)
     {
-        int feat_ind = _phi.size();
+        unsigned long int feat_ind = _phi.size();
         _exp_test = std::make_shared<LogParamNode>(_phi[1], feat_ind, 1e-50, 1e50, _optimizer);
 
         EXPECT_EQ(_exp_test->rung(), 1);
diff --git a/tests/googletest/feature_creation/parameterization/test_mult_node.cc b/tests/googletest/feature_creation/parameterization/test_mult_node.cc
index 3bebb8828027c50e9e673f3daafd7d2969033c8d..2b1c87405193ebe222eaa591fb542c69679bfc1b 100644
--- a/tests/googletest/feature_creation/parameterization/test_mult_node.cc
+++ b/tests/googletest/feature_creation/parameterization/test_mult_node.cc
@@ -68,7 +68,7 @@ namespace
 
     TEST_F(MultParamNodeTest, GeneratorTest)
     {
-        int feat_ind = _phi.size();
+        unsigned long int feat_ind = _phi.size();
 
         generateMultParamNode(_phi, _phi[0], _phi[1], feat_ind, 1e-50, 1e-40, _optimizer);
         EXPECT_EQ(_phi.size(), 2) << " (MultParamNode created with an absolute value above the upper bound)";
@@ -83,7 +83,7 @@ namespace
 
     TEST_F(MultParamNodeTest, ConstructorTest)
     {
-        int feat_ind = _phi.size();
+        unsigned long int feat_ind = _phi.size();
 
         try
         {
@@ -114,7 +114,7 @@ namespace
 
     TEST_F(MultParamNodeTest, AttributesTest)
     {
-        int feat_ind = _phi.size();
+        unsigned long int feat_ind = _phi.size();
         _mult_test = std::make_shared<MultParamNode>(_phi[0], _phi[1], feat_ind, 1e-50, 1e50, _optimizer);
 
         EXPECT_EQ(_mult_test->rung(), 1);
diff --git a/tests/googletest/feature_creation/parameterization/test_neg_exp_node.cc b/tests/googletest/feature_creation/parameterization/test_neg_exp_node.cc
index bdb1171edd4e94bc1797ed5000904f7a9d04fcba..7d46a7b037c2c779ae0b0b740718d1e506d13511 100644
--- a/tests/googletest/feature_creation/parameterization/test_neg_exp_node.cc
+++ b/tests/googletest/feature_creation/parameterization/test_neg_exp_node.cc
@@ -77,7 +77,7 @@ namespace
 
     TEST_F(NegExpParamNodeTest, GeneratorTest)
     {
-        int feat_ind = _phi.size();
+        unsigned long int feat_ind = _phi.size();
         int phi_sz = _phi.size();
         generateNegExpParamNode(_phi, _phi[1], feat_ind, 1e-50, 1e-40, _optimizer);
         EXPECT_EQ(_phi.size(), phi_sz) << " (NegExpParamNode created with an absolute value above the upper bound)";
@@ -102,7 +102,7 @@ namespace
 
     TEST_F(NegExpParamNodeTest, ConstructorTest)
     {
-        int feat_ind = _phi.size();
+        unsigned long int feat_ind = _phi.size();
 
         try
         {
@@ -157,7 +157,7 @@ namespace
 
     TEST_F(NegExpParamNodeTest, AttributesTest)
     {
-        int feat_ind = _phi.size();
+        unsigned long int feat_ind = _phi.size();
         _exp_test = std::make_shared<NegExpParamNode>(_phi[1], feat_ind, 1e-50, 1e50, _optimizer);
 
         EXPECT_EQ(_exp_test->rung(), 1);
diff --git a/tests/googletest/feature_creation/parameterization/test_sin_node.cc b/tests/googletest/feature_creation/parameterization/test_sin_node.cc
index 46a100c25ce0592be7d2d241f05a990c7d9df2a0..0f4df794350129181ca922a28e35d3e3c05a1872 100644
--- a/tests/googletest/feature_creation/parameterization/test_sin_node.cc
+++ b/tests/googletest/feature_creation/parameterization/test_sin_node.cc
@@ -74,7 +74,7 @@ namespace
 
     TEST_F(SinParamNodeTest, GeneratorTest)
     {
-        int feat_ind = _phi.size();
+        unsigned long int feat_ind = _phi.size();
         int phi_sz = _phi.size();
 
         generateSinParamNode(_phi, _phi[0], feat_ind, 1e-50, 1e-40, _optimizer);
@@ -96,7 +96,7 @@ namespace
 
     TEST_F(SinParamNodeTest, ConstructorTest)
     {
-        int feat_ind = _phi.size();
+        unsigned long int feat_ind = _phi.size();
 
         try
         {
@@ -143,7 +143,7 @@ namespace
 
     TEST_F(SinParamNodeTest, AttributesTest)
     {
-        int feat_ind = _phi.size();
+        unsigned long int feat_ind = _phi.size();
         _sin_test = std::make_shared<SinParamNode>(_phi[0], feat_ind, 1e-50, 1e50, _optimizer);
 
         EXPECT_EQ(_sin_test->rung(), 1);
diff --git a/tests/googletest/feature_creation/parameterization/test_six_pow_node.cc b/tests/googletest/feature_creation/parameterization/test_six_pow_node.cc
index 6bc1fd413127d5ad7f9c59ff6e150ce9cb117f51..07d41eec3d34fd367f09d36833d0e1ed83038286 100644
--- a/tests/googletest/feature_creation/parameterization/test_six_pow_node.cc
+++ b/tests/googletest/feature_creation/parameterization/test_six_pow_node.cc
@@ -68,7 +68,7 @@ namespace
 
     TEST_F(SixPowParamNodeTest, GeneratorTest)
     {
-        int feat_ind = _phi.size();
+        unsigned long int feat_ind = _phi.size();
 
         generateSixPowParamNode(_phi, _phi[1], feat_ind, 1e-50, 1e-40, _optimizer);
         EXPECT_EQ(_phi.size(), 2) << " (SixPowParamNode created with an absolute value above the upper bound)";
@@ -83,7 +83,7 @@ namespace
 
     TEST_F(SixPowParamNodeTest, ConstructorTest)
     {
-        int feat_ind = _phi.size();
+        unsigned long int feat_ind = _phi.size();
 
         try
         {
@@ -114,7 +114,7 @@ namespace
 
     TEST_F(SixPowParamNodeTest, AttributesTest)
     {
-        int feat_ind = _phi.size();
+        unsigned long int feat_ind = _phi.size();
         _exp_test = std::make_shared<SixPowParamNode>(_phi[1], feat_ind, 1e-50, 1e50, _optimizer);
 
         EXPECT_EQ(_exp_test->rung(), 1);
diff --git a/tests/googletest/feature_creation/parameterization/test_sq_node.cc b/tests/googletest/feature_creation/parameterization/test_sq_node.cc
index 93c884561c6af7a435fd9a896118dde0c92ba17f..38edb030d6b5c8bde5ae10e53e1202f965644bd7 100644
--- a/tests/googletest/feature_creation/parameterization/test_sq_node.cc
+++ b/tests/googletest/feature_creation/parameterization/test_sq_node.cc
@@ -68,7 +68,7 @@ namespace
 
     TEST_F(SqParamNodeTest, GeneratorTest)
     {
-        int feat_ind = _phi.size();
+        unsigned long int feat_ind = _phi.size();
 
         generateSqParamNode(_phi, _phi[1], feat_ind, 1e-50, 1e-40, _optimizer);
         EXPECT_EQ(_phi.size(), 2) << " (SqParamNode created with an absolute value above the upper bound)";
@@ -83,7 +83,7 @@ namespace
 
     TEST_F(SqParamNodeTest, ConstructorTest)
     {
-        int feat_ind = _phi.size();
+        unsigned long int feat_ind = _phi.size();
 
         try
         {
@@ -114,7 +114,7 @@ namespace
 
     TEST_F(SqParamNodeTest, AttributesTest)
     {
-        int feat_ind = _phi.size();
+        unsigned long int feat_ind = _phi.size();
         _exp_test = std::make_shared<SqParamNode>(_phi[1], feat_ind, 1e-50, 1e50, _optimizer);
 
         EXPECT_EQ(_exp_test->rung(), 1);
diff --git a/tests/googletest/feature_creation/parameterization/test_sqrt_node.cc b/tests/googletest/feature_creation/parameterization/test_sqrt_node.cc
index 1cd2a4c1b84b1cb42072339ab1964309e419dba9..4d3772350cd69c197eedae522880e0fe8927fc37 100644
--- a/tests/googletest/feature_creation/parameterization/test_sqrt_node.cc
+++ b/tests/googletest/feature_creation/parameterization/test_sqrt_node.cc
@@ -68,7 +68,7 @@ namespace
 
     TEST_F(SqrtParamNodeTest, GeneratorTest)
     {
-        int feat_ind = _phi.size();
+        unsigned long int feat_ind = _phi.size();
 
         generateSqrtParamNode(_phi, _phi[1], feat_ind, 1e-50, 1e-40, _optimizer);
         EXPECT_EQ(_phi.size(), 2) << " (SqrtParamNode created with an absolute value above the upper bound)";
@@ -83,7 +83,7 @@ namespace
 
     TEST_F(SqrtParamNodeTest, ConstructorTest)
     {
-        int feat_ind = _phi.size();
+        unsigned long int feat_ind = _phi.size();
 
         try
         {
@@ -114,7 +114,7 @@ namespace
 
     TEST_F(SqrtParamNodeTest, AttributesTest)
     {
-        int feat_ind = _phi.size();
+        unsigned long int feat_ind = _phi.size();
         _sqrt_test = std::make_shared<SqrtParamNode>(_phi[1], feat_ind, 1e-50, 1e50, _optimizer);
 
         EXPECT_EQ(_sqrt_test->rung(), 1);
diff --git a/tests/googletest/feature_creation/parameterization/test_sub_node.cc b/tests/googletest/feature_creation/parameterization/test_sub_node.cc
index 1e2c57c221ffe5aa25e91422ad30952fcd110b9a..6bee32dd1d6536a09ee654d3f923ac54500997d8 100644
--- a/tests/googletest/feature_creation/parameterization/test_sub_node.cc
+++ b/tests/googletest/feature_creation/parameterization/test_sub_node.cc
@@ -69,7 +69,7 @@ namespace
 
     TEST_F(SubParamNodeTest, GeneratorTest)
     {
-        int feat_ind = _phi.size();
+        unsigned long int feat_ind = _phi.size();
 
         generateSubParamNode(_phi, _phi[0], _phi[1], feat_ind, 1e-50, 1e-40, _optimizer);
         EXPECT_EQ(_phi.size(), 2) << " (SubParamNode created with an absolute value above the upper bound)";
@@ -84,7 +84,7 @@ namespace
 
     TEST_F(SubParamNodeTest, ConstructorTest)
     {
-        int feat_ind = _phi.size();
+        unsigned long int feat_ind = _phi.size();
 
         try
         {
@@ -115,7 +115,7 @@ namespace
 
     TEST_F(SubParamNodeTest, AttributesTest)
     {
-        int feat_ind = _phi.size();
+        unsigned long int feat_ind = _phi.size();
         _sub_test = std::make_shared<SubParamNode>(_phi[0], _phi[1], feat_ind, 1e-50, 1e50, _optimizer);
 
         EXPECT_EQ(_sub_test->rung(), 1);