diff --git a/src/feature_creation/feature_space/FeatureSpace.cpp b/src/feature_creation/feature_space/FeatureSpace.cpp
index 443a6929f6db7222e08323a18e0a05ed1ead5d7f..90456540daed82e19fa7c35165e995f39ba1c894 100644
--- a/src/feature_creation/feature_space/FeatureSpace.cpp
+++ b/src/feature_creation/feature_space/FeatureSpace.cpp
@@ -568,10 +568,8 @@ void FeatureSpace::sis(std::vector<double>& prop)
     if(node_value_arrs::N_SELECTED > _n_sis_select)
         _project(prop.data(), scores_sel_all.data(), _phi_selected, _task_sizes, prop.size() / _n_samp);
 
-    for(auto& feat : _phi_selected)
-        feat->set_standardized_value();
-
     start = omp_get_wtime();
+    std::cout << "Number of features: " << _start_gen[0] << '\t' << _start_gen[1] << '\t' << _start_gen[2] << '\t' << _n_feat << std::endl;
     while((cur_feat_local != _n_sis_select) && (ii < _scores.size()))
     {
         if(_is_valid(_phi[inds[ii]]->value_ptr(), _n_samp, _cross_cor_max, scores_sel_all, _scores[inds[ii]], cur_feat + cur_feat_local, 0))
@@ -581,7 +579,7 @@ void FeatureSpace::sis(std::vector<double>& prop)
             phi_sel.push_back(_phi[inds[ii]]);
             phi_sel.back()->set_selected(true);
             phi_sel.back()->set_d_mat_ind(cur_feat + cur_feat_local);
-            phi_sel.back()->set_standardized_value();
+            phi_sel.back()->set_value();
 
             ++cur_feat_local;
         }
@@ -722,8 +720,6 @@ void FeatureSpace::sis(std::vector<double>& prop)
             _phi_selected[inds[ii] + node_value_arrs::N_SELECTED - _n_sis_select]->set_value();
             ++cur_feat;
         }
-        for(int ff = 0; ff < node_value_arrs::N_SELECTED - _n_sis_select; ++ff)
-            _phi_selected[ff]->set_value();
     }
     else
     {
@@ -739,14 +735,11 @@ void FeatureSpace::sis(std::vector<double>& prop)
             _phi_selected.push_back(phi_sel[ind]);
             _phi_selected.back()->set_selected(true);
             _phi_selected.back()->set_d_mat_ind(cur_feat);
-            _phi_selected.back()->set_standardized_value();
+            _phi_selected.back()->set_value();
 
             ++cur_feat;
             ++cur_feat_local;
         }
-
-        for(auto& feat : _phi_selected)
-            feat->set_value();
     }
 
     if(cur_feat != node_value_arrs::N_SELECTED)
diff --git a/src/utils/compare_features.cpp b/src/utils/compare_features.cpp
index 8471bf026d66b767470caae442d66b0431f0be86..0f2cce1444971511a4a8b60d1486a7de304b7a92 100644
--- a/src/utils/compare_features.cpp
+++ b/src/utils/compare_features.cpp
@@ -1,29 +1,17 @@
 #include <utils/compare_features.hpp>
 
 std::vector<double> comp_feats::CORR_CHECK;
-
 bool comp_feats::valid_feature_against_selected_max_corr_1(double* val_ptr, int n_samp, double cross_cor_max, std::vector<double>& scores_sel, double cur_score, int end_sel, int start_sel)
 {
     double base_val = util_funcs::r(val_ptr, val_ptr, n_samp);
 
-    if(std::any_of(scores_sel.begin() + start_sel, scores_sel.begin() + end_sel, [cur_score](double score){return std::abs(score - cur_score) < 1e-5;}))
+    for(int dd = start_sel; dd < end_sel; ++dd)
     {
-        double alpha = 1.0 / util_funcs::stand_dev(val_ptr, n_samp);
-        CORR_CHECK.resize(end_sel - start_sel);
-        dgemv_(
-            'T',
-            n_samp,
-            end_sel - start_sel,
-            alpha,
-            node_value_arrs::get_d_matrix_ptr(start_sel),
-            n_samp,
-            val_ptr,
-            1,
-            0.0,
-            comp_feats::CORR_CHECK.data(),
-            1
-        );
-        return (base_val - std::abs(comp_feats::CORR_CHECK[idamax_(end_sel - start_sel, comp_feats::CORR_CHECK.data(), 1) - 1]) > 1e-9);
+        if(abs(cur_score - scores_sel[dd]) > 1e-5)
+            continue;
+
+        if((base_val - std::abs(util_funcs::r(node_value_arrs::get_d_matrix_ptr(dd), val_ptr, n_samp))) < 1e-9)
+            return false;
     }
     return true;
 }
@@ -43,26 +31,22 @@ bool comp_feats::valid_feature_against_selected_max_corr_1_feat_list(double* val
     return true;
 }
 
+
 bool comp_feats::valid_feature_against_selected(double* val_ptr, int n_samp, double cross_cor_max, std::vector<double>& scores_sel, double cur_score, int end_sel, int start_sel)
 {
     double base_val = util_funcs::r(val_ptr, val_ptr, n_samp);
-    double alpha = 1.0 / util_funcs::stand_dev(val_ptr, n_samp);
-
-    CORR_CHECK.resize(end_sel - start_sel);
-    dgemv_(
-        'T',
-        n_samp,
-        end_sel - start_sel,
-        alpha,
-        node_value_arrs::get_d_matrix_ptr(start_sel),
-        n_samp,
-        val_ptr,
-        1,
-        0.0,
-        comp_feats::CORR_CHECK.data(),
-        1
-    );
-    return (base_val - std::abs(comp_feats::CORR_CHECK[idamax_(end_sel - start_sel, comp_feats::CORR_CHECK.data(), 1)]) < (1.0 - cross_cor_max + 1e-10));
+    volatile bool is_valid = true;
+
+    #pragma omp parallel for schedule(dynamic)
+    for(int dd = start_sel; dd < end_sel; ++dd)
+    {
+        if(!is_valid)
+            continue;
+
+        if((base_val - std::abs(util_funcs::r(node_value_arrs::get_d_matrix_ptr(dd), val_ptr, n_samp))) < (1.0 - cross_cor_max + 1e-10))
+            is_valid = false;
+    }
+    return is_valid;
 }
 
 bool comp_feats::valid_feature_against_selected_feat_list(double* val_ptr, int n_samp, double cross_cor_max, std::vector<node_ptr>& selected, std::vector<double>& scores_sel, double cur_score)