diff --git a/src/Neuron/Neuron.cpp b/src/Neuron/Neuron.cpp
index 014d1e993c82277d5d9e144ef5ca633fbeec3022..3f8b77f43c0e09f5b5b222642246e991e003ff61 100644
--- a/src/Neuron/Neuron.cpp
+++ b/src/Neuron/Neuron.cpp
@@ -8,4 +8,8 @@ namespace lib4neuro {
 
     }
 
+    double Neuron::get_last_activation_value() {
+        return this->activation_val;
+    }
+
 }
diff --git a/src/Neuron/Neuron.h b/src/Neuron/Neuron.h
index 1fed3ec458cdb5b641da2dd154e9ed156bc0ff3d..88747a63ef073600dae1bce06bf9f34b4f4c0c61 100644
--- a/src/Neuron/Neuron.h
+++ b/src/Neuron/Neuron.h
@@ -30,6 +30,12 @@ namespace lib4neuro {
       */
     class Neuron {
 
+    protected:
+        /**
+         * holds the last value of the activation function, used by this->activate
+         */
+        double activation_val;
+
     public:
 
         /**
@@ -50,6 +56,12 @@ namespace lib4neuro {
          */
         LIB4NEURO_API virtual double activate(double x, double b) = 0;
 
+        /**
+         * returns the last value of the actual activation function output for this neuron
+         * @return
+         */
+        LIB4NEURO_API virtual double get_last_activation_value( );
+
     }; /* end of Neuron class */
 
 
diff --git a/src/Neuron/NeuronBinary.cpp b/src/Neuron/NeuronBinary.cpp
index 2b90fa3a0a285c74ae513c7dab5c54ad5c94b651..9e7bbb80d616a0b56fbfbdecd021e28021ab4b36 100644
--- a/src/Neuron/NeuronBinary.cpp
+++ b/src/Neuron/NeuronBinary.cpp
@@ -15,10 +15,12 @@ namespace lib4neuro {
     double NeuronBinary::activate(double x, double b) {
 
         if (x >= b) {
-            return 1.0;
+            this->activation_val = 1.0;
         } else {
-            return 0.0;
+            this->activation_val = 0.0;
         }
+
+        return this->activation_val;
     }
 
 }
\ No newline at end of file
diff --git a/src/Neuron/NeuronConstant.cpp b/src/Neuron/NeuronConstant.cpp
index f660e49d68f77074767b097296c7fe1e23c5e1fd..9210b95c62027ce802476a1c1aa258e5f2828d15 100644
--- a/src/Neuron/NeuronConstant.cpp
+++ b/src/Neuron/NeuronConstant.cpp
@@ -21,7 +21,8 @@ namespace lib4neuro {
     }
 
     double NeuronConstant::activate(double x, double b) {
-        return this->p;
+        this->activation_val = this->p;
+        return this->activation_val;
     }
 
     double NeuronConstant::activation_function_eval_derivative_bias(double x, double b) {
diff --git a/src/Neuron/NeuronLinear.cpp b/src/Neuron/NeuronLinear.cpp
index b412eef0173f606d62450662c43d696fb4109e36..0cd3aa8d8822d883ac7de8939184a166dc6fc396 100644
--- a/src/Neuron/NeuronLinear.cpp
+++ b/src/Neuron/NeuronLinear.cpp
@@ -15,7 +15,8 @@ namespace lib4neuro {
     NeuronLinear::NeuronLinear() {}
 
     double NeuronLinear::activate(double x, double b) {
-        return x + b;
+        this->activation_val = x + b;
+        return this->activation_val;
     }
 
     double NeuronLinear::activation_function_eval_derivative_bias(double x, double b) {
diff --git a/src/Neuron/NeuronLogistic.cpp b/src/Neuron/NeuronLogistic.cpp
index 2b2213209fedb0d1e69d5e97c9f2e0f9154e5f18..dd1469d794c4a4dbba8e3c847bed287a76f42674 100644
--- a/src/Neuron/NeuronLogistic.cpp
+++ b/src/Neuron/NeuronLogistic.cpp
@@ -23,7 +23,8 @@ namespace lib4neuro {
         double eb = std::pow(E, b);
         double denom = (eb + ex);
 
-        return (eb * ex * (eb - ex)) / (denom * denom * denom);
+        this->activation_val = (eb * ex * (eb - ex)) / (denom * denom * denom);
+        return this->activation_val;
     }
 
     double NeuronLogistic_d2::activation_function_eval_derivative_bias(double x, double b) {
@@ -58,7 +59,8 @@ namespace lib4neuro {
         double d = (eb / ex);
         double denom = (d + 1);
 
-        return d / (denom * denom);
+        this->activation_val = d / (denom * denom);
+        return this->activation_val;
     }
 
     double NeuronLogistic_d1::activation_function_eval_derivative_bias(double x, double b) {
@@ -91,7 +93,9 @@ namespace lib4neuro {
         //(1 + e^(-x + b))^(-1)
 
         double ex = std::pow(E, b - x);
-        return 1.0 / (1.0 + ex);
+
+        this->activation_val = 1.0 / (1.0 + ex);
+        return this->activation_val;
     }
 
     double NeuronLogistic::activation_function_eval_derivative_bias(double x, double b) {