diff --git a/src/ErrorFunction/ErrorFunctions.cpp b/src/ErrorFunction/ErrorFunctions.cpp
index e4b386d25f9f1354d6f86dc93fa9bdb6019e2a1c..29d8fa34133835ece828c0c70cc7725854acef89 100644
--- a/src/ErrorFunction/ErrorFunctions.cpp
+++ b/src/ErrorFunction/ErrorFunctions.cpp
@@ -131,8 +131,10 @@ namespace lib4neuro {
             outputs.at(i) = output;
         }
 
+        bool denormalize_output = false;
         if(data_set->is_normalized()) {
             data_set->de_normalize();
+            denormalize_output = true;
         }
 
         for (auto i = 0; i < data->size(); i++) {
@@ -150,7 +152,12 @@ namespace lib4neuro {
 #endif
             double denormalized_output;
             for (size_t j = 0; j < dim_out; ++j) {
-                denormalized_output = data_set->get_normalization_strategy()->de_normalize(outputs.at(i).at(j));
+                if(denormalize_output) {
+                    denormalized_output = data_set->get_normalization_strategy()->de_normalize(outputs.at(i).at(j));
+                } else {
+                    denormalized_output = outputs.at(i).at(j);
+                }
+
 #ifdef L4N_DEBUG
                 ss_real_output << data->at(i).second.at(j);
                 ss_predicted_output << denormalized_output;
@@ -219,15 +226,21 @@ namespace lib4neuro {
             outputs.at(i) = output;
         }
 
+        bool denormalize_output = false;
         if(data_set->is_normalized()) {
             data_set->de_normalize();
+            denormalize_output = true;
         }
 
         for(auto i = 0; i < data->size(); i++) {
             /* Compute difference for every element of the output vector */
             double denormalized_output;
             for (size_t j = 0; j < dim_out; ++j) {
-                denormalized_output = data_set->get_normalization_strategy()->de_normalize(outputs.at(i).at(j));
+                if(denormalize_output) {
+                    denormalized_output = data_set->get_normalization_strategy()->de_normalize(outputs.at(i).at(j));
+                } else {
+                    denormalized_output = outputs.at(i).at(j);
+                }
                 COUT_DEBUG("Element " << i << ": "
                                       << data->at(i).first.at(j) << " "
                                       << data->at(i).second.at(j) << " "
@@ -276,8 +289,10 @@ namespace lib4neuro {
         }
 
         /* De-normalize data-set, if it's normalized */
+        bool denormalize_output = false;
         if(data_set->is_normalized()) {
             data_set->de_normalize();
+            denormalize_output = true;
         }
 
         /* Evaluate the prediction error on de-normalized data */
@@ -286,7 +301,11 @@ namespace lib4neuro {
             /* Compute difference for every element of the output vector */
             double denormalized_output;
             for (auto j = 0; j < dim_out; ++j) {
-                denormalized_output = data_set->get_normalization_strategy()->de_normalize(outputs.at(i).at(j));
+                if(denormalize_output) {
+                    denormalized_output = data_set->get_normalization_strategy()->de_normalize(outputs.at(i).at(j));
+                } else {
+                    denormalized_output = outputs.at(i).at(j);
+                }
                 COUT_DEBUG("Element " << i << ": "
                                       << data->at(i).first.at(j) << " "
                                       << data->at(i).second.at(j) << " "