diff --git a/aidge_export_arm_cortexm/_Aidge_Arm/kernels/ElemWise/Add/aidge_add_float32.h b/aidge_export_arm_cortexm/_Aidge_Arm/kernels/Add/aidge_add_float32.h
similarity index 100%
rename from aidge_export_arm_cortexm/_Aidge_Arm/kernels/ElemWise/Add/aidge_add_float32.h
rename to aidge_export_arm_cortexm/_Aidge_Arm/kernels/Add/aidge_add_float32.h
diff --git a/aidge_export_arm_cortexm/_Aidge_Arm/kernels/Activation/Atan/aidge_atan_float32.c b/aidge_export_arm_cortexm/_Aidge_Arm/kernels/Atan/aidge_atan_float32.c
similarity index 100%
rename from aidge_export_arm_cortexm/_Aidge_Arm/kernels/Activation/Atan/aidge_atan_float32.c
rename to aidge_export_arm_cortexm/_Aidge_Arm/kernels/Atan/aidge_atan_float32.c
diff --git a/aidge_export_arm_cortexm/_Aidge_Arm/static/kernels/Conv.hpp b/aidge_export_arm_cortexm/_Aidge_Arm/kernels/Convolution/Conv.hpp
similarity index 100%
rename from aidge_export_arm_cortexm/_Aidge_Arm/static/kernels/Conv.hpp
rename to aidge_export_arm_cortexm/_Aidge_Arm/kernels/Convolution/Conv.hpp
diff --git a/aidge_export_arm_cortexm/_Aidge_Arm/kernels/Convolution/aidge_conv2d_hwc_float32.c b/aidge_export_arm_cortexm/_Aidge_Arm/kernels/Convolution/aidge_conv2d_hwc_float32.c
deleted file mode 100644
index 531331e6b1386b8bd4c6b7395941fddc39726d11..0000000000000000000000000000000000000000
--- a/aidge_export_arm_cortexm/_Aidge_Arm/kernels/Convolution/aidge_conv2d_hwc_float32.c
+++ /dev/null
@@ -1,70 +0,0 @@
-#include "include/aidge_supportfunctions.h"
-
-void aidge_conv2d_hwc_float32(float* inputs,
-                              float* weights,
-                              float* biases,
-                              float* outputs,
-                              const int nb_channels,
-                              const int channel_width, const int channel_height,
-                              const int kernel_width, const int kernel_height,
-                              const int nb_outputs,
-                              const int output_width, const int output_height,
-                              const int padding_width, const int padding_height,
-                              const int stride_width, const int stride_height,
-                              const int dilation_width, const int dilation_height)
-{
-    int outputOffset = 0;
-
-    const int dilated_kernel_width 
-            = kernel_width + (dilation_width - 1) * (kernel_width - 1);
-    const int dilated_kernel_height 
-            = kernel_height + (dilation_height - 1) * (kernel_height - 1);
-
-    int iy = 0;
-    for (int oy = 0; oy < output_height; ++oy) {
-        const int syMin = (padding_height == 0)
-                            ? 0 : max(padding_height - iy, 0);
-        const int syMax = (padding_height == 0)
-                            ? dilated_kernel_height 
-                            : clamp(channel_height + padding_height - iy, 
-                                    0, dilated_kernel_height);
-     
-        int ix = 0;
-        for (int ox = 0; ox < output_width; ++ox) {
-            const int sxMin = (padding_width == 0)
-                                ? 0 : max(padding_width - ix, 0);
-            const int sxMax = (padding_width == 0)
-                                ? dilated_kernel_width 
-                                : clamp(channel_width + padding_width - ix,  
-                                        0, dilated_kernel_width);
-         
-            for (int och = 0; och < nb_outputs; ++och) {
-                float weightedSum = biases[och];
-
-                for (int sy = 0; sy < kernel_height; ++sy) {
-                    if (padding_height != 0 && (sy*dilation_height < syMin || sy*dilation_height >= syMax)) {
-                        continue;
-                    }
-                    const int inputsOffset  = (iy + sy*dilation_height - padding_height)*channel_width*nb_channels +
-                                              (ix - padding_width)*nb_channels;
-                    const int weightsOffset = och*kernel_height*kernel_width*nb_channels +
-                                              sy*kernel_width*nb_channels;
-
-                    for (int sx = 0; sx < kernel_width; ++sx) {
-                        if(sx*dilation_width < sxMin || sx*dilation_width >= sxMax) {
-                            continue;
-                        }
-                        for (int ch = 0; ch < nb_channels; ++ch) {
-                            weightedSum += inputs[inputsOffset + sx*dilation_width*nb_channels + ch] 
-                                           * weights[weightsOffset + sx*nb_channels + ch];
-                        }
-                    }
-                }
-                outputs[outputOffset] = weightedSum;
-                ++outputOffset;
-            }
-            ix += stride_width;
-        }
-        iy += stride_height;
-    }
-}
diff --git a/aidge_export_arm_cortexm/_Aidge_Arm/kernels/ElemWise/Div/aidge_div_float32.h b/aidge_export_arm_cortexm/_Aidge_Arm/kernels/Div/aidge_div_float32.h
similarity index 100%
rename from aidge_export_arm_cortexm/_Aidge_Arm/kernels/ElemWise/Div/aidge_div_float32.h
rename to aidge_export_arm_cortexm/_Aidge_Arm/kernels/Div/aidge_div_float32.h
diff --git a/aidge_export_arm_cortexm/_Aidge_Arm/static/kernels/Fc.hpp b/aidge_export_arm_cortexm/_Aidge_Arm/kernels/FullyConnected/Fc.hpp
similarity index 100%
rename from aidge_export_arm_cortexm/_Aidge_Arm/static/kernels/Fc.hpp
rename to aidge_export_arm_cortexm/_Aidge_Arm/kernels/FullyConnected/Fc.hpp
diff --git a/aidge_export_arm_cortexm/_Aidge_Arm/kernels/FullyConnected/aidge_fc_chw_float32.c b/aidge_export_arm_cortexm/_Aidge_Arm/kernels/FullyConnected/aidge_fc_chw_float32.c
deleted file mode 100644
index 15d7fb7063d8caaaee2db0f3ab174bd48af8417b..0000000000000000000000000000000000000000
--- a/aidge_export_arm_cortexm/_Aidge_Arm/kernels/FullyConnected/aidge_fc_chw_float32.c
+++ /dev/null
@@ -1,28 +0,0 @@
-
-
-void aidge_fc_chw_float32 (float* inputs,
-                           float* weights,
-                           float* biases,
-                           float* outputs,
-                           unsigned int nb_channels,
-                           unsigned int channels_height,
-                           unsigned int channels_width,
-                           unsigned int nb_outputs)
-{
-    for (unsigned int out = 0; out < nb_outputs; ++out) {
-        // Init with bias
-        float accum = biases[out]; 
-
-        for (int iy = 0; iy < channels_height; ++iy) {
-            for (int ix = 0; ix < channels_width; ++ix) {
-                for (int ch = 0; ch < nb_channels; ++ch) {
-                    accum += inputs[channels_width*nb_channels*iy + nb_channels*ix + ch] 
-                                * weights[channels_height*channels_width*nb_channels*out + channels_height*channels_width*ch + channels_height*iy + ix];
-                }
-            }
-        }
-
-        // Store result
-        outputs[out] = accum;
-    }
-}
diff --git a/aidge_export_arm_cortexm/_Aidge_Arm/kernels/FullyConnected/aidge_fc_float32.c b/aidge_export_arm_cortexm/_Aidge_Arm/kernels/FullyConnected/aidge_fc_float32.c
deleted file mode 100644
index de169d49367eabf9c904a05e7cf3b9789f3ac9a4..0000000000000000000000000000000000000000
--- a/aidge_export_arm_cortexm/_Aidge_Arm/kernels/FullyConnected/aidge_fc_float32.c
+++ /dev/null
@@ -1,24 +0,0 @@
-
-
-void aidge_fc_float32 (float* inputs,
-                       float* weights,
-                       float* biases,
-                       float* outputs,
-                       unsigned int batch_size,
-                       unsigned int nb_inputs,
-                       unsigned int nb_outputs)
-{
-    for (unsigned int batch = 0; batch < batch_size; ++batch){
-        for (unsigned int out = 0; out < nb_outputs; ++out) {
-            // Init with bias
-            float accum = biases[out]; 
-
-            for (unsigned int in = 0; in < nb_inputs; ++in) {
-                accum += inputs[batch*nb_inputs + in] * weights[out * nb_inputs + in];
-            }
-
-            // Store result
-            outputs[batch*nb_outputs + out] = accum;
-        }
-    }
-}
diff --git a/aidge_export_arm_cortexm/_Aidge_Arm/kernels/ElemWise/Mul/aidge_mul_float32.h b/aidge_export_arm_cortexm/_Aidge_Arm/kernels/Mul/aidge_mul_float32.h
similarity index 100%
rename from aidge_export_arm_cortexm/_Aidge_Arm/kernels/ElemWise/Mul/aidge_mul_float32.h
rename to aidge_export_arm_cortexm/_Aidge_Arm/kernels/Mul/aidge_mul_float32.h
diff --git a/aidge_export_arm_cortexm/_Aidge_Arm/static/kernels/Pooling.hpp b/aidge_export_arm_cortexm/_Aidge_Arm/kernels/Pooling/Pooling.hpp
similarity index 100%
rename from aidge_export_arm_cortexm/_Aidge_Arm/static/kernels/Pooling.hpp
rename to aidge_export_arm_cortexm/_Aidge_Arm/kernels/Pooling/Pooling.hpp
diff --git a/aidge_export_arm_cortexm/_Aidge_Arm/kernels/Pooling/aidge_maxpool2d_float32.c b/aidge_export_arm_cortexm/_Aidge_Arm/kernels/Pooling/aidge_maxpool2d_float32.c
deleted file mode 100644
index ebfb8f7ebdbb060e75f56cdfb4e9abe78aa810aa..0000000000000000000000000000000000000000
--- a/aidge_export_arm_cortexm/_Aidge_Arm/kernels/Pooling/aidge_maxpool2d_float32.c
+++ /dev/null
@@ -1,75 +0,0 @@
-#include "include/aidge_supportfunctions.h"
-
-void aidge_maxpool2d_float32(float* inputs,
-                             float* outputs,
-                             const int nb_channels,
-                             const int channel_width, const int channel_height,
-                             const int kernel_width, const int kernel_height,
-                             const int nb_outputs,
-                             const int output_width, const int output_height,
-                             const int padding_width, const int padding_height,
-                             const int stride_width, const int stride_height)
-{
-    const int OUTPUTS_HEIGHT_NOPAD
-        = (channel_height - kernel_height + stride_height) / stride_height;
-    const int OUTPUTS_WIDTH_NOPAD
-        = (channel_width - kernel_width + stride_width) / stride_width;
-
-    for (int oy = 0; oy < output_height; ++oy) {
-        const int syMin = (padding_height == 0) ? 0
-            : max(padding_height - (oy * stride_height), 0);
-        const int syMax = (padding_height == 0
-                && output_height == OUTPUTS_HEIGHT_NOPAD) ? kernel_height
-            : clamp(channel_height + padding_height - (oy * stride_height), 
-                    0, kernel_height);
-        const int iy = (oy * stride_height) - padding_height;
-
-        for (int ox = 0; ox < output_width; ++ox) {
-            for (int output = 0; output < nb_outputs; ++output) {
-                
-                const int sxMin = (padding_width == 0) ? 0
-                    : max(padding_width - (ox * stride_width), 0);
-                const int sxMax = (padding_width == 0
-                        && output_width == OUTPUTS_WIDTH_NOPAD)
-                            ? kernel_width
-                    : clamp(channel_width + padding_width - (ox * stride_width), 
-                            0, kernel_width);
-                const int ix = (ox * stride_width) - padding_width;
-
-                const int oPos = (ox + output_width * oy);
-                int oOffset = nb_outputs * oPos;
-                                
-                float maxVal = -1000.f;
-
-                for (int sy = 0; sy < kernel_height; ++sy) {
-                    if ((padding_height != 0
-                            || output_height != OUTPUTS_HEIGHT_NOPAD)
-                        && sy >= syMax - syMin)
-                    {
-                        break;
-                    }
-
-                    const int iPos = ((sxMin + ix)
-                                        + channel_width * (iy + syMin + sy));
-                    int iOffset = nb_channels * iPos;
-
-                    for (int sx = 0; sx < kernel_width; ++sx) {
-                        if ((padding_width != 0
-                                || output_width != OUTPUTS_WIDTH_NOPAD)
-                            && sx >= sxMax - sxMin)
-                        {
-                            break;
-                        }
-
-                        int iOffsetInRange = iOffset + output + sx * nb_channels;
-
-                        if (inputs[iOffsetInRange] > maxVal)
-                            maxVal = inputs[iOffsetInRange];
-                    }
-                }
-
-                outputs[oOffset + output] = maxVal;
-            }
-        }
-    }
-}
diff --git a/aidge_export_arm_cortexm/_Aidge_Arm/kernels/Activation/Relu/aidge_relu_float32.c b/aidge_export_arm_cortexm/_Aidge_Arm/kernels/Relu/aidge_relu_float32.h
similarity index 100%
rename from aidge_export_arm_cortexm/_Aidge_Arm/kernels/Activation/Relu/aidge_relu_float32.c
rename to aidge_export_arm_cortexm/_Aidge_Arm/kernels/Relu/aidge_relu_float32.h
diff --git a/aidge_export_arm_cortexm/_Aidge_Arm/kernels/Activation/Sigmoid/aidge_sigmoid_float32.h b/aidge_export_arm_cortexm/_Aidge_Arm/kernels/Sigmoid/aidge_sigmoid_float32.h
similarity index 100%
rename from aidge_export_arm_cortexm/_Aidge_Arm/kernels/Activation/Sigmoid/aidge_sigmoid_float32.h
rename to aidge_export_arm_cortexm/_Aidge_Arm/kernels/Sigmoid/aidge_sigmoid_float32.h
diff --git a/aidge_export_arm_cortexm/_Aidge_Arm/kernels/Activation/Softmax/aidge_softmax_chw_float32.h b/aidge_export_arm_cortexm/_Aidge_Arm/kernels/Softmax/aidge_softmax_chw_float32.h
similarity index 100%
rename from aidge_export_arm_cortexm/_Aidge_Arm/kernels/Activation/Softmax/aidge_softmax_chw_float32.h
rename to aidge_export_arm_cortexm/_Aidge_Arm/kernels/Softmax/aidge_softmax_chw_float32.h
diff --git a/aidge_export_arm_cortexm/_Aidge_Arm/kernels/ElemWise/Sub/aidge_sub_float32.h b/aidge_export_arm_cortexm/_Aidge_Arm/kernels/Sub/aidge_sub_float32.h
similarity index 100%
rename from aidge_export_arm_cortexm/_Aidge_Arm/kernels/ElemWise/Sub/aidge_sub_float32.h
rename to aidge_export_arm_cortexm/_Aidge_Arm/kernels/Sub/aidge_sub_float32.h
diff --git a/aidge_export_arm_cortexm/_Aidge_Arm/static/kernels/Macs.hpp b/aidge_export_arm_cortexm/_Aidge_Arm/kernels/Utils/Macs.hpp
similarity index 100%
rename from aidge_export_arm_cortexm/_Aidge_Arm/static/kernels/Macs.hpp
rename to aidge_export_arm_cortexm/_Aidge_Arm/kernels/Utils/Macs.hpp
diff --git a/aidge_export_arm_cortexm/_Aidge_Arm/kernels/SupportFunctions/aidge_supportfunctions.h b/aidge_export_arm_cortexm/_Aidge_Arm/kernels/Utils/aidge_supportfunctions.h
similarity index 100%
rename from aidge_export_arm_cortexm/_Aidge_Arm/kernels/SupportFunctions/aidge_supportfunctions.h
rename to aidge_export_arm_cortexm/_Aidge_Arm/kernels/Utils/aidge_supportfunctions.h
diff --git a/aidge_export_arm_cortexm/_Aidge_Arm/static/assert.h b/aidge_export_arm_cortexm/_Aidge_Arm/kernels/Utils/assert.h
similarity index 100%
rename from aidge_export_arm_cortexm/_Aidge_Arm/static/assert.h
rename to aidge_export_arm_cortexm/_Aidge_Arm/kernels/Utils/assert.h
diff --git a/aidge_export_arm_cortexm/_Aidge_Arm/static/nn_scaling_functions.hpp b/aidge_export_arm_cortexm/_Aidge_Arm/kernels/Utils/nn_scaling_functions.hpp
similarity index 100%
rename from aidge_export_arm_cortexm/_Aidge_Arm/static/nn_scaling_functions.hpp
rename to aidge_export_arm_cortexm/_Aidge_Arm/kernels/Utils/nn_scaling_functions.hpp
diff --git a/aidge_export_arm_cortexm/_Aidge_Arm/static/typedefs.h b/aidge_export_arm_cortexm/_Aidge_Arm/kernels/Utils/typedefs.h
similarity index 100%
rename from aidge_export_arm_cortexm/_Aidge_Arm/static/typedefs.h
rename to aidge_export_arm_cortexm/_Aidge_Arm/kernels/Utils/typedefs.h
diff --git a/aidge_export_arm_cortexm/_Aidge_Arm/static/utils.hpp b/aidge_export_arm_cortexm/_Aidge_Arm/kernels/Utils/utils.hpp
similarity index 100%
rename from aidge_export_arm_cortexm/_Aidge_Arm/static/utils.hpp
rename to aidge_export_arm_cortexm/_Aidge_Arm/kernels/Utils/utils.hpp
diff --git a/aidge_export_arm_cortexm/_Aidge_Arm/templates/configuration/_meminfo.jinja b/aidge_export_arm_cortexm/_Aidge_Arm/templates/configuration/_meminfo.jinja
index 15d15425b4330f68b4a97c31e9cf7a1076cc93e8..a8f10c4a1ef5abe1f576c14151354f0f03705e93 100644
--- a/aidge_export_arm_cortexm/_Aidge_Arm/templates/configuration/_meminfo.jinja
+++ b/aidge_export_arm_cortexm/_Aidge_Arm/templates/configuration/_meminfo.jinja
@@ -1,5 +1,22 @@
 // MEMINFO CONF
