diff --git a/src/feature_creation/feature_space/FeatureSpace.cpp b/src/feature_creation/feature_space/FeatureSpace.cpp
index 813822a44862b66ef4cd23f0826ad8759259d500..83edd2c9d91dc74ca70adb4b4c3cd98f25c93b93 100644
--- a/src/feature_creation/feature_space/FeatureSpace.cpp
+++ b/src/feature_creation/feature_space/FeatureSpace.cpp
@@ -1053,7 +1053,7 @@ void FeatureSpace::generate_and_project(std::shared_ptr<LossFunction> loss, std:
         #endif
         for(auto feat = _phi.begin() + _start_rung.back() + _mpi_comm->rank(); feat < _phi.end(); feat += _mpi_comm->size())
         {
-            unsigned long int feat_ind = _phi.size() + _n_sis_select * (omp_get_num_threads() + _mpi_comm->size());
+            unsigned long int feat_ind = _phi.size() + 2 * _n_sis_select * (omp_get_num_threads() + _mpi_comm->size());
 
             node_value_arrs::clear_temp_reg_thread();
             std::vector<node_ptr> generated_phi;
@@ -1091,6 +1091,7 @@ void FeatureSpace::generate_and_project(std::shared_ptr<LossFunction> loss, std:
 
             while((ii < inds.size()) && ((scores[inds[ii]] < worst_score) || (phi_sel_private.size() < _n_sis_select)))
             {
+                node_value_arrs::clear_temp_reg_thread();
                 double cur_score = scores[inds[ii]];
                 int valid_feat = _is_valid(
                     generated_phi[inds[ii]]->stand_value_ptr(),
@@ -1138,6 +1139,7 @@ void FeatureSpace::generate_and_project(std::shared_ptr<LossFunction> loss, std:
             worst_score_ind = std::max_element(scores_sel.begin(), scores_sel.end()) - scores_sel.begin();
             for(int sc = 0; sc < scores_sel_private.size(); ++sc)
             {
+                node_value_arrs::clear_temp_reg_thread();
                 if(scores_sel_private[sc] > scores_sel[worst_score_ind])
                 {
                     continue;
@@ -1178,7 +1180,7 @@ void FeatureSpace::generate_and_project(std::shared_ptr<LossFunction> loss, std:
     // Go through all features and remove any that were valid, but no longer are due to new better features appearing. If _cross_cor_max == 1.0 then this is not necessary
     if(_cross_cor_max < 0.99999)
     {
-        int index_base = _phi.size() + _n_sis_select * _mpi_comm->rank();
+        int index_base = _phi.size() + 2 * _n_sis_select + _mpi_comm->rank();
         std::vector<int> inds = util_funcs::argsort(scores_sel);
 
         std::vector<node_ptr> phi_sel_copy(phi_sel);
@@ -1193,6 +1195,7 @@ void FeatureSpace::generate_and_project(std::shared_ptr<LossFunction> loss, std:
         int ii = 1;
         while((ii < inds.size()) && (phi_sel.size() < _n_sis_select))
         {
+            node_value_arrs::clear_temp_reg_thread();
             if(
                 _is_valid_feat_list(
                     phi_sel_copy[inds[ii]]->stand_value_ptr(),