diff --git a/include/aidge/backend/cpu/operator/AddImpl_forward_kernels.hpp b/include/aidge/backend/cpu/operator/AddImpl_forward_kernels.hpp
index f8afaee72517762c282372c9ab3d1aa8910e84a5..4f98426c2bac1afab0608f0b7dd0bf33f9e0e11c 100644
--- a/include/aidge/backend/cpu/operator/AddImpl_forward_kernels.hpp
+++ b/include/aidge/backend/cpu/operator/AddImpl_forward_kernels.hpp
@@ -14,35 +14,11 @@
 
 #include "aidge/utils/Registrar.hpp"
 
+#include "aidge/backend/cpu/data/Broadcasting.hpp"
 #include "aidge/backend/cpu/operator/AddImpl.hpp"
 
 namespace Aidge {
 
-// Function to get multi-dimensional indices from a flattened index
-std::vector<size_t> getMultiDimIndices(const std::vector<size_t>& dimensions, size_t idx) {
-    std::vector<size_t> indices(dimensions.size(), 0);
-
-    for (int i = dimensions.size() - 1; i >= 0; --i) {
-        indices[i] = idx % dimensions[i];
-        idx /= dimensions[i];
-    }
-
-    return indices;
-}
-
-// Function to get a flattened index from multi-dimensional indices
-std::size_t getFlattenedIndex(const std::vector<size_t>& dimensions, const std::vector<size_t>& indices) {
-    std::size_t flattenedIdx = 0;
-    std::size_t stride = 1;
-
-    for (int i = dimensions.size() - 1; i >= 0; --i) {
-        std::size_t idx = dimensions[i]>1 ? indices[i] : 0;
-        flattenedIdx += idx * stride;
-        stride *= dimensions[i];
-    }
-    return flattenedIdx;
-}
-
 template <class I, class O>
 void AddImpl_cpu_forward_kernel(const std::vector<const void*> inputs_, const std::vector<std::vector<std::size_t>>& inputDims, const std::size_t outputLength, const std::vector<std::size_t>& outDims, void* output_) {
     // FIXME: missing Add attributes as arguments
@@ -54,11 +30,11 @@ void AddImpl_cpu_forward_kernel(const std::vector<const void*> inputs_, const st
 
 	for (std::size_t oIndex = 0; oIndex < outputLength; ++oIndex) 
 	{
+        output[oIndex] = 0;
 		std::vector<size_t> indexes = getMultiDimIndices(outDims, oIndex);
-
 		for(std::size_t iIndex = 0; iIndex < inputs.size(); ++iIndex) {
 			std::size_t idx = getFlattenedIndex(inputDims[iIndex], indexes);
-			output[oIndex] += inputs[iIndex][idx];
+            output[oIndex] += inputs[iIndex][idx];
 		}
 	}
 }