+
+{# TODO : Suppose graph input is always connected to first input #}
+{# Graph input are stored in external memory so giving static values #}
+{%if is_input %}
+// GRAPH INPUT MEMINFO
+#define {{ in_name[0]|upper }}_SIZE {{ in_chan[0] }}
+#define {{ in_name[0]|upper }}_OFFSET  0
+#define {{ in_name[0]|upper }}_STRIDE {{ in_chan[0] }}
+#define {{ in_name[0]|upper }}_LENGTH {{ in_size[0] }}
+#define {{ in_name[0]|upper }}_CONT_SIZE {{ in_size[0] }}
+#define {{ in_name[0]|upper }}_CONT_OFFSET 0
+#define {{ in_name[0]|upper }}_WRAP_OFFSET 0
+#define {{ in_name[0]|upper }}_WRAP_SIZE 0
+{% endif %}
+
+// MEMINFO {{ name }}
 {% for outidx in range(nb_out) -%}
+// OUTPUT {{ outidx }}
 #define {{ out_name[outidx]|upper }}_SIZE {{ mem_info_size[outidx]}}
 #define {{ out_name[outidx]|upper }}_OFFSET {{ mem_info_offset[outidx]}}
 #define {{ out_name[outidx]|upper }}_STRIDE {{ mem_info_stride[outidx]}}
diff --git a/aidge_export_arm_cortexm/_Aidge_Arm/templates/configuration/fullyconnected.jinja b/aidge_export_arm_cortexm/_Aidge_Arm/templates/configuration/fullyconnected.jinja
deleted file mode 100644
index 0ffda543b5b45809b40916ff57583683c194f36e..0000000000000000000000000000000000000000
--- a/aidge_export_arm_cortexm/_Aidge_Arm/templates/configuration/fullyconnected.jinja
+++ /dev/null
@@ -1,18 +0,0 @@
-{#- For name header -#}
-#ifndef {{ name|upper }}_LAYER_H
-#define {{ name|upper }}_LAYER_H
-
-{# For layer configuration -#}
-#define {{name|upper}}_BATCH_SIZE {{ nb_batch}}
-#define {{ name|upper }}_NB_CHANNELS {{ nb_channels }}
-#define {{ name|upper }}_CHANNEL_HEIGHT {{ channel_height }}
-#define {{ name|upper }}_CHANNEL_WIDTH {{ channel_width }}
-#define {{ name|upper }}_NB_OUTPUTS {{ nb_outputs }}
-#define {{ name|upper }}_NB_INPUTS {{ nb_channels*channel_height*channel_width }}
-
-{#- Calculate sizes #}
-{%- set weights_size = nb_channels * channel_height * channel_width * nb_outputs %}
-#define {{ name|upper }}_WEIGHTS_SIZE {{ weights_size }}
-#define {{ name|upper }}_BIASES_SIZE {{ nb_outputs }}
-
-#endif /* {{ name|upper }}_LAYER_H */
diff --git a/aidge_export_arm_cortexm/_Aidge_Arm/templates/configuration/pooling.jinja b/aidge_export_arm_cortexm/_Aidge_Arm/templates/configuration/pooling.jinja
deleted file mode 100644
index 9c2eccb8fa4735840a4d28118a8e50e05f8f7098..0000000000000000000000000000000000000000
--- a/aidge_export_arm_cortexm/_Aidge_Arm/templates/configuration/pooling.jinja
+++ /dev/null
@@ -1,20 +0,0 @@
-{#- For name header -#}
-#ifndef {{ name|upper }}_LAYER_H
-#define {{ name|upper }}_LAYER_H
-
-{# For layer configuration -#}
-#define {{ name|upper }}_NB_CHANNELS {{ input_dims[0] }}
-#define {{ name|upper }}_CHANNELS_HEIGHT {{ input_dims[1] }}
-#define {{ name|upper }}_CHANNELS_WIDTH {{ input_dims[2] }}
-#define {{ name|upper }}_NB_OUTPUTS {{ output_dims[0] }}
-#define {{ name|upper }}_OUTPUTS_HEIGHT {{ output_dims[1] }}
-#define {{ name|upper }}_OUTPUTS_WIDTH {{ output_dims[2] }}
-#define {{ name|upper }}_PADDING_Y {{ padding[1] }}
-#define {{ name|upper }}_PADDING_X {{ padding[0] }}
-#define {{ name|upper }}_STRIDE_Y {{ stride[1] }}
-#define {{ name|upper }}_STRIDE_X {{ stride[0] }}
-#define {{ name|upper }}_KERNEL_Y {{ kernel[1] }}
-#define {{ name|upper }}_KERNEL_X {{ kernel[0] }}
-#define {{ name|upper }}_POOLING_TYPE {{ pool_type }}
-
-#endif /* {{ name|upper }}_LAYER_H */
diff --git a/aidge_export_arm_cortexm/_Aidge_Arm/templates/configuration/relu.jinja b/aidge_export_arm_cortexm/_Aidge_Arm/templates/configuration/relu.jinja
index f896b95289a4baaeb03fad45d31c7cb640a17851..9e1a0ab99c3bc036bdc02275801d8374d3868b56 100644
--- a/aidge_export_arm_cortexm/_Aidge_Arm/templates/configuration/relu.jinja
+++ b/aidge_export_arm_cortexm/_Aidge_Arm/templates/configuration/relu.jinja
@@ -2,8 +2,11 @@
 #ifndef {{ name|upper }}_LAYER_H
 #define {{ name|upper }}_LAYER_H
 
+{% include "./_meminfo.jinja" %}
+
 {# For layer configuration -#}
 #define {{ name|upper }}_INPUTS_SIZE {{ in_size[0] }}
 #define {{ name|upper }}_OUTPUTS_SIZE {{ out_size[0] }}
 
+
 #endif /* {{ name|upper }}_LAYER_H */
diff --git a/aidge_export_arm_cortexm/_Aidge_Arm/templates/kernel/batchnorm2d.jinja b/aidge_export_arm_cortexm/_Aidge_Arm/templates/forward_call/batchnorm2d.jinja
similarity index 94%
rename from aidge_export_arm_cortexm/_Aidge_Arm/templates/kernel/batchnorm2d.jinja
rename to aidge_export_arm_cortexm/_Aidge_Arm/templates/forward_call/batchnorm2d.jinja
index 5e7c73c8e55233b2c3d93c99fe3dc6e7682fe503..ca13e3fa280405181d6894e59fc7f6eff46be600 100644
--- a/aidge_export_arm_cortexm/_Aidge_Arm/templates/kernel/batchnorm2d.jinja
+++ b/aidge_export_arm_cortexm/_Aidge_Arm/templates/forward_call/batchnorm2d.jinja
@@ -1 +1 @@
-aidge_batchnorm2d_chw_{{dataformat}} ({{input_name}}, {{output_name}}, {{running_mean_name}}, {{running_var_name}}, {{weight_name}}, {{bias_name}}, {{ name|upper }}_EPSILON, {{ name|upper }}_NB_CHANNELS, {{ name|upper }}_CHANNELS_WIDTH, {{ name|upper }}_CHANNELS_HEIGHT);
\ No newline at end of file
+aidge_batchnorm2d_chw_{{dataformat}} ({{input_name}}, {{output_name}}, {{running_mean_name}}, {{running_var_name}}, {{weight_name}}, {{bias_name}}, {{ name|upper }}_EPSILON, {{ name|upper }}_NB_CHANNELS, {{ name|upper }}_CHANNELS_WIDTH, {{ name|upper }}_CHANNELS_HEIGHT);
diff --git a/aidge_export_arm_cortexm/_Aidge_Arm/templates/kernel/concat.jinja b/aidge_export_arm_cortexm/_Aidge_Arm/templates/forward_call/concat.jinja
similarity index 100%
rename from aidge_export_arm_cortexm/_Aidge_Arm/templates/kernel/concat.jinja
rename to aidge_export_arm_cortexm/_Aidge_Arm/templates/forward_call/concat.jinja
diff --git a/aidge_export_arm_cortexm/_Aidge_Arm/templates/forward_call/conv_kernel.jinja b/aidge_export_arm_cortexm/_Aidge_Arm/templates/forward_call/conv_kernel.jinja
new file mode 100644
index 0000000000000000000000000000000000000000..3b853ca1eef4d37027fa9aa70e002d166a2f6a13
--- /dev/null
+++ b/aidge_export_arm_cortexm/_Aidge_Arm/templates/forward_call/conv_kernel.jinja
@@ -0,0 +1,28 @@
+{% if not is_output %}
+{{out_cdtype[0]}}* {{out_name[0]}} = ({{out_cdtype[0]}}*) mem + {{out_name[0]|upper}}_OFFSET;
+{% endif %}
+N2D2_Export::convcellPropagate<{{ in_name[0]|upper }}_NB_CHANNELS,
+                               {{ in_name[0]|upper }}_IN_HEIGHT,
+                               {{ in_name[0]|upper }}_IN_WIDTH,
+                               {{ out_name[0]|upper }}_NB_OUTPUTS,
+                               {{ out_name[0]|upper }}_OUT_HEIGHT,
+                               {{ out_name[0]|upper }}_OUT_WIDTH,
+                               {{ name|upper }}_PADDING_Y,
+                               {{ name|upper }}_PADDING_X,
+                               {{ name|upper }}_STRIDE_Y,
+                               {{ name|upper }}_STRIDE_X,
+                               {{ name|upper }}_KERNEL_HEIGHT,
+                               {{ name|upper }}_KERNEL_WIDTH,
+                               {{ name|upper }}_ACTIVATION,
+                               {{ in_name[0]|upper }}_CONT_OFFSET,
+                               {{ in_name[0]|upper }}_CONT_SIZE,
+                               {{ in_name[0]|upper }}_WRAP_OFFSET,
+                               {{ in_name[0]|upper }}_WRAP_SIZE,
+                               {{ in_name[0]|upper }}_STRIDE,
+                               {{ out_name[0]|upper }}_CONT_OFFSET,
+                               {{ out_name[0]|upper }}_CONT_SIZE,
+                               {{ out_name[0]|upper }}_WRAP_OFFSET,
+                               {{ out_name[0]|upper }}_WRAP_SIZE,
+                               {{ out_name[0]|upper }}_STRIDE>
+                               ({{in_name[0]}}, {{out_name[0]}}, {{in_name[2]}}, {{in_name[1]}}, {{ name|upper }}_SCALING);
+
diff --git a/aidge_export_arm_cortexm/_Aidge_Arm/templates/kernel/elemwise.jinja b/aidge_export_arm_cortexm/_Aidge_Arm/templates/forward_call/elemwise.jinja
similarity index 100%
rename from aidge_export_arm_cortexm/_Aidge_Arm/templates/kernel/elemwise.jinja
rename to aidge_export_arm_cortexm/_Aidge_Arm/templates/forward_call/elemwise.jinja
diff --git a/aidge_export_arm_cortexm/_Aidge_Arm/templates/forward_call/fc_kernel.jinja b/aidge_export_arm_cortexm/_Aidge_Arm/templates/forward_call/fc_kernel.jinja
new file mode 100644
index 0000000000000000000000000000000000000000..6511320fe5e729f35c8d725e80b9f9fde6d1b199
--- /dev/null
+++ b/aidge_export_arm_cortexm/_Aidge_Arm/templates/forward_call/fc_kernel.jinja
@@ -0,0 +1,21 @@
+{% if not is_output %}
+{{out_cdtype[0]}}* {{out_name[0]}} = ({{out_cdtype[0]}}*) mem + {{out_name[0]|upper}}_OFFSET;
+{% endif %}
+N2D2_Export::fccellPropagate<{{ in_name[0] | upper }}_NB_CHANNELS,
+                             {{ in_name[0] | upper }}_IN_HEIGHT,
+                             {{ in_name[0] | upper }}_IN_WIDTH,
+                             {{ out_name[0] | upper }}_NB_OUTPUTS,
+                             {{ out_name[0] | upper }}_OUT_HEIGHT,
+                             {{ out_name[0] | upper }}_OUT_WIDTH,
+                             {{name|upper}}_ACTIVATION,
+                             {{ in_name[0] | upper }}_CONT_OFFSET,
+                             {{ in_name[0] | upper }}_CONT_SIZE,
+                             {{ in_name[0] | upper }}_WRAP_OFFSET,
+                             {{ in_name[0] | upper }}_WRAP_SIZE,
+                             {{ in_name[0] | upper }}_STRIDE,
+                             {{ out_name[0] | upper }}_CONT_OFFSET,
+                             {{ out_name[0] | upper }}_CONT_SIZE,
+                             {{ out_name[0] | upper }}_WRAP_OFFSET,
+                             {{ out_name[0] | upper }}_WRAP_SIZE,
+                             {{ out_name[0] | upper }}_STRIDE>
+                             ({{ in_name[0] }}, {{ out_name[0] }}, {{ in_name[2] }}, {{ in_name[1] }}, {{ name | upper }}_SCALING);
diff --git a/aidge_export_arm_cortexm/_Aidge_Arm/templates/kernel/gather.jinja b/aidge_export_arm_cortexm/_Aidge_Arm/templates/forward_call/gather.jinja
similarity index 100%
rename from aidge_export_arm_cortexm/_Aidge_Arm/templates/kernel/gather.jinja
rename to aidge_export_arm_cortexm/_Aidge_Arm/templates/forward_call/gather.jinja
diff --git a/aidge_export_arm_cortexm/_Aidge_Arm/templates/kernel/matmul.jinja b/aidge_export_arm_cortexm/_Aidge_Arm/templates/forward_call/matmul.jinja
similarity index 100%
rename from aidge_export_arm_cortexm/_Aidge_Arm/templates/kernel/matmul.jinja
rename to aidge_export_arm_cortexm/_Aidge_Arm/templates/forward_call/matmul.jinja
diff --git a/aidge_export_arm_cortexm/_Aidge_Arm/templates/forward_call/pool_kernel.jinja b/aidge_export_arm_cortexm/_Aidge_Arm/templates/forward_call/pool_kernel.jinja
new file mode 100644
index 0000000000000000000000000000000000000000..fe0fa34ed894b6aae9a386249df96e4b22079e21
--- /dev/null
+++ b/aidge_export_arm_cortexm/_Aidge_Arm/templates/forward_call/pool_kernel.jinja
@@ -0,0 +1,28 @@
+{% if not is_output %}
+{{out_cdtype[0]}}* {{out_name[0]}} = ({{out_cdtype[0]}}*) mem + {{out_name[0]|upper}}_OFFSET;
+{% endif %}
+N2D2_Export::poolcellPropagate<{{ in_name[0]|upper }}_NB_CHANNELS,
+                               {{ in_name[0]|upper }}_IN_HEIGHT,
+                               {{ in_name[0]|upper }}_IN_WIDTH,
+                               {{ out_name[0]|upper }}_NB_OUTPUTS,
+                               {{ out_name[0]|upper }}_OUT_HEIGHT,
+                               {{ out_name[0]|upper }}_OUT_WIDTH,
+                               {{ name|upper }}_PADDING_Y,
+                               {{ name|upper }}_PADDING_X,
+                               {{ name|upper }}_STRIDE_Y,
+                               {{ name|upper }}_STRIDE_X,
+                               {{ name|upper }}_KERNEL_HEIGHT,
+                               {{ name|upper }}_KERNEL_WIDTH,
+                               {{ name|upper }}_POOLING_TYPE,
+                               {{ name|upper }}_ACTIVATION,
+                               {{ in_name[0]|upper }}_CONT_OFFSET,
+                               {{ in_name[0]|upper }}_CONT_SIZE,
+                               {{ in_name[0]|upper }}_WRAP_OFFSET,
+                               {{ in_name[0]|upper }}_WRAP_SIZE,
+                               {{ in_name[0]|upper }}_STRIDE,
+                               {{ out_name[0]|upper }}_CONT_OFFSET,
+                               {{ out_name[0]|upper }}_CONT_SIZE,
+                               {{ out_name[0]|upper }}_WRAP_OFFSET,
+                               {{ out_name[0]|upper }}_WRAP_SIZE,
+                               {{ out_name[0]|upper }}_STRIDE>
+                               ({{in_name[0]}}, {{out_name[0]}});
diff --git a/aidge_export_arm_cortexm/_Aidge_Arm/templates/forward_call/relu.jinja b/aidge_export_arm_cortexm/_Aidge_Arm/templates/forward_call/relu.jinja
new file mode 100644
index 0000000000000000000000000000000000000000..13a8c6145dbf40c83f454feb1906398aa09f72d0
--- /dev/null
+++ b/aidge_export_arm_cortexm/_Aidge_Arm/templates/forward_call/relu.jinja
@@ -0,0 +1,4 @@
+{% if not is_output %}
+{{out_cdtype[0]}}* {{out_name[0]}} = ({{out_cdtype[0]}}*) mem + {{out_name[0]|upper}}_OFFSET;
+{% endif %}
+aidge_relu_float32({{in_name[0]}}, {{out_name[0]}},  {{name|upper}}_INPUTS_SIZE);
diff --git a/aidge_export_arm_cortexm/_Aidge_Arm/templates/kernel/reshape.jinja b/aidge_export_arm_cortexm/_Aidge_Arm/templates/forward_call/reshape.jinja
similarity index 100%
rename from aidge_export_arm_cortexm/_Aidge_Arm/templates/kernel/reshape.jinja
rename to aidge_export_arm_cortexm/_Aidge_Arm/templates/forward_call/reshape.jinja
diff --git a/aidge_export_arm_cortexm/_Aidge_Arm/templates/kernel/slice.jinja b/aidge_export_arm_cortexm/_Aidge_Arm/templates/forward_call/slice.jinja
similarity index 100%
rename from aidge_export_arm_cortexm/_Aidge_Arm/templates/kernel/slice.jinja
rename to aidge_export_arm_cortexm/_Aidge_Arm/templates/forward_call/slice.jinja
diff --git a/aidge_export_arm_cortexm/_Aidge_Arm/templates/kernel/transpose.jinja b/aidge_export_arm_cortexm/_Aidge_Arm/templates/forward_call/transpose.jinja
similarity index 100%
rename from aidge_export_arm_cortexm/_Aidge_Arm/templates/kernel/transpose.jinja
rename to aidge_export_arm_cortexm/_Aidge_Arm/templates/forward_call/transpose.jinja
diff --git a/aidge_export_arm_cortexm/_Aidge_Arm/templates/kernel/activation.jinja b/aidge_export_arm_cortexm/_Aidge_Arm/templates/kernel/activation.jinja
deleted file mode 100644
index 8baa4ea019d4624994aabf4a6685f41cd6de4b60..0000000000000000000000000000000000000000
--- a/aidge_export_arm_cortexm/_Aidge_Arm/templates/kernel/activation.jinja
+++ /dev/null
@@ -1 +0,0 @@
-    aidge_{{activation_type|lower}}_{{dataformat}}({{in_name[0]}}, {{out_name[0]}}, {% if activation_type is eq('softmax') %} {{in_name[0]}}_DIMS, {{name|upper}}_AXIS, {{name|upper}}_INPUT_DIMS_SIZE,{% endif %} {{name|upper}}_OUTPUTS_SIZE);
diff --git a/aidge_export_arm_cortexm/_Aidge_Arm/templates/kernel/activation_chw.jinja b/aidge_export_arm_cortexm/_Aidge_Arm/templates/kernel/activation_chw.jinja
deleted file mode 100644
index 796a3718483e4fe995e9904c3faeb24693ad5431..0000000000000000000000000000000000000000
--- a/aidge_export_arm_cortexm/_Aidge_Arm/templates/kernel/activation_chw.jinja
+++ /dev/null
@@ -1 +0,0 @@
-    aidge_{{activation_type|lower}}_chw_{{dataformat}}({{input_name}}, {{output_name}}, {% if activation_type is eq('softmax') %} {{input_name}}_DIMS, {{name|upper}}_AXIS, {{name|upper}}_INPUT_DIMS_SIZE,{% endif %} {{name|upper}}_OUTPUTS_SIZE);
\ No newline at end of file
diff --git a/aidge_export_arm_cortexm/_Aidge_Arm/templates/kernel/conv_kernel.jinja b/aidge_export_arm_cortexm/_Aidge_Arm/templates/kernel/conv_kernel.jinja
deleted file mode 100644
index f637c89134cc5ff988edaab152917bdd694166f9..0000000000000000000000000000000000000000
--- a/aidge_export_arm_cortexm/_Aidge_Arm/templates/kernel/conv_kernel.jinja
+++ /dev/null
@@ -1,24 +0,0 @@
-N2D2_Export::convcellPropagate<{{ in_name[0]|upper }}_NB_CHANNELS,
-                               {{ in_name[0]|upper }}_CHANNELS_HEIGHT,
-                               {{ in_name[0]|upper }}_CHANNELS_WIDTH,
-                               {{ out_name[0]|upper }}_NB_OUTPUTS,
-                               {{ out_name[0]|upper }}_OUTPUTS_HEIGHT,
-                               {{ out_name[0]|upper }}_OUTPUTS_WIDTH,
-                               {{ name|upper }}_PADDING_Y,
-                               {{ name|upper }}_PADDING_X,
-                               {{ name|upper }}_STRIDE_Y,
-                               {{ name|upper }}_STRIDE_X,
-                               {{ name|upper }}_KERNEL_HEIGHT,
-                               {{ name|upper }}_KERNEL_WIDTH,
-                               {{ name|upper }}_ACTIVATION,
-                               {{ out_name[0]|upper }}_MEM_CONT_OFFSET,
-                               {{ out_name[0]|upper }}_MEM_CONT_SIZE,
-                               {{ out_name[0]|upper }}_MEM_WRAP_OFFSET,
-                               {{ out_name[0]|upper }}_MEM_WRAP_SIZE,
-                               {{ out_name[0]|upper }}_MEM_STRIDE,
-                               {{ name|upper }}_MEM_CONT_OFFSET,
-                               {{ name|upper }}_MEM_CONT_SIZE,
-                               {{ name|upper }}_MEM_WRAP_OFFSET,
-                               {{ name|upper }}_MEM_WRAP_SIZE,
-                               {{ name|upper }}_MEM_STRIDE>
-                               ({{in_name[0]}}, {{out_name[0]}}, {{in_name[2]}}, {{in_name[1]}}, {{ name|upper }}_SCALING);
diff --git a/aidge_export_arm_cortexm/_Aidge_Arm/templates/kernel/convolution.jinja b/aidge_export_arm_cortexm/_Aidge_Arm/templates/kernel/convolution.jinja
deleted file mode 100644
index 9fcde23663b5e13d020087e9ce4b097de428babe..0000000000000000000000000000000000000000
--- a/aidge_export_arm_cortexm/_Aidge_Arm/templates/kernel/convolution.jinja
+++ /dev/null
@@ -1 +0,0 @@
-aidge_conv2d_hwc_{{dataformat}} ({{input_name}}, {{weight_name}}, {{input_name[2]}}, {{output_name}}, {{name|upper}}_NB_CHANNELS, {{name|upper}}_CHANNELS_WIDTH, {{name|upper}}_CHANNELS_HEIGHT, {{name|upper}}_KERNEL_Y, {{name|upper}}_KERNEL_X, {{name|upper}}_NB_OUTPUTS, {{name|upper}}_OUTPUTS_WIDTH, {{name|upper}}_OUTPUTS_HEIGHT, {{name|upper}}_PADDING_X, {{name|upper}}_PADDING_Y, {{name|upper}}_STRIDE_X, {{name|upper}}_STRIDE_Y, {{name|upper}}_DILATION_X, {{name|upper}}_DILATION_Y);
diff --git a/aidge_export_arm_cortexm/_Aidge_Arm/templates/kernel/fc_chw.jinja b/aidge_export_arm_cortexm/_Aidge_Arm/templates/kernel/fc_chw.jinja
deleted file mode 100644
index 57aa7876f2d1f6a7d8327a6437eaadc976b03d6a..0000000000000000000000000000000000000000
--- a/aidge_export_arm_cortexm/_Aidge_Arm/templates/kernel/fc_chw.jinja
+++ /dev/null
@@ -1 +0,0 @@
-aidge_fc_chw_{{dataformat}} ({{input_name}}, {{weight_name}}, {{bias_name}}, {{output_name}}, {{name|upper}}_NB_CHANNELS, {{name|upper}}_CHANNEL_HEIGHT, {{name|upper}}_CHANNEL_WIDTH, {{name|upper}}_NB_OUTPUTS);
\ No newline at end of file
diff --git a/aidge_export_arm_cortexm/_Aidge_Arm/templates/kernel/fc_kernel.jinja b/aidge_export_arm_cortexm/_Aidge_Arm/templates/kernel/fc_kernel.jinja
deleted file mode 100644
index 93637f2cc91a4004ded15aa35db7f19f829b997c..0000000000000000000000000000000000000000
--- a/aidge_export_arm_cortexm/_Aidge_Arm/templates/kernel/fc_kernel.jinja
+++ /dev/null
@@ -1,18 +0,0 @@
-N2D2_Export::fccellPropagate<{{ name | upper }}_NB_CHANNELS,
-                             {{ name | upper }}_CHANNELS_HEIGHT,
-                             {{ name | upper }}_CHANNELS_WIDTH,
-                             {{ name | upper }}_NB_OUTPUTS,
-                             {{ name | upper }}_OUTPUTS_HEIGHT,
-                             {{ name | upper }}_OUTPUTS_WIDTH,
-                             {{ name | upper }}_ACTIVATION,
-                             {{ out_name[0]|upper | upper }}_MEM_CONT_OFFSET,
-                             {{ out_name[0]|upper | upper }}_MEM_CONT_SIZE,
-                             {{ out_name[0]|upper | upper }}_MEM_WRAP_OFFSET,
-                             {{ out_name[0]|upper | upper }}_MEM_WRAP_SIZE,
-                             {{ out_name[0]|upper | upper }}_MEM_STRIDE,
-                             {{ name | upper }}_MEM_CONT_OFFSET,
-                             {{ name | upper }}_MEM_CONT_SIZE,
-                             {{ name | upper }}_MEM_WRAP_OFFSET,
-                             {{ name | upper }}_MEM_WRAP_SIZE,
-                             {{ name | upper }}_MEM_STRIDE>
-                             ({{ in_name[0] }}, {{ out_name[0] }}, {{ in_name[2] }}, {{ in_name[1] }}, {{ name | upper }}_SCALING);
diff --git a/aidge_export_arm_cortexm/_Aidge_Arm/templates/kernel/fullyconnected.jinja b/aidge_export_arm_cortexm/_Aidge_Arm/templates/kernel/fullyconnected.jinja
deleted file mode 100644
index b57ffdfd3de8699b9c644c56d3c341ed764ee73e..0000000000000000000000000000000000000000
--- a/aidge_export_arm_cortexm/_Aidge_Arm/templates/kernel/fullyconnected.jinja
+++ /dev/null
@@ -1 +0,0 @@
-aidge_fc_{{dataformat}} ({{input_name}}, {{weight_name}}, {{bias_name}}, {{output_name}}, {{name|upper}}_BATCH_SIZE, {{name|upper}}_NB_INPUTS, {{name|upper}}_NB_OUTPUTS);
\ No newline at end of file
diff --git a/aidge_export_arm_cortexm/_Aidge_Arm/templates/kernel/pool_kernel.jinja b/aidge_export_arm_cortexm/_Aidge_Arm/templates/kernel/pool_kernel.jinja
deleted file mode 100644
index 95b5b024d4f1d455af9a2ef4167ff5bdfb3b49c0..0000000000000000000000000000000000000000
--- a/aidge_export_arm_cortexm/_Aidge_Arm/templates/kernel/pool_kernel.jinja
+++ /dev/null
@@ -1,25 +0,0 @@
-N2D2_Export::poolcellPropagat<{{ in_name[0]|upper }}_NB_CHANNELS,
-                               {{ in_name[0]|upper }}_CHANNELS_HEIGHT,
-                               {{ in_name[0]|upper }}_CHANNELS_WIDTH,
-                               {{ out_name[0]|upper }}_NB_OUTPUTS,
-                               {{ out_name[0]|upper }}_OUTPUTS_HEIGHT,
-                               {{ out_name[0]|upper }}_OUTPUTS_WIDTH,
-                               {{ name|upper }}_PADDING_Y,
-                               {{ name|upper }}_PADDING_X,
-                               {{ name|upper }}_STRIDE_Y,
-                               {{ name|upper }}_STRIDE_X,
-                               {{ name|upper }}_KERNEL_HEIGHT,
-                               {{ name|upper }}_KERNEL_WIDTH,
-                               {{ name|upper }}_POOLING_TYPE,
-                               {{ name|upper }}_ACTIVATION,
-                               {{ out_name[0]|upper }}_MEM_CONT_OFFSET,
-                               {{ out_name[0]|upper }}_MEM_CONT_SIZE,
-                               {{ out_name[0]|upper }}_MEM_WRAP_OFFSET,
-                               {{ out_name[0]|upper }}_MEM_WRAP_SIZE,
-                               {{ out_name[0]|upper }}_MEM_STRIDE,
-                               {{ name|upper }}_MEM_CONT_OFFSET,
-                               {{ name|upper }}_MEM_CONT_SIZE,
-                               {{ name|upper }}_MEM_WRAP_OFFSET,
-                               {{ name|upper }}_MEM_WRAP_SIZE,
-                               {{ name|upper }}_MEM_STRIDE>
-                               ({{in_name[0]}}, {{out_name[0]}});
diff --git a/aidge_export_arm_cortexm/_Aidge_Arm/templates/kernel/pooling.jinja b/aidge_export_arm_cortexm/_Aidge_Arm/templates/kernel/pooling.jinja
deleted file mode 100644
index 86684af278e0014b12c1a7ef7f9de26131215dde..0000000000000000000000000000000000000000
--- a/aidge_export_arm_cortexm/_Aidge_Arm/templates/kernel/pooling.jinja
+++ /dev/null
@@ -1 +0,0 @@
-aidge_{{pool_type}}pool2d_{{dataformat}} ({{input_name}}, {{output_name}}, {{name|upper}}_NB_CHANNELS, {{name|upper}}_CHANNELS_WIDTH, {{name|upper}}_CHANNELS_HEIGHT, {{name|upper}}_KERNEL_X, {{name|upper}}_KERNEL_Y, {{name|upper}}_NB_OUTPUTS, {{name|upper}}_OUTPUTS_WIDTH, {{name|upper}}_OUTPUTS_HEIGHT, {{name|upper}}_PADDING_X, {{name|upper}}_PADDING_Y, {{name|upper}}_STRIDE_X, {{name|upper}}_STRIDE_Y);
\ No newline at end of file
diff --git a/aidge_export_arm_cortexm/_Aidge_Arm/templates/kernel/relu.jinja b/aidge_export_arm_cortexm/_Aidge_Arm/templates/kernel/relu.jinja
deleted file mode 100644
index cb11a50802e4f713ef23930e88bafd014dbcd616..0000000000000000000000000000000000000000
--- a/aidge_export_arm_cortexm/_Aidge_Arm/templates/kernel/relu.jinja
+++ /dev/null
@@ -1 +0,0 @@
-aidge_relu_float32({{in_name[0]}}, {{out_name[0]}},  {{in_name[0]}}_DIMS, {{name|upper}}_OUTPUTS_SIZE);