diff --git a/src/classification/prop_sorted_d_mat.cpp b/src/classification/prop_sorted_d_mat.cpp
index 386ca307f8e491723476337b54f6083490d87821..8d10aa70ea643a0c9b216464474ff39ec23a4b47 100644
--- a/src/classification/prop_sorted_d_mat.cpp
+++ b/src/classification/prop_sorted_d_mat.cpp
@@ -31,7 +31,7 @@ int prop_sorted_d_mat::N_CLASS = 0;
 int prop_sorted_d_mat::N_FEATURES = 0;
 int prop_sorted_d_mat::N_SAMPLES = 0;
 
-void prop_sorted_d_mat::initialize_sroted_d_matrix_arr(int n_feat, int n_task, int n_class, std::vector<int> n_samples_per_class)
+void prop_sorted_d_mat::initialize_sorted_d_matrix_arr(int n_feat, int n_task, int n_class, std::vector<int> n_samples_per_class)
 {
     if(n_samples_per_class.size() != n_task * n_class)
     {
@@ -51,11 +51,24 @@ void prop_sorted_d_mat::initialize_sroted_d_matrix_arr(int n_feat, int n_task, i
     }
 
     N_SAMPLES = std::accumulate(N_SAMPLES_PER_CLASS.begin(), N_SAMPLES_PER_CLASS.end(), 0);
-    SORTED_D_MATRIX.resize(N_FEATURES * N_SAMPLES);
+    SORTED_D_MATRIX = std::vector<double>(N_FEATURES * N_SAMPLES, 0.0);
 }
 
-void prop_sorted_d_mat::resize_sroted_d_matrix_arr(int n_feats)
+void prop_sorted_d_mat::resize_sorted_d_matrix_arr(int n_feats)
 {
     N_FEATURES = n_feats;
     SORTED_D_MATRIX.resize(N_FEATURES * N_SAMPLES);
 }
+
+void prop_sorted_d_mat::finalize_sorted_d_matrix_arr()
+{
+    SORTED_D_MATRIX.resize(0);
+
+    CLASS_START.resize(0);
+    N_SAMPLES_PER_CLASS.resize(0);
+
+    N_TASK = 0;
+    N_CLASS = 0;
+    N_FEATURES = 0;
+    N_SAMPLES = 0;
+}
diff --git a/src/classification/prop_sorted_d_mat.hpp b/src/classification/prop_sorted_d_mat.hpp
index acabd3b7c34ae59c315c2ca186d802376c0f851a..95a2725d510b88c0ad0161bfc6a7b58de5651cfd 100644
--- a/src/classification/prop_sorted_d_mat.hpp
+++ b/src/classification/prop_sorted_d_mat.hpp
@@ -48,14 +48,19 @@ namespace prop_sorted_d_mat
      * @param n_class The number of classes
      * @param n_samples_per_class The number of samples in each class/task combination [task * N_TASK * N_CLASS + class]
      */
-    void initialize_sroted_d_matrix_arr(int n_feat, int n_task, int n_class, std::vector<int> n_samples_per_class);
+    void initialize_sorted_d_matrix_arr(int n_feat, int n_task, int n_class, std::vector<int> n_samples_per_class);
 
     /**
      * @brief Resize the descriptor matrix to match the current number of features
      *
      * @param n_feats Number of features to select
      */
-    void resize_sroted_d_matrix_arr(int n_feats);
+    void resize_sorted_d_matrix_arr(int n_feats);
+
+    /**
+     * @brief Restores all global variables to initial state
+     */
+    void finalize_sorted_d_matrix_arr();
 
     /**
      * @brief Get the number of samples in a particular task/class combination
diff --git a/src/descriptor_identifier/solver/SISSOClassifier.cpp b/src/descriptor_identifier/solver/SISSOClassifier.cpp
index 5af8e3eec7183cf6f354a640d37cbcbdc0e70307..589d068f4cb90b781842b82b8afe6bd6f20f063a 100644
--- a/src/descriptor_identifier/solver/SISSOClassifier.cpp
+++ b/src/descriptor_identifier/solver/SISSOClassifier.cpp
@@ -100,7 +100,7 @@ int SISSOClassifier::get_max_error_ind(
 
 void SISSOClassifier::transfer_d_mat_to_sorted() const
 {
-    prop_sorted_d_mat::resize_sroted_d_matrix_arr(node_value_arrs::N_SELECTED);
+    prop_sorted_d_mat::resize_sorted_d_matrix_arr(node_value_arrs::N_SELECTED);
     for(auto& el : _sample_inds_to_sorted_dmat_inds)
     {
         dcopy_(
diff --git a/src/feature_creation/node/value_storage/nodes_value_containers.cpp b/src/feature_creation/node/value_storage/nodes_value_containers.cpp
index c7fa9e35088f3e2a52ae9510727dedcf3d8d7532..55f5d705f9eb11398c655b40cdaccde5425b0eba 100644
--- a/src/feature_creation/node/value_storage/nodes_value_containers.cpp
+++ b/src/feature_creation/node/value_storage/nodes_value_containers.cpp
@@ -245,7 +245,7 @@ void node_value_arrs::resize_d_matrix_arr(const int n_select)
     D_MATRIX.shrink_to_fit();
 }
 
-void node_value_arrs::finialize_values_arr()
+void node_value_arrs::finalize_values_arr()
 {
     N_SELECTED = 0;
     N_SAMPLES = 0;
diff --git a/src/feature_creation/node/value_storage/nodes_value_containers.hpp b/src/feature_creation/node/value_storage/nodes_value_containers.hpp
index 6967d67f50c6ef85cca1d9daec9664429be604a5..0b793bfe4d2668c5d7f8581956ff2b784423de21 100644
--- a/src/feature_creation/node/value_storage/nodes_value_containers.hpp
+++ b/src/feature_creation/node/value_storage/nodes_value_containers.hpp
@@ -76,7 +76,7 @@ namespace node_value_arrs
     /**
      * @brief Resize all storage arrays to be empty
      */
-    void finialize_values_arr();
+    void finalize_values_arr();
 
     /**
      * @brief Initialize all central storage vectors/descriptive variables without changing MAX_RUNG
diff --git a/src/loss_function/LossFunctionConvexHull.cpp b/src/loss_function/LossFunctionConvexHull.cpp
index 6c0750d4cc25fc87079006c8bbf2532a0d7c1930..828b7618c8d93c1241f518a4b78680a989e30e62 100644
--- a/src/loss_function/LossFunctionConvexHull.cpp
+++ b/src/loss_function/LossFunctionConvexHull.cpp
@@ -228,7 +228,7 @@ void LossFunctionConvexHull::setup_lp(bool initialize_sorted_d_mat)
 
     if(prop_sorted_d_mat::N_FEATURES == 0)
     {
-        prop_sorted_d_mat::initialize_sroted_d_matrix_arr(0, _n_task, _n_class, n_samp_per_class);
+        prop_sorted_d_mat::initialize_sorted_d_matrix_arr(0, _n_task, _n_class, n_samp_per_class);
     }
 }
 
diff --git a/src/main.cpp b/src/main.cpp
index 471b6b3c0245bff86f087a6778d6c7845b011947..f9ea45f2097dfd1da2be87e79f49912a3f06d056 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -121,6 +121,8 @@ int main(int argc, char const *argv[])
                 std::cout << sisso.models()[ii][0] << "\n" << std::endl;
             }
         }
+        prop_sorted_d_mat::finalize_sorted_d_matrix_arr();
+        comp_feats::reset_vectors();
     }
     mpi_setup::finalize_mpi_env();
     return 0;
diff --git a/src/mpi_interface/MPI_Ops.cpp b/src/mpi_interface/MPI_Ops.cpp
index dee6afba9a418c5f472e0eb435e44978ea677183..f2b71fed1c239de944218a534ad5633cf4eba24f 100644
--- a/src/mpi_interface/MPI_Ops.cpp
+++ b/src/mpi_interface/MPI_Ops.cpp
@@ -36,16 +36,24 @@ void mpi_reduce_op::set_op(std::string project_type, double cross_cor_max, int n
     if(project_type.compare("classification") == 0)
     {
         if(CROSS_COR_MAX < 0.99999)
+        {
             IS_VALID = comp_feats::valid_feature_against_selected_spearman_mpi_op;
+        }
         else
+        {
             IS_VALID = comp_feats::valid_feature_against_selected_spearman_max_corr_1_mpi_op;
+        }
     }
     else
     {
         if(CROSS_COR_MAX < 0.99999)
+        {
             IS_VALID = comp_feats::valid_feature_against_selected_pearson_mpi_op;
+        }
         else
+        {
             IS_VALID = comp_feats::valid_feature_against_selected_pearson_max_corr_1_mpi_op;
+        }
     }
 }
 
diff --git a/src/python/py_binding_cpp_def/bindings_docstring_keyed.cpp b/src/python/py_binding_cpp_def/bindings_docstring_keyed.cpp
index def747f6734678bd3fd9974872866b7fdab6aa24..524c2926287e5e2e5917cf0c3c01fb53dc6f1918 100644
--- a/src/python/py_binding_cpp_def/bindings_docstring_keyed.cpp
+++ b/src/python/py_binding_cpp_def/bindings_docstring_keyed.cpp
@@ -110,7 +110,7 @@ void sisso::register_all()
 
     def(
         "finalize_values_arr",
-        &node_value_arrs::finialize_values_arr,
+        &node_value_arrs::finalize_values_arr,
         "@DocString_node_vals_finalize@"
     );
 
diff --git a/src/utils/compare_features.cpp b/src/utils/compare_features.cpp
index 52860daa722839fee17a2a299bbfae72dcc0f253..619a6d7aea67d63e7f42481924d47af7d8a8d7da 100644
--- a/src/utils/compare_features.cpp
+++ b/src/utils/compare_features.cpp
@@ -21,7 +21,6 @@
 
 #include "utils/compare_features.hpp"
 #include <iomanip>
-std::vector<double> comp_feats::CORR_CHECK;
 std::vector<double> comp_feats::RANK;
 std::vector<int> comp_feats::INDEX;
 
@@ -64,6 +63,11 @@ void comp_feats::set_is_valid_fxn(
     }
 }
 
+void comp_feats::reset_vectors()
+{
+    RANK.resize(0);
+    INDEX.resize(0);
+}
 
 bool comp_feats::valid_feature_against_selected_pearson_max_corr_1(
     const double* val_ptr,
diff --git a/src/utils/compare_features.hpp b/src/utils/compare_features.hpp
index 9573ae785efc9e0c4ba068bf89ffdff274856798..b0084cb22fafbc17cbbd58c2069b418541b483bf 100644
--- a/src/utils/compare_features.hpp
+++ b/src/utils/compare_features.hpp
@@ -30,7 +30,6 @@ typedef std::tuple<node_ptr, double> node_sc_pair;
 
 namespace comp_feats
 {
-    extern std::vector<double> CORR_CHECK; //!< Vector for storing cross_corelation values
     extern std::vector<double> RANK; //!< Global variable used to store the rank variables for Spearman correlation
     extern std::vector<int> INDEX; //!< Global variable used to store the sorting indexes for Spearman correlation
 
@@ -51,6 +50,11 @@ namespace comp_feats
         std::function<bool(const double*, const int, const double, const std::vector<node_ptr>&, const std::vector<double>&, const double)>& is_valid_feat_list
     );
 
+    /**
+     * @brief Reset the RANK and INDEX vectors to be size 0
+     */
+    void reset_vectors();
+
     /**
      * @brief Checks the feature to see if it is still valid against previously selected features (using the Pearson correlation coefficient with a maximum cross-correlation of 1.0)
      *
diff --git a/tests/googletest/classification/test_convex_hull_1d.cc b/tests/googletest/classification/test_convex_hull_1d.cc
index 6b353c522fdd804900d6be97b2df7326fbaf8d2b..bccf03a1cc3129fdfcbf72b205fff97cd36c8b44 100644
--- a/tests/googletest/classification/test_convex_hull_1d.cc
+++ b/tests/googletest/classification/test_convex_hull_1d.cc
@@ -24,7 +24,6 @@ namespace
     protected:
         void SetUp() override
         {
-            node_value_arrs::initialize_d_matrix_arr();
             mpi_setup::init_mpi_env();
 
             _task_sizes_train = {40, 40};
@@ -68,6 +67,11 @@ namespace
             };
         }
 
+        void TearDown() override
+        {
+            node_value_arrs::finalize_values_arr();
+        }
+
         std::vector<FeatureNode> _phi;
         std::vector<double> _prop;
         std::vector<int> _task_sizes_train;
diff --git a/tests/googletest/classification/test_lp_wrapper.cc b/tests/googletest/classification/test_lp_wrapper.cc
index 50efd6bdec1cb72cac89ce3c7695adf25936ea2b..60d18e159bffe9249c91de829f41c934aefce710 100644
--- a/tests/googletest/classification/test_lp_wrapper.cc
+++ b/tests/googletest/classification/test_lp_wrapper.cc
@@ -25,13 +25,14 @@ namespace
     protected:
         void SetUp() override
         {
-            node_value_arrs::initialize_d_matrix_arr();
             mpi_setup::init_mpi_env();
 
             std::vector<int> task_sizes_train = {80};
             std::vector<int> task_sizes_test = {20};
 
             node_value_arrs::initialize_values_arr(task_sizes_train, task_sizes_test, 2, 2, false);
+            node_value_arrs::initialize_d_matrix_arr();
+            node_value_arrs::resize_d_matrix_arr(2);
 
             std::vector<double> value_1(task_sizes_train[0], 0.0);
             std::vector<double> value_2(task_sizes_train[0], 0.0);
@@ -93,6 +94,7 @@ namespace
                 FeatureNode(1, "B", value_2, test_value_2, Unit("m"))
             };
 
+            _tol = 1e-5;
             _error.resize(80, 0.0);
             _test_error.resize(20, 0.0);
             _task_num = 0;
@@ -104,11 +106,17 @@ namespace
             _samp_per_class = std::vector<int>(4, 20);
             _samp_per_class_test = std::vector<int>(4, 5);
 
-            prop_sorted_d_mat::initialize_sroted_d_matrix_arr(2, 1, 4, _samp_per_class);
+            prop_sorted_d_mat::initialize_sorted_d_matrix_arr(2, 1, 4, _samp_per_class);
             std::copy_n(value_1.data(), value_1.size(), prop_sorted_d_mat::access_sorted_d_matrix(0));
             std::copy_n(value_2.data(), value_2.size(),prop_sorted_d_mat::access_sorted_d_matrix(1));
         }
 
+        void TearDown() override
+        {
+            prop_sorted_d_mat::finalize_sorted_d_matrix_arr();
+            node_value_arrs::finalize_values_arr();
+        }
+
         std::vector<FeatureNode> _phi;
 
         std::vector<double> _error;
diff --git a/tests/googletest/classification/test_prop_sorted_d_mat.cc b/tests/googletest/classification/test_prop_sorted_d_mat.cc
index a6cf0b46496d23ed997d1bfa6c8edcbd08b6b4c3..e61cf3f09c0a9ad0e353ce58f50a5f1a4b76e124 100644
--- a/tests/googletest/classification/test_prop_sorted_d_mat.cc
+++ b/tests/googletest/classification/test_prop_sorted_d_mat.cc
@@ -38,7 +38,7 @@ namespace
 
     TEST_F(PropSOrtedDMatTests, TestSortedDMat)
     {
-        prop_sorted_d_mat::initialize_sroted_d_matrix_arr(1, _n_task, _n_class, _n_samples_per_class);
+        prop_sorted_d_mat::initialize_sorted_d_matrix_arr(1, _n_task, _n_class, _n_samples_per_class);
         EXPECT_EQ(prop_sorted_d_mat::CLASS_START[1], 18);
         EXPECT_EQ(prop_sorted_d_mat::N_SAMPLES_PER_CLASS[1], 19);
         EXPECT_EQ(prop_sorted_d_mat::N_FEATURES, 1);
@@ -47,7 +47,7 @@ namespace
         EXPECT_EQ(prop_sorted_d_mat::N_SAMPLES, std::accumulate(_n_samples_per_class.begin(), _n_samples_per_class.end(), 0));
         EXPECT_EQ(prop_sorted_d_mat::SORTED_D_MATRIX.size(), 80);
 
-        prop_sorted_d_mat::resize_sroted_d_matrix_arr(_n_feat);
+        prop_sorted_d_mat::resize_sorted_d_matrix_arr(_n_feat);
         EXPECT_EQ(prop_sorted_d_mat::N_FEATURES, _n_feat);
         EXPECT_EQ(prop_sorted_d_mat::SORTED_D_MATRIX.size(), 80 * _n_feat);
 
@@ -61,5 +61,6 @@ namespace
 
         prop_sorted_d_mat::access_sample_sorted_d_matrix(2)[0] = 1.5;
         EXPECT_EQ(prop_sorted_d_mat::access_sample_sorted_d_matrix(2, 0, 0)[0], 1.5);
+        prop_sorted_d_mat::finalize_sorted_d_matrix_arr();
     }
 }
diff --git a/tests/googletest/classification/test_svm_wrapper.cc b/tests/googletest/classification/test_svm_wrapper.cc
index d9898c430dfb5df86094c514b1504ec9bdd57142..b55ee6bcc6d4f0808d555c24bda349d82c8067e2 100644
--- a/tests/googletest/classification/test_svm_wrapper.cc
+++ b/tests/googletest/classification/test_svm_wrapper.cc
@@ -113,6 +113,11 @@ namespace
             std::fill_n(_prop_test.begin() + 15, 5, 3.0);
         }
 
+        void TearDown() override
+        {
+            node_value_arrs::finalize_values_arr();
+        }
+
         std::vector<FeatureNode> _phi;
 
         std::vector<double> _prop;
diff --git a/tests/googletest/descriptor_identification/solver/test_sisso_classifier.cc b/tests/googletest/descriptor_identification/solver/test_sisso_classifier.cc
index 84b3790a9e3f8440f78880e3a507fff94b29aa82..1034836027c1629b6bd063584add38f3d4abba64 100644
--- a/tests/googletest/descriptor_identification/solver/test_sisso_classifier.cc
+++ b/tests/googletest/descriptor_identification/solver/test_sisso_classifier.cc
@@ -24,13 +24,13 @@ namespace
         void SetUp() override
         {
             allowed_op_maps::set_node_maps();
-            node_value_arrs::initialize_d_matrix_arr();
             mpi_setup::init_mpi_env();
 
             std::vector<int> task_sizes_train = {80};
             std::vector<int> task_sizes_test = {20};
 
             node_value_arrs::initialize_values_arr(task_sizes_train, task_sizes_test, 3, 2, false);
+            node_value_arrs::initialize_d_matrix_arr();
 
             std::vector<std::string> sample_ids_train(task_sizes_train[0]);
             for(int ii = 0; ii < task_sizes_train[0]; ++ii)
@@ -161,6 +161,12 @@ namespace
             inputs.set_n_models_store(3);
         }
 
+        void TearDown() override
+        {
+            prop_sorted_d_mat::finalize_sorted_d_matrix_arr();
+            node_value_arrs::finalize_values_arr();
+        }
+
         InputParser inputs;
     };
 
diff --git a/tests/googletest/descriptor_identification/solver/test_sisso_log_regressor.cc b/tests/googletest/descriptor_identification/solver/test_sisso_log_regressor.cc
index 35995fcb574b8abb6fcec474d795792f6e7958e3..c738b9a70f2154ffea89d3a8f5f4c30f9175cea6 100644
--- a/tests/googletest/descriptor_identification/solver/test_sisso_log_regressor.cc
+++ b/tests/googletest/descriptor_identification/solver/test_sisso_log_regressor.cc
@@ -24,13 +24,13 @@ namespace
         void SetUp() override
         {
             allowed_op_maps::set_node_maps();
-            node_value_arrs::initialize_d_matrix_arr();
             mpi_setup::init_mpi_env();
 
             std::vector<int> task_sizes_train = {90};
             std::vector<int> task_sizes_test = {10};
 
             node_value_arrs::initialize_values_arr(task_sizes_train, task_sizes_test, 3, 2, false);
+            node_value_arrs::initialize_d_matrix_arr();
 
             std::vector<int> leave_out_inds = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
 
@@ -121,6 +121,12 @@ namespace
             inputs.set_n_residual(2);
             inputs.set_n_models_store(3);
         }
+
+        void TearDown() override
+        {
+            node_value_arrs::finalize_values_arr();
+        }
+
         InputParser inputs;
 
         std::vector<double> _prop;
diff --git a/tests/googletest/descriptor_identification/solver/test_sisso_regressor.cc b/tests/googletest/descriptor_identification/solver/test_sisso_regressor.cc
index 03cdd564a9e1e7aa289208967d0e4b9bb5c5141c..3018b0f64bdea0d8dcc5a8ff53ae84f5435cf9a2 100644
--- a/tests/googletest/descriptor_identification/solver/test_sisso_regressor.cc
+++ b/tests/googletest/descriptor_identification/solver/test_sisso_regressor.cc
@@ -147,6 +147,12 @@ namespace
             inputs.set_n_residual(2);
             inputs.set_n_models_store(3);
         }
+
+        void TearDown() override
+        {
+            node_value_arrs::finalize_values_arr();
+        }
+
         InputParser inputs;
 
         std::vector<double> _prop;
diff --git a/tests/googletest/feature_creation/feature_generation/test_abs_diff_node.cc b/tests/googletest/feature_creation/feature_generation/test_abs_diff_node.cc
index 9668bf16a15d3b82754db809463b3220f8d50a11..e196bd19aa6090665577cee3ce3ac6ec2a140177 100644
--- a/tests/googletest/feature_creation/feature_generation/test_abs_diff_node.cc
+++ b/tests/googletest/feature_creation/feature_generation/test_abs_diff_node.cc
@@ -46,6 +46,11 @@ namespace
             _phi.push_back(std::make_shared<SubNode>(_feat_1, _feat_2, 4, -1e-50, 1e50));
         }
 
+        void TearDown() override
+        {
+            node_value_arrs::finalize_values_arr();
+        }
+
         node_ptr _feat_1;
         node_ptr _feat_2;
         node_ptr _feat_3;
diff --git a/tests/googletest/feature_creation/feature_generation/test_abs_node.cc b/tests/googletest/feature_creation/feature_generation/test_abs_node.cc
index 989b7500af98f03c35dedb27276f18356ce86e6a..d1d5440fa73f0b92f49488f95ae3c7e290082311 100644
--- a/tests/googletest/feature_creation/feature_generation/test_abs_node.cc
+++ b/tests/googletest/feature_creation/feature_generation/test_abs_node.cc
@@ -43,6 +43,11 @@ namespace
             _phi.push_back(std::make_shared<AbsDiffNode>(_feat_1, _feat_3, 3, 1e-50, 1e50));
         }
 
+        void TearDown() override
+        {
+            node_value_arrs::finalize_values_arr();
+        }
+
         node_ptr _feat_1;
         node_ptr _feat_2;
         node_ptr _feat_3;
diff --git a/tests/googletest/feature_creation/feature_generation/test_add_node.cc b/tests/googletest/feature_creation/feature_generation/test_add_node.cc
index 329bb0bc73f31cc1a7d3016c451532eb65aa5653..b50c377427009a83ed5486f134fe2c3ebb063be2 100644
--- a/tests/googletest/feature_creation/feature_generation/test_add_node.cc
+++ b/tests/googletest/feature_creation/feature_generation/test_add_node.cc
@@ -44,6 +44,11 @@ namespace
             _phi.push_back(std::make_shared<SubNode>(_feat_1, _feat_2, 4, -1e-50, 1e50));
         }
 
+        void TearDown() override
+        {
+            node_value_arrs::finalize_values_arr();
+        }
+
         node_ptr _feat_1;
         node_ptr _feat_2;
         node_ptr _feat_3;
diff --git a/tests/googletest/feature_creation/feature_generation/test_cb_node.cc b/tests/googletest/feature_creation/feature_generation/test_cb_node.cc
index a658d9de2c8142d17efa6db8fb953cd606424a7b..0a2ebebef8fc41450022543679351bbbb1c3395e 100644
--- a/tests/googletest/feature_creation/feature_generation/test_cb_node.cc
+++ b/tests/googletest/feature_creation/feature_generation/test_cb_node.cc
@@ -50,6 +50,11 @@ namespace
             _phi.push_back(std::make_shared<CbrtNode>(_feat_1, 11, 1e-50, 1e50));
         }
 
+        void TearDown() override
+        {
+            node_value_arrs::finalize_values_arr();
+        }
+
         node_ptr _feat_1;
         node_ptr _feat_2;
         node_ptr _feat_3;
diff --git a/tests/googletest/feature_creation/feature_generation/test_cbrt_node.cc b/tests/googletest/feature_creation/feature_generation/test_cbrt_node.cc
index 8de70ccc7dbaece3459afde0235cfadda15c5e20..e556cd04146933d1e17f19ee8ae1136a4ef6375c 100644
--- a/tests/googletest/feature_creation/feature_generation/test_cbrt_node.cc
+++ b/tests/googletest/feature_creation/feature_generation/test_cbrt_node.cc
@@ -52,6 +52,11 @@ namespace
             _phi.push_back(std::make_shared<SixPowNode>(_feat_1, 12, 1e-50, 1e50));
         }
 
+        void TearDown() override
+        {
+            node_value_arrs::finalize_values_arr();
+        }
+
         node_ptr _feat_1;
         node_ptr _feat_2;
         node_ptr _feat_3;
diff --git a/tests/googletest/feature_creation/feature_generation/test_cos_node.cc b/tests/googletest/feature_creation/feature_generation/test_cos_node.cc
index 0b54bc0d490fc95cdb227ca6c3d3c075d23eb0df..73ea5c78e59dc3aaf91cc4536cd7b9bc290a7671 100644
--- a/tests/googletest/feature_creation/feature_generation/test_cos_node.cc
+++ b/tests/googletest/feature_creation/feature_generation/test_cos_node.cc
@@ -41,6 +41,11 @@ namespace
             _phi.push_back(std::make_shared<SinNode>(_feat_1, 3, 1e-50, 1e50));
         }
 
+        void TearDown() override
+        {
+            node_value_arrs::finalize_values_arr();
+        }
+
         node_ptr _feat_1;
         node_ptr _feat_2;
         node_ptr _feat_3;
diff --git a/tests/googletest/feature_creation/feature_generation/test_div_node.cc b/tests/googletest/feature_creation/feature_generation/test_div_node.cc
index a90af33f6e60f283c7c04e6f85d912909a9c3bc7..162cb34aa1e35fadb25aa02c59e215b1c00e7f0b 100644
--- a/tests/googletest/feature_creation/feature_generation/test_div_node.cc
+++ b/tests/googletest/feature_creation/feature_generation/test_div_node.cc
@@ -46,6 +46,11 @@ namespace
             _phi.push_back(std::make_shared<InvNode>(_feat_2, 5, -1e-50, 1e50));
         }
 
+        void TearDown() override
+        {
+            node_value_arrs::finalize_values_arr();
+        }
+
         node_ptr _feat_1;
         node_ptr _feat_2;
         node_ptr _feat_3;
diff --git a/tests/googletest/feature_creation/feature_generation/test_exp_node.cc b/tests/googletest/feature_creation/feature_generation/test_exp_node.cc
index 1337adbc4ea7672b686833d5a81a8df356c5ac6d..cb3dff658ded2d68fa3f40511ff3ed362da9988f 100644
--- a/tests/googletest/feature_creation/feature_generation/test_exp_node.cc
+++ b/tests/googletest/feature_creation/feature_generation/test_exp_node.cc
@@ -48,6 +48,11 @@ namespace
             _phi.push_back(std::make_shared<SubNode>(_feat_1, _feat_3, 3, 1e-50, 1e50));
         }
 
+        void TearDown() override
+        {
+            node_value_arrs::finalize_values_arr();
+        }
+
         node_ptr _feat_1;
         node_ptr _feat_2;
         node_ptr _feat_3;
diff --git a/tests/googletest/feature_creation/feature_generation/test_feat_node.cc b/tests/googletest/feature_creation/feature_generation/test_feat_node.cc
index 51480b42dd6fce9cb95f4e4df39b841be095c737..ffa48c9a7f2345892ab39a48044223ed19a05cea 100644
--- a/tests/googletest/feature_creation/feature_generation/test_feat_node.cc
+++ b/tests/googletest/feature_creation/feature_generation/test_feat_node.cc
@@ -34,6 +34,11 @@ namespace
             _test_value_3 =  {5.0};
         }
 
+        void TearDown() override
+        {
+            node_value_arrs::finalize_values_arr();
+        }
+
         std::vector<double> _value_1;
         std::vector<double> _test_value_1;
 
diff --git a/tests/googletest/feature_creation/feature_generation/test_inv_node.cc b/tests/googletest/feature_creation/feature_generation/test_inv_node.cc
index 56f46c633e3a69da63f49cc8d233f052ef54acd2..7eaa5cec0f5c653fdfe874b2b644c7ce29dc9bb3 100644
--- a/tests/googletest/feature_creation/feature_generation/test_inv_node.cc
+++ b/tests/googletest/feature_creation/feature_generation/test_inv_node.cc
@@ -51,6 +51,11 @@ namespace
             _phi.push_back(std::make_shared<DivNode>(_feat_1, _feat_3, 11, 1e-50, 1e50));
         }
 
+        void TearDown() override
+        {
+            node_value_arrs::finalize_values_arr();
+        }
+
         node_ptr _feat_1;
         node_ptr _feat_2;
         node_ptr _feat_3;
diff --git a/tests/googletest/feature_creation/feature_generation/test_log_node.cc b/tests/googletest/feature_creation/feature_generation/test_log_node.cc
index 872d087d46d6189f108079b1d569ad6a7abce9ec..87c67d1fe01c8ada56d699d0a43405111c1763e2 100644
--- a/tests/googletest/feature_creation/feature_generation/test_log_node.cc
+++ b/tests/googletest/feature_creation/feature_generation/test_log_node.cc
@@ -64,6 +64,11 @@ namespace
             _phi.push_back(std::make_shared<SixPowNode>(_feat_1, 13, 1e-50, 1e50));
         }
 
+        void TearDown() override
+        {
+            node_value_arrs::finalize_values_arr();
+        }
+
         node_ptr _feat_1;
         node_ptr _feat_2;
         node_ptr _feat_3;
diff --git a/tests/googletest/feature_creation/feature_generation/test_model_node.cc b/tests/googletest/feature_creation/feature_generation/test_model_node.cc
index 9b50206945ff2139655e1d3d243256021f41eb6d..8b45808d1c48f76fa0be008f4333a570da4ab733 100644
--- a/tests/googletest/feature_creation/feature_generation/test_model_node.cc
+++ b/tests/googletest/feature_creation/feature_generation/test_model_node.cc
@@ -35,6 +35,11 @@ namespace
             _test_value_3 =  {5.0};
         }
 
+        void TearDown() override
+        {
+            node_value_arrs::finalize_values_arr();
+        }
+
         std::vector<double> _value_1;
         std::vector<double> _test_value_1;
 
diff --git a/tests/googletest/feature_creation/feature_generation/test_mult_node.cc b/tests/googletest/feature_creation/feature_generation/test_mult_node.cc
index 411902d32a2198500ca6b0abb7a72dd4b7c657ad..eecf8f70aa1863594069460fed4905138099c142 100644
--- a/tests/googletest/feature_creation/feature_generation/test_mult_node.cc
+++ b/tests/googletest/feature_creation/feature_generation/test_mult_node.cc
@@ -44,6 +44,11 @@ namespace
             _phi.push_back(std::make_shared<DivNode>(_feat_1, _feat_2, 4, -1e-50, 1e50));
         }
 
+        void TearDown() override
+        {
+            node_value_arrs::finalize_values_arr();
+        }
+
         node_ptr _feat_1;
         node_ptr _feat_2;
         node_ptr _feat_3;
diff --git a/tests/googletest/feature_creation/feature_generation/test_neg_exp_node.cc b/tests/googletest/feature_creation/feature_generation/test_neg_exp_node.cc
index 0ed9d1ca6b638f19c0b11f51c29bdb5a866de9fa..55d5707ab8f10bb0edbc41c4da200773761c10b9 100644
--- a/tests/googletest/feature_creation/feature_generation/test_neg_exp_node.cc
+++ b/tests/googletest/feature_creation/feature_generation/test_neg_exp_node.cc
@@ -48,6 +48,11 @@ namespace
             _phi.push_back(std::make_shared<SubNode>(_feat_1, _feat_3, 3, 1e-50, 1e50));
         }
 
+        void TearDown() override
+        {
+            node_value_arrs::finalize_values_arr();
+        }
+
         node_ptr _feat_1;
         node_ptr _feat_2;
         node_ptr _feat_3;
diff --git a/tests/googletest/feature_creation/feature_generation/test_sin_node.cc b/tests/googletest/feature_creation/feature_generation/test_sin_node.cc
index aa4263c51b4971147704332e38339e7b0726a76f..b00850baa4cf805c696e3c55bca4ce3a3ebe3006 100644
--- a/tests/googletest/feature_creation/feature_generation/test_sin_node.cc
+++ b/tests/googletest/feature_creation/feature_generation/test_sin_node.cc
@@ -41,6 +41,11 @@ namespace
             _phi.push_back(std::make_shared<CosNode>(_feat_1, 3, 1e-50, 1e50));
         }
 
+        void TearDown() override
+        {
+            node_value_arrs::finalize_values_arr();
+        }
+
         node_ptr _feat_1;
         node_ptr _feat_2;
         node_ptr _feat_3;
diff --git a/tests/googletest/feature_creation/feature_generation/test_six_pow_node.cc b/tests/googletest/feature_creation/feature_generation/test_six_pow_node.cc
index e5d3d0d81c55a61d9095fcc9f02b9ba2c422edc5..3c5969682566a9352a5f4dbc9f18dfbc5b178430 100644
--- a/tests/googletest/feature_creation/feature_generation/test_six_pow_node.cc
+++ b/tests/googletest/feature_creation/feature_generation/test_six_pow_node.cc
@@ -54,6 +54,11 @@ namespace
             _phi.push_back(std::make_shared<CbNode>(_feat_1, 12, 1e-50, 1e50));
         }
 
+        void TearDown() override
+        {
+            node_value_arrs::finalize_values_arr();
+        }
+
         node_ptr _feat_1;
         node_ptr _feat_2;
         node_ptr _feat_3;
diff --git a/tests/googletest/feature_creation/feature_generation/test_sq_node.cc b/tests/googletest/feature_creation/feature_generation/test_sq_node.cc
index 632899ccba12cab652cade7202268e30b4ae643c..5bf192801366d35351de994f2b0b08b7ee9551c6 100644
--- a/tests/googletest/feature_creation/feature_generation/test_sq_node.cc
+++ b/tests/googletest/feature_creation/feature_generation/test_sq_node.cc
@@ -48,6 +48,11 @@ namespace
             _phi.push_back(std::make_shared<SqrtNode>(_feat_1, 11, 1e-50, 1e50));
         }
 
+        void TearDown() override
+        {
+            node_value_arrs::finalize_values_arr();
+        }
+
         node_ptr _feat_1;
         node_ptr _feat_2;
         node_ptr _feat_3;
diff --git a/tests/googletest/feature_creation/feature_generation/test_sqrt_node.cc b/tests/googletest/feature_creation/feature_generation/test_sqrt_node.cc
index 254fc49d7998fcd2b977622849fc308b3f6a05d3..0e47ee5555ff1d61457bd3f5d97da7ef4a8b7e63 100644
--- a/tests/googletest/feature_creation/feature_generation/test_sqrt_node.cc
+++ b/tests/googletest/feature_creation/feature_generation/test_sqrt_node.cc
@@ -54,6 +54,11 @@ namespace
             _phi.push_back(std::make_shared<SixPowNode>(_feat_1, 12, 1e-50, 1e50));
         }
 
+        void TearDown() override
+        {
+            node_value_arrs::finalize_values_arr();
+        }
+
         node_ptr _feat_1;
         node_ptr _feat_2;
         node_ptr _feat_3;
diff --git a/tests/googletest/feature_creation/feature_generation/test_sub_node.cc b/tests/googletest/feature_creation/feature_generation/test_sub_node.cc
index dc308a944e2d95ef4af2d63ed13a2d48ff47bf8e..f4aad1568d82a9795835493d344c89dccbb0ec96 100644
--- a/tests/googletest/feature_creation/feature_generation/test_sub_node.cc
+++ b/tests/googletest/feature_creation/feature_generation/test_sub_node.cc
@@ -44,6 +44,11 @@ namespace
             _phi.push_back(std::make_shared<AddNode>(_feat_1, _feat_2, 4, -1e-50, 1e50));
         }
 
+        void TearDown() override
+        {
+            node_value_arrs::finalize_values_arr();
+        }
+
         node_ptr _feat_1;
         node_ptr _feat_2;
         node_ptr _feat_3;
diff --git a/tests/googletest/feature_creation/feature_space/test_feat_space.cc b/tests/googletest/feature_creation/feature_space/test_feat_space.cc
index 1d30c91c5e7a3209d780ae31da298ce6101ee168..3d4bc533f772af9f9638ef746d47f54c05bf5eee 100644
--- a/tests/googletest/feature_creation/feature_space/test_feat_space.cc
+++ b/tests/googletest/feature_creation/feature_space/test_feat_space.cc
@@ -23,16 +23,16 @@ namespace
         void SetUp() override
         {
             allowed_op_maps::set_node_maps();
-#ifdef PARAMETERIZE
+            #ifdef PARAMETERIZE
             allowed_op_maps::set_param_node_maps();
-#endif
-            node_value_arrs::initialize_d_matrix_arr();
+            #endif
             mpi_setup::init_mpi_env();
 
             std::vector<int> task_sizes = {5, 5};
             int n_samp = std::accumulate(task_sizes.begin(), task_sizes.end(), 0);
 
             node_value_arrs::initialize_values_arr(task_sizes, {0, 0}, 3, 2, false);
+            node_value_arrs::initialize_d_matrix_arr();
 
             std::vector<double> value_1(n_samp, 0.0);
             std::vector<double> value_2(n_samp, 0.0);
@@ -79,6 +79,11 @@ namespace
             _inputs.set_reparam_residual(false);
         }
 
+        void TearDown() override
+        {
+            node_value_arrs::finalize_values_arr();
+        }
+
         InputParser _inputs;
         std::vector<double> _prop;
         std::vector<double> _prop_log_reg;
@@ -225,5 +230,6 @@ namespace
         EXPECT_LT(std::abs(feat_space.phi()[0]->value()[0] - _inputs.phi_0()[0].value()[0]), 1e-10);
 
         boost::filesystem::remove_all("feature_space/");
+        prop_sorted_d_mat::finalize_sorted_d_matrix_arr();
     }
 }
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 f0688b45524d98ecc17dae85aae169309fc67d5e..79ee8fbd6fcb1cae398d4fac862dbf62818cbd33 100644
--- a/tests/googletest/feature_creation/parameterization/test_abs_diff_node.cc
+++ b/tests/googletest/feature_creation/parameterization/test_abs_diff_node.cc
@@ -72,6 +72,11 @@ namespace
             _optimizer = nlopt_wrapper::get_optimizer("regression",_task_sizes_train, _prop, 1);
         }
 
+        void TearDown() override
+        {
+            node_value_arrs::finalize_values_arr();
+        }
+
         node_ptr _feat_1;
         node_ptr _feat_2;
         node_ptr _abs_diff_test;
diff --git a/tests/googletest/feature_creation/parameterization/test_abs_node.cc b/tests/googletest/feature_creation/parameterization/test_abs_node.cc
index cf7bf7c62e720c135f79ecaaa609c306538e0fdb..a337b3dcaa2f6cb394f7be778565f35f00f4dcd3 100644
--- a/tests/googletest/feature_creation/parameterization/test_abs_node.cc
+++ b/tests/googletest/feature_creation/parameterization/test_abs_node.cc
@@ -61,6 +61,11 @@ namespace
             _optimizer = nlopt_wrapper::get_optimizer("regression",_task_sizes_train, _prop, 1);
         }
 
+        void TearDown() override
+        {
+            node_value_arrs::finalize_values_arr();
+        }
+
         node_ptr _feat_1;
         node_ptr _abs_test;
 
diff --git a/tests/googletest/feature_creation/parameterization/test_add_node.cc b/tests/googletest/feature_creation/parameterization/test_add_node.cc
index 9399eacf28b99ac9b832c9b20c1ab3325556209a..c9b3f000a6f68b91082f48f928607773be06b976 100644
--- a/tests/googletest/feature_creation/parameterization/test_add_node.cc
+++ b/tests/googletest/feature_creation/parameterization/test_add_node.cc
@@ -72,6 +72,11 @@ namespace
             _optimizer = nlopt_wrapper::get_optimizer("regression",_task_sizes_train, _prop, 1);
         }
 
+        void TearDown() override
+        {
+            node_value_arrs::finalize_values_arr();
+        }
+
         node_ptr _feat_1;
         node_ptr _feat_2;
         node_ptr _add_test;
diff --git a/tests/googletest/feature_creation/parameterization/test_cb_node.cc b/tests/googletest/feature_creation/parameterization/test_cb_node.cc
index 81e5d78de8c7fa79a96db2bccb66e89d90a04683..42652870db126a03d6505a963655645206ec2599 100644
--- a/tests/googletest/feature_creation/parameterization/test_cb_node.cc
+++ b/tests/googletest/feature_creation/parameterization/test_cb_node.cc
@@ -75,6 +75,11 @@ namespace
             _optimizer = nlopt_wrapper::get_optimizer("regression",_task_sizes_train, _prop, 1);
         }
 
+        void TearDown() override
+        {
+            node_value_arrs::finalize_values_arr();
+        }
+
         node_ptr _feat_1;
         node_ptr _feat_2;
         node_ptr _exp_test;
diff --git a/tests/googletest/feature_creation/parameterization/test_cbrt_node.cc b/tests/googletest/feature_creation/parameterization/test_cbrt_node.cc
index 6b3c1bef87e643ef452e9ae2f46ceed3a70f193c..80c1fcc5908d4ac8e03c61586f5abda2e2212428 100644
--- a/tests/googletest/feature_creation/parameterization/test_cbrt_node.cc
+++ b/tests/googletest/feature_creation/parameterization/test_cbrt_node.cc
@@ -72,6 +72,11 @@ namespace
             _optimizer = nlopt_wrapper::get_optimizer("regression",_task_sizes_train, _prop, 1);
         }
 
+        void TearDown() override
+        {
+            node_value_arrs::finalize_values_arr();
+        }
+
         node_ptr _feat_1;
         node_ptr _feat_2;
         node_ptr _cbrt_test;
diff --git a/tests/googletest/feature_creation/parameterization/test_cos_node.cc b/tests/googletest/feature_creation/parameterization/test_cos_node.cc
index e8e988ceafafab6bb96dcfbc184b3e060e187464..134b44aec6acce2a85c03e675d52d7caa6cfaeaf 100644
--- a/tests/googletest/feature_creation/parameterization/test_cos_node.cc
+++ b/tests/googletest/feature_creation/parameterization/test_cos_node.cc
@@ -76,6 +76,11 @@ namespace
             _optimizer = nlopt_wrapper::get_optimizer("regression",_task_sizes_train, _prop, 1);
         }
 
+        void TearDown() override
+        {
+            node_value_arrs::finalize_values_arr();
+        }
+
         node_ptr _feat_1;
         node_ptr _feat_2;
         node_ptr _feat_3;
diff --git a/tests/googletest/feature_creation/parameterization/test_div_node.cc b/tests/googletest/feature_creation/parameterization/test_div_node.cc
index 202b05e366d25fa0f22c76c890995916e75476ce..c498c9b187f2979264bad0e5a3ac6c3eb3324efe 100644
--- a/tests/googletest/feature_creation/parameterization/test_div_node.cc
+++ b/tests/googletest/feature_creation/parameterization/test_div_node.cc
@@ -72,6 +72,11 @@ namespace
             _optimizer = nlopt_wrapper::get_optimizer("regression",_task_sizes_train, _prop, 1);
         }
 
+        void TearDown() override
+        {
+            node_value_arrs::finalize_values_arr();
+        }
+
         node_ptr _feat_1;
         node_ptr _feat_2;
         node_ptr _div_test;
diff --git a/tests/googletest/feature_creation/parameterization/test_exp_node.cc b/tests/googletest/feature_creation/parameterization/test_exp_node.cc
index 19008656b7f277f611aa792f236cc71bee70bebd..78940e6ab687744b45b0a8cc218473204c562a51 100644
--- a/tests/googletest/feature_creation/parameterization/test_exp_node.cc
+++ b/tests/googletest/feature_creation/parameterization/test_exp_node.cc
@@ -79,6 +79,11 @@ namespace
             _optimizer = nlopt_wrapper::get_optimizer("regression",_task_sizes_train, _prop, 1);
         }
 
+        void TearDown() override
+        {
+            node_value_arrs::finalize_values_arr();
+        }
+
         node_ptr _feat_1;
         node_ptr _feat_2;
         node_ptr _feat_3;
diff --git a/tests/googletest/feature_creation/parameterization/test_inv_node.cc b/tests/googletest/feature_creation/parameterization/test_inv_node.cc
index cef2d1bb8bb9f5ba768f4835f38e7938ea9a6ada..1341e30885bb7ec9359d3bfa13a1024ef5b1d875 100644
--- a/tests/googletest/feature_creation/parameterization/test_inv_node.cc
+++ b/tests/googletest/feature_creation/parameterization/test_inv_node.cc
@@ -72,6 +72,11 @@ namespace
             _optimizer = nlopt_wrapper::get_optimizer("regression",_task_sizes_train, _prop, 1);
         }
 
+        void TearDown() override
+        {
+            node_value_arrs::finalize_values_arr();
+        }
+
         node_ptr _feat_1;
         node_ptr _feat_2;
         node_ptr _inv_test;
diff --git a/tests/googletest/feature_creation/parameterization/test_log_node.cc b/tests/googletest/feature_creation/parameterization/test_log_node.cc
index dccbf234488cfe2b9c25e28117601ab726fb6e06..4f5d3f4240d3f55b98a3bf7c41e9f1bcda0f305e 100644
--- a/tests/googletest/feature_creation/parameterization/test_log_node.cc
+++ b/tests/googletest/feature_creation/parameterization/test_log_node.cc
@@ -81,6 +81,11 @@ namespace
             _optimizer = nlopt_wrapper::get_optimizer("regression",_task_sizes_train, _prop, 1);
         }
 
+        void TearDown() override
+        {
+            node_value_arrs::finalize_values_arr();
+        }
+
         node_ptr _feat_1;
         node_ptr _feat_2;
         node_ptr _feat_3;
diff --git a/tests/googletest/feature_creation/parameterization/test_mult_node.cc b/tests/googletest/feature_creation/parameterization/test_mult_node.cc
index 9d6759d9dd1d16d79dc46cb6052bb13d5298d008..43a038767f84dfb14c75c51ffef5f57daa537e79 100644
--- a/tests/googletest/feature_creation/parameterization/test_mult_node.cc
+++ b/tests/googletest/feature_creation/parameterization/test_mult_node.cc
@@ -72,6 +72,11 @@ namespace
             _optimizer = nlopt_wrapper::get_optimizer("regression",_task_sizes_train, _prop, 1);
         }
 
+        void TearDown() override
+        {
+            node_value_arrs::finalize_values_arr();
+        }
+
         node_ptr _feat_1;
         node_ptr _feat_2;
         node_ptr _mult_test;
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 cb2ef047e99751d439ac1d96c549294f975b558a..b648a05956a561a8438664dfa567f5ce5a67e123 100644
--- a/tests/googletest/feature_creation/parameterization/test_neg_exp_node.cc
+++ b/tests/googletest/feature_creation/parameterization/test_neg_exp_node.cc
@@ -79,6 +79,11 @@ namespace
             _optimizer = nlopt_wrapper::get_optimizer("regression",_task_sizes_train, _prop, 1);
         }
 
+        void TearDown() override
+        {
+            node_value_arrs::finalize_values_arr();
+        }
+
         node_ptr _feat_1;
         node_ptr _feat_2;
         node_ptr _feat_3;
diff --git a/tests/googletest/feature_creation/parameterization/test_sin_node.cc b/tests/googletest/feature_creation/parameterization/test_sin_node.cc
index 3e3e8f500f2aef3aa2afb2c8b4766c9d0be57b90..ff277add4eabe8c5f49171ee90d5ccaf921e1a5a 100644
--- a/tests/googletest/feature_creation/parameterization/test_sin_node.cc
+++ b/tests/googletest/feature_creation/parameterization/test_sin_node.cc
@@ -76,6 +76,11 @@ namespace
             _optimizer = nlopt_wrapper::get_optimizer("regression",_task_sizes_train, _prop, 1);
         }
 
+        void TearDown() override
+        {
+            node_value_arrs::finalize_values_arr();
+        }
+
         node_ptr _feat_1;
         node_ptr _feat_2;
         node_ptr _feat_3;
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 ca42f461e0f0fae29715f4f69b5d88b33150ac76..b9d7cbf5c043ac180bb43de5b3587deb3c452a80 100644
--- a/tests/googletest/feature_creation/parameterization/test_six_pow_node.cc
+++ b/tests/googletest/feature_creation/parameterization/test_six_pow_node.cc
@@ -71,6 +71,11 @@ namespace
             _optimizer = nlopt_wrapper::get_optimizer("regression",_task_sizes_train, _prop, 1);
         }
 
+        void TearDown() override
+        {
+            node_value_arrs::finalize_values_arr();
+        }
+
         node_ptr _feat_1;
         node_ptr _feat_2;
         node_ptr _six_pow_test;
diff --git a/tests/googletest/feature_creation/parameterization/test_sq_node.cc b/tests/googletest/feature_creation/parameterization/test_sq_node.cc
index 770a055302e35a690894770c5a3339c84d2dc799..03826f667974bb42a4b82bdb0637897baf80f327 100644
--- a/tests/googletest/feature_creation/parameterization/test_sq_node.cc
+++ b/tests/googletest/feature_creation/parameterization/test_sq_node.cc
@@ -71,6 +71,11 @@ namespace
             _optimizer = nlopt_wrapper::get_optimizer("regression",_task_sizes_train, _prop, 1);
         }
 
+        void TearDown() override
+        {
+            node_value_arrs::finalize_values_arr();
+        }
+
         node_ptr _feat_1;
         node_ptr _feat_2;
         node_ptr _sq_test;
diff --git a/tests/googletest/feature_creation/parameterization/test_sqrt_node.cc b/tests/googletest/feature_creation/parameterization/test_sqrt_node.cc
index 91a13a8a33277716c3da4f4d30e9a76b091b5c8d..6df971e4ee6710d2217f33626292cfd4632429ce 100644
--- a/tests/googletest/feature_creation/parameterization/test_sqrt_node.cc
+++ b/tests/googletest/feature_creation/parameterization/test_sqrt_node.cc
@@ -71,6 +71,11 @@ namespace
             _optimizer = nlopt_wrapper::get_optimizer("regression",_task_sizes_train, _prop, 1);
         }
 
+        void TearDown() override
+        {
+            node_value_arrs::finalize_values_arr();
+        }
+
         node_ptr _feat_1;
         node_ptr _feat_2;
         node_ptr _sqrt_test;
diff --git a/tests/googletest/feature_creation/parameterization/test_sub_node.cc b/tests/googletest/feature_creation/parameterization/test_sub_node.cc
index cb936433f63ffb3baa77aa0720067c1ca02d512b..4b74be54e7924fc516c7b96129d7437ff209d51e 100644
--- a/tests/googletest/feature_creation/parameterization/test_sub_node.cc
+++ b/tests/googletest/feature_creation/parameterization/test_sub_node.cc
@@ -71,6 +71,11 @@ namespace
             _optimizer = nlopt_wrapper::get_optimizer("regression",_task_sizes_train, _prop, 1);
         }
 
+        void TearDown() override
+        {
+            node_value_arrs::finalize_values_arr();
+        }
+
         node_ptr _feat_1;
         node_ptr _feat_2;
         node_ptr _sub_test;
diff --git a/tests/googletest/feature_creation/utils/test_utils.cc b/tests/googletest/feature_creation/utils/test_utils.cc
index 5db1d69eca9d6e615d82d5ce05ff52ce12f9b64e..58fa6e5fc5b1c96f29963363fe69f8836114c2c2 100644
--- a/tests/googletest/feature_creation/utils/test_utils.cc
+++ b/tests/googletest/feature_creation/utils/test_utils.cc
@@ -41,6 +41,11 @@ namespace
             _feat_ind = 3;
         }
 
+        void TearDown() override
+        {
+            node_value_arrs::finalize_values_arr();
+        }
+
         std::vector<node_ptr> _phi0;
         unsigned long int _feat_ind;
     };
diff --git a/tests/googletest/feature_creation/value_storage/test_value_storage.cc b/tests/googletest/feature_creation/value_storage/test_value_storage.cc
index edfbe6d03a81e6032d40948beb431140f658adf4..3a6f4aa5a83ad20a19ee2f4051ab611619cfb998 100644
--- a/tests/googletest/feature_creation/value_storage/test_value_storage.cc
+++ b/tests/googletest/feature_creation/value_storage/test_value_storage.cc
@@ -17,6 +17,7 @@
 
 namespace {
 
+
     //test mean calculations
     TEST(ValueStorage, ValueStorageTest)
     {
@@ -87,5 +88,30 @@ namespace {
         std::fill_n(node_value_arrs::TEMP_STORAGE_TEST_REG.data(), node_value_arrs::TEMP_STORAGE_REG.size(), 2.0);
         node_value_arrs::clear_temp_test_reg();
         EXPECT_EQ(node_value_arrs::TEMP_STORAGE_TEST_REG[0], -1);
+
+        node_value_arrs::finalize_values_arr();
+        EXPECT_EQ(node_value_arrs::VALUES_ARR.size(), 0);
+        EXPECT_EQ(node_value_arrs::TEST_VALUES_ARR.size(), 0);
+        EXPECT_EQ(node_value_arrs::TEMP_STORAGE_ARR.size(), 0);
+        EXPECT_EQ(node_value_arrs::TEMP_STORAGE_TEST_ARR.size(), 0);
+        EXPECT_EQ(node_value_arrs::TEMP_STORAGE_REG.size(), 0);
+        EXPECT_EQ(node_value_arrs::TEMP_STORAGE_TEST_REG.size(), 0);
+        EXPECT_EQ(node_value_arrs::PARAM_STORAGE_ARR.size(), 0);
+        EXPECT_EQ(node_value_arrs::PARAM_STORAGE_TEST_ARR.size(), 0);
+        EXPECT_EQ(node_value_arrs::D_MATRIX.size(), 0);
+        EXPECT_EQ(node_value_arrs::TASK_SZ_TRAIN.size(), 0);
+        EXPECT_EQ(node_value_arrs::TASK_START_TRAIN.size(), 0);
+        EXPECT_EQ(node_value_arrs::TASK_SZ_TEST.size(), 0);
+        EXPECT_EQ(node_value_arrs::N_SELECTED, 0);
+        EXPECT_EQ(node_value_arrs::N_SAMPLES, 0);
+        EXPECT_EQ(node_value_arrs::N_SAMPLES_TEST, 0);
+        EXPECT_EQ(node_value_arrs::N_PRIMARY_FEATURES, 0);
+        EXPECT_EQ(node_value_arrs::N_STORE_FEATURES, 0);
+        EXPECT_EQ(node_value_arrs::N_RUNGS_STORED, 0);
+        EXPECT_EQ(node_value_arrs::MAX_RUNG, 0);
+
+        EXPECT_EQ(node_value_arrs::MAX_N_THREADS, omp_get_max_threads());
+        EXPECT_EQ(node_value_arrs::N_OP_SLOTS, 0);
+        EXPECT_EQ(node_value_arrs::N_PARAM_OP_SLOTS, 0);
     }
 }
diff --git a/tests/googletest/inputs/input_parser.cc b/tests/googletest/inputs/input_parser.cc
index df2485dc02cb8c306a6fe4853a73d764f0095e31..d3129f52caa723ee4812013e85f68fcd18a9ec88 100644
--- a/tests/googletest/inputs/input_parser.cc
+++ b/tests/googletest/inputs/input_parser.cc
@@ -22,7 +22,6 @@ namespace
         void SetUp() override
         {
             std::vector<std::string> filepath = str_utils::split_string_trim(__FILE__, "/");
-            node_value_arrs::finialize_values_arr();
             _sample_ids_train = {"a", "b", "c"};
             _sample_ids_test = {"d"};
             _task_names = {"task_1", "task_2"};
@@ -55,7 +54,7 @@ namespace
 
             _fix_intercept = false;
 
-#ifdef PARAMETERIZE
+            #ifdef PARAMETERIZE
             _filename = (
                 str_utils::join("/", filepath.data(), filepath.size() - 1) +
                 "/sisso_param.json"
@@ -69,12 +68,17 @@ namespace
             _global_param_opt = true;
             _reparam_residual = true;
 
-#else
+            #else
             _filename = (
                 str_utils::join("/", filepath.data(), filepath.size() - 1) +
                 "/sisso.json"
             );
-#endif
+            #endif
+        }
+
+        void TearDown() override
+        {
+            node_value_arrs::finalize_values_arr();
         }
 
         std::vector<std::string> _sample_ids_train; //!< Vector storing all sample ids for the training samples
diff --git a/tests/googletest/loss_function/test_convex_hull_loss.cc b/tests/googletest/loss_function/test_convex_hull_loss.cc
index c6dfa722c82d182c6a1dfef7692f36470dd8c6fc..d61e7ad897bb8f754de5dc51bae2f7923e28ba89 100644
--- a/tests/googletest/loss_function/test_convex_hull_loss.cc
+++ b/tests/googletest/loss_function/test_convex_hull_loss.cc
@@ -31,6 +31,7 @@ namespace
             node_value_arrs::initialize_d_matrix_arr();
             node_value_arrs::resize_d_matrix_arr(2);
 
+
             std::vector<double> value_1(_task_sizes_train[0], 0.0);
             std::vector<double> value_2(_task_sizes_train[0], 0.0);
 
@@ -123,6 +124,16 @@ namespace
             std::fill_n(_prop_test.begin() +  5, 5, 1.0);
             std::fill_n(_prop_test.begin() + 10, 5, 2.0);
             std::fill_n(_prop_test.begin() + 15, 5, 3.0);
+
+            prop_sorted_d_mat::initialize_sorted_d_matrix_arr(2, _task_sizes_train.size(), 4, std::vector<int>(4, 20));
+            std::copy_n(value_1.data(), _task_sizes_train[0], prop_sorted_d_mat::access_sorted_d_matrix(0));
+            std::copy_n(value_2.data(), _task_sizes_train[0], prop_sorted_d_mat::access_sorted_d_matrix(1));
+        }
+
+        void TearDown() override
+        {
+            prop_sorted_d_mat::finalize_sorted_d_matrix_arr();
+            node_value_arrs::finalize_values_arr();
         }
 
         std::vector<node_ptr> _phi;
diff --git a/tests/googletest/loss_function/test_log_pearson_loss.cc b/tests/googletest/loss_function/test_log_pearson_loss.cc
index e1426d2cd79b310084de97ac5ac1ac178a3ff43e..85d95f6bade181e827f3b08267592da58776d83e 100644
--- a/tests/googletest/loss_function/test_log_pearson_loss.cc
+++ b/tests/googletest/loss_function/test_log_pearson_loss.cc
@@ -91,6 +91,11 @@ namespace
             std::transform(_prop_test_no_bias.begin(), _prop_test_no_bias.end(), _log_prop_test_no_bias.begin(), [](double p){return std::log(p);});
         }
 
+        void TearDown() override
+        {
+            node_value_arrs::finalize_values_arr();
+        }
+
         std::vector<node_ptr> _phi;
         std::vector<model_node_ptr> _model_phi;
 
diff --git a/tests/googletest/loss_function/test_pearson_loss.cc b/tests/googletest/loss_function/test_pearson_loss.cc
index 7defcc8e745a68f0f0f93db8e51ec9738a033c02..9148c0cd73d2ac7b6237e642ae13f096f215c9c3 100644
--- a/tests/googletest/loss_function/test_pearson_loss.cc
+++ b/tests/googletest/loss_function/test_pearson_loss.cc
@@ -78,6 +78,11 @@ namespace
             std::transform(test_value_1.begin(), test_value_1.end(), test_value_2.begin(), _prop_test_no_bias.begin(), [=](double v0, double v1){return a0 * v0 + a1 * v1;});
         }
 
+        void TearDown() override
+        {
+            node_value_arrs::finalize_values_arr();
+        }
+
         std::vector<node_ptr> _phi;
         std::vector<model_node_ptr> _model_phi;
 
diff --git a/tests/googletest/nl_opt/nl_opt_classifier.cc b/tests/googletest/nl_opt/nl_opt_classifier.cc
index f971630660ca6eba7d7c7c33ff693addfc38f2cb..3e0648cc7e8c9af1293511b56c3b3a62b868bc74 100644
--- a/tests/googletest/nl_opt/nl_opt_classifier.cc
+++ b/tests/googletest/nl_opt/nl_opt_classifier.cc
@@ -59,6 +59,12 @@ namespace
 
             _params = {1.0, 7.5};
         }
+
+        void TearDown() override
+        {
+            node_value_arrs::finalize_values_arr();
+        }
+
         std::vector<int> _task_sizes_train;
         std::vector<double> _prop_train;
         std::vector<double> _params;
diff --git a/tests/googletest/nl_opt/nl_opt_log_regressor.cc b/tests/googletest/nl_opt/nl_opt_log_regressor.cc
index dd7970e0623bb88f5fb814a676e1cbb3361b4071..b019e98e4544d0fce496ae5e4f916b1dcab3084e 100644
--- a/tests/googletest/nl_opt/nl_opt_log_regressor.cc
+++ b/tests/googletest/nl_opt/nl_opt_log_regressor.cc
@@ -53,6 +53,12 @@ namespace
                 [](double val){return std::log(val);}
             );
         }
+
+        void TearDown() override
+        {
+            node_value_arrs::finalize_values_arr();
+        }
+
         std::vector<int> _task_sizes_train;
         std::vector<double> _prop_train;
         std::vector<double> _params;
diff --git a/tests/googletest/nl_opt/nl_opt_regressor.cc b/tests/googletest/nl_opt/nl_opt_regressor.cc
index 670921a9a71d40b0a3b88b4db6699999d7f7d578..ac3e1152f1e7177452b4c1cafeb22b8f03c5f694 100644
--- a/tests/googletest/nl_opt/nl_opt_regressor.cc
+++ b/tests/googletest/nl_opt/nl_opt_regressor.cc
@@ -48,6 +48,12 @@ namespace
             _params = {1.0, distribution_params(generator)};
             std::copy_n(_feat->value_ptr(_params.data()), _task_sizes_train[0], _prop_train.data());
         }
+
+        void TearDown() override
+        {
+            node_value_arrs::finalize_values_arr();
+        }
+
         std::vector<int> _task_sizes_train;
         std::vector<double> _prop_train;
         std::vector<double> _params;
diff --git a/tests/googletest/utils/test_compare_features.cc b/tests/googletest/utils/test_compare_features.cc
index 9826c79cbf010a02b24d1aed2ee1f57d68032d51..a976b7231d6f969bc7795dfbc08c6488f30a60ee 100644
--- a/tests/googletest/utils/test_compare_features.cc
+++ b/tests/googletest/utils/test_compare_features.cc
@@ -43,5 +43,6 @@ namespace {
         EXPECT_TRUE(comp_feats::valid_feature_against_selected_pearson_max_corr_1_feat_list(val_2.data(), 4, 1.0, selected, scores, 0.9028289727756884));
         EXPECT_TRUE(comp_feats::valid_feature_against_selected_pearson(val_2.data(), 4, 1.0, scores, 0.9028289727756884, 1, 0));
         EXPECT_TRUE(comp_feats::valid_feature_against_selected_pearson_feat_list(val_2.data(), 4, 1.0, selected, scores, 0.9028289727756884));
+        node_value_arrs::finalize_values_arr();
     }
 }
diff --git a/tests/googletest/utils/test_project.cc b/tests/googletest/utils/test_project.cc
index 0f4b70dc1c0eb8e242cfc670b222260d1589b78a..6abbf8098ef83e03d8c31855ef11afe5fe0be282 100644
--- a/tests/googletest/utils/test_project.cc
+++ b/tests/googletest/utils/test_project.cc
@@ -36,5 +36,6 @@ namespace {
         project_funcs::project_r_no_omp(prop.data(), scores.data(), phi, sizes, 1);
         EXPECT_LT(std::abs(-0.9028289727756884 - scores[0]), 1e-10);
         scores[0] = 0.0;
+        node_value_arrs::finalize_values_arr();
     }
 }