diff --git a/src/SymmetryFunction/ACSFParametersOptimizer.cpp b/src/SymmetryFunction/ACSFParametersOptimizer.cpp
index 4d92bedfd4c75fb3c1f933838bc1182e94bbc520..2ddeeb6f155c0b75f4fbced40271416f34e508c2 100644
--- a/src/SymmetryFunction/ACSFParametersOptimizer.cpp
+++ b/src/SymmetryFunction/ACSFParametersOptimizer.cpp
@@ -1,12 +1,14 @@
 //
 // Created by martin on 10.09.19.
 //
-
 #include <algorithm>
 #include <random>
 #include <unordered_map>
 
 #include <armadillo>
+#include <unordered_set>
+
+#include <boost/functional/hash.hpp>
 
 #include "LearningMethods/LevenbergMarquardt.h"
 #include "Reader/XYZReader.h"
@@ -60,8 +62,9 @@ void lib4neuro::ACSFParametersOptimizer::fit_ACSF_parameters(std::vector<SYMMETR
     FullyConnectedFFN nn(&neuron_numbers, &type_hidden_neurons);
 
     /* Initial parameters' values */
+    // TODO take care of parameters' boundaries
     std::unordered_map<SYMMETRY_FUNCTION_PARAMETER, double> init_param_values;
-    std::normal_distribution<> d{1, 10};  // TODO make probability distribution choice more flexible by adding function parameters
+    std::normal_distribution<> d{1, 0.085};  // TODO make probability distribution choice more flexible by adding function parameters
     std::uniform_real_distribution<> d_uni(0, 2);
     std::vector<short int> shift_max_vals = {-1, 1};
     if(random_init_params) {
@@ -146,6 +149,38 @@ void lib4neuro::ACSFParametersOptimizer::fit_ACSF_parameters(std::vector<SYMMETR
             /* Termination condition */
             if(current_error < termination_threshold) {
                 COUT_INFO("Error when optimizing ACSF parameters: " + std::to_string(current_error));
+
+                /* Compute correlation of ACSFs */
+//                this->data_set->get_inputs_matrix()->print();
+                arma::Mat<double> m = arma::cor(*this->data_set->get_inputs_matrix());
+                m.print();
+
+                arma::Col<arma::uword> v = arma::find(m > 0.9);
+                std::unordered_set<std::vector<unsigned long long>, boost::hash<std::vector<unsigned long long>>> correlation_indices;
+                for(size_t k = 0; k < v.size(); k++) {
+                    std::vector<unsigned long long> v_tmp = {v.at(k) % m.n_rows, (unsigned long long)(v.at(k) / m.n_rows)};
+                    if(v_tmp.at(0) == v_tmp.at(1)) {
+                        continue;
+                    }
+                    std::sort(v_tmp.begin(), v_tmp.end());
+                    correlation_indices.insert(v_tmp);
+                }
+
+//                std::unique(correlation_indices.begin(), correlation_indices.end());
+
+                if(!correlation_indices.empty()) {
+                    std::cout <<"WARNING: Following " << correlation_indices.size() << " symmetry function pairs correlate significantly (>0.9):" << std::endl;
+                    unsigned int corr_ind = 0;
+                    for(auto e : correlation_indices) {
+                        std::cout << "{" << e.at(0) << ", " << e.at(1) << "} ";
+                        if(corr_ind % 10 == 9) {
+                            std::cout << std::endl;
+                        }
+                        corr_ind++;
+                    }
+                    std::cout << std::endl;
+                }
+
                 return;
             }