diff --git a/aidge_export_arm_cortexm/_Aidge_Arm/kernels/Add/aidge_add_float32.h b/aidge_export_arm_cortexm/_Aidge_Arm/kernels/Add/aidge_add_float32.h
index c9cfc152851099e4f307ee95450ce28baf76114e..ad11e15f0fb41e8487e037314de10bb360cd033e 100644
--- a/aidge_export_arm_cortexm/_Aidge_Arm/kernels/Add/aidge_add_float32.h
+++ b/aidge_export_arm_cortexm/_Aidge_Arm/kernels/Add/aidge_add_float32.h
@@ -1,17 +1,17 @@
-void aidge_add_float32(float* input_a, 
-                       float* input_b, 
-                       float* output, 
-                       int dim_a[],
-                       int dim_b[],
-                       int output_Dim[],
+void aidge_add_float32(const float* input_a,
+                       const float* input_b,
+                       float* output,
+                       const int dim_a[],
+                       const int dim_b[],
+                       const int output_Dim[],
                        int size_dima,
                        int size_dimb,
                        int size_outputDim,
                        int output_size)
 {
-    // Broadcast dims 
-    int ndim_a[size_outputDim];     
-    int ndim_b[size_outputDim];     
+    // Broadcast dims
+    int ndim_a[size_outputDim];
+    int ndim_b[size_outputDim];
 
     for (int i= 0; i<size_outputDim; i++){
     	int idx = size_outputDim-size_dima;
@@ -96,4 +96,4 @@ void aidge_add_float32(float* input_a,
         }
 
     }
-}
\ No newline at end of file
+}
diff --git a/aidge_export_arm_cortexm/_Aidge_Arm/kernels/Mul/aidge_mul_float32.h b/aidge_export_arm_cortexm/_Aidge_Arm/kernels/Mul/aidge_mul_float32.h
index dbbf908cee8699bd09b6bc83b8abeeb481c26c05..8045717cbee6ebeee82e7f379726d530166288b7 100644
--- a/aidge_export_arm_cortexm/_Aidge_Arm/kernels/Mul/aidge_mul_float32.h
+++ b/aidge_export_arm_cortexm/_Aidge_Arm/kernels/Mul/aidge_mul_float32.h
@@ -1,17 +1,17 @@
-void aidge_mul_float32(float* input_a, 
-                       float* input_b, 
-                       float* output, 
-                       int dim_a[],
-                       int dim_b[],
-                       int output_Dim[],
+void aidge_mul_float32(const float* input_a,
+                       const float* input_b,
+                       float* output,
+                       const int dim_a[],
+                       const int dim_b[],
+                       const int output_Dim[],
                        int size_dima,
                        int size_dimb,
                        int size_outputDim,
                        int output_size)
 {
-    // Broadcast dims 
-    int ndim_a[size_outputDim];     
-    int ndim_b[size_outputDim];     
+    // Broadcast dims
+    int ndim_a[size_outputDim];
+    int ndim_b[size_outputDim];
 
     for (int i= 0; i<size_outputDim; i++){
     	int idx = size_outputDim-size_dima;
@@ -96,4 +96,4 @@ void aidge_mul_float32(float* input_a,
         }
 
     }
-}
\ No newline at end of file
+}
diff --git a/aidge_export_arm_cortexm/_Aidge_Arm/kernels/Sub/aidge_sub_float32.h b/aidge_export_arm_cortexm/_Aidge_Arm/kernels/Sub/aidge_sub_float32.h
index 1f4f7d798eedcb9d4504087ba02179203ee46772..99bd9a0e54857004d0944e7f854db28732abe580 100644
--- a/aidge_export_arm_cortexm/_Aidge_Arm/kernels/Sub/aidge_sub_float32.h
+++ b/aidge_export_arm_cortexm/_Aidge_Arm/kernels/Sub/aidge_sub_float32.h
@@ -1,11 +1,11 @@
 
 
-void aidge_sub_float32(float* input_a, 
-                       float* input_b, 
-                       float* output, 
+void aidge_sub_float32(const float* input_a,
+                       const float* input_b,
+                       float* output,
                        unsigned int size)
 {
     for (unsigned int i = 0; i < size; ++i) {
         output[i] = input_a[i] - input_b[i];
     }
-}
\ No newline at end of file
+}
diff --git a/aidge_export_arm_cortexm/_Aidge_Arm/templates/configuration/add.jinja b/aidge_export_arm_cortexm/_Aidge_Arm/templates/configuration/add.jinja
new file mode 100644
index 0000000000000000000000000000000000000000..67b1c33e026f3a682d389adc1b67e901ebe9c0e5
--- /dev/null
+++ b/aidge_export_arm_cortexm/_Aidge_Arm/templates/configuration/add.jinja
@@ -0,0 +1,21 @@
+{#- For name header -#}
+#ifndef {{ name|upper }}_LAYER_H
+#define {{ name|upper }}_LAYER_H
+
+/* ElemWise - add layer */
+{% include "./_def_io.jinja" %}
+{% include "./_meminfo.jinja" %}
+
+
+{# For layer configuration -#}
+#define {{ name|upper }}_OUTPUTS_SIZE {{ out_size[0] }}
+
+#define {{name|upper}}_IN_0_NB_DIMS {{ in_dims[0]|length}}
+#define {{name|upper}}_IN_1_NB_DIMS {{ in_dims[1]|length}}
+#define {{name|upper}}_OUT_0_NB_DIMS {{ out_dims[0]|length}}
+
+static const int {{name|upper}}_IN_0_DIMS[] = { {{ in_dims[0]|join(", ") }} };
+static const int {{name|upper}}_IN_1_DIMS[] = { {{ in_dims[1]|join(", ") }} };
+static const int {{name|upper}}_OUT_0_DIMS[] = { {{ out_dims[0]|join(", ") }} };
+
+#endif /* {{ name|upper }}_LAYER_H */
diff --git a/aidge_export_arm_cortexm/_Aidge_Arm/templates/configuration/mul.jinja b/aidge_export_arm_cortexm/_Aidge_Arm/templates/configuration/mul.jinja
new file mode 100644
index 0000000000000000000000000000000000000000..e7c303e001983288c1286f5c5b006e9fdd2c61cd
--- /dev/null
+++ b/aidge_export_arm_cortexm/_Aidge_Arm/templates/configuration/mul.jinja
@@ -0,0 +1,20 @@
+{#- For name header -#}
+#ifndef {{ name|upper }}_LAYER_H
+#define {{ name|upper }}_LAYER_H
+
+/* ElemWise - mul layer */
+{% include "./_def_io.jinja" %}
+{% include "./_meminfo.jinja" %}
+
+{# For layer configuration -#}
+#define {{ name|upper }}_OUTPUTS_SIZE {{ out_size[0] }}
+
+#define {{name|upper}}_IN_0_NB_DIMS {{ in_dims[0]|length}}
+#define {{name|upper}}_IN_1_NB_DIMS {{ in_dims[1]|length}}
+#define {{name|upper}}_OUT_0_NB_DIMS {{ out_dims[0]|length}}
+
+static const int {{name|upper}}_IN_0_DIMS[] = { {{ in_dims[0]|join(", ") }} };
+static const int {{name|upper}}_IN_1_DIMS[] = { {{ in_dims[1]|join(", ") }} };
+static const int {{name|upper}}_OUT_0_DIMS[] = { {{ out_dims[0]|join(", ") }} };
+
+#endif /* {{ name|upper }}_LAYER_H */
diff --git a/aidge_export_arm_cortexm/_Aidge_Arm/templates/configuration/sub.jinja b/aidge_export_arm_cortexm/_Aidge_Arm/templates/configuration/sub.jinja
new file mode 100644
index 0000000000000000000000000000000000000000..9ed0a8f718bb9f66b3541755a86b24d4de82390f
--- /dev/null
+++ b/aidge_export_arm_cortexm/_Aidge_Arm/templates/configuration/sub.jinja
@@ -0,0 +1,22 @@
+{#- For name header -#}
+#ifndef {{ name|upper }}_LAYER_H
+#define {{ name|upper }}_LAYER_H
+
+/* ElemWise - sub layer */
+{% include "./_def_io.jinja" %}
+{% include "./_meminfo.jinja" %}
+
+{# For layer configuration -#}
+#define {{ name|upper }}_INPUTS_SIZE {{ in_size[0] }}
+#define {{ name|upper }}_OUTPUTS_SIZE {{ out_size[0] }}
+
+
+#define {{in_name[0]|upper}}_NB_DIM {{ in_dims[0]|length}}
+#define {{in_name[1]|upper}}_NB_DIM {{ in_dims[1]|length}}
+#define {{out_name[0]|upper}}_NB_DIM {{ out_dims[0]|length}}
+
+static const int {{ in_name[0]|upper }}_DIMS[] = { {{ in_dims[0]|join(", ") }} };
+static const int {{ in_name[1]|upper }}_DIMS[] = { {{ in_dims[1]|join(", ") }} };
+static const int {{ out_name[0]|upper }}_DIMS[] = { {{ out_dims[0]|join(", ") }} };
+
+#endif /* {{ name|upper }}_LAYER_H */
diff --git a/aidge_export_arm_cortexm/_Aidge_Arm/templates/forward_call/add.jinja b/aidge_export_arm_cortexm/_Aidge_Arm/templates/forward_call/add.jinja
new file mode 100644
index 0000000000000000000000000000000000000000..8f0d486457f07102695f38433243784f756feb6c
--- /dev/null
+++ b/aidge_export_arm_cortexm/_Aidge_Arm/templates/forward_call/add.jinja
@@ -0,0 +1,14 @@
+{% if not is_output %}
+{{out_cdtype[0]}}* {{out_name[0]}} = ({{out_cdtype[0]}}*) mem + {{out_name[0]|upper}}_OFFSET;
+{% endif %}
+aidge_add_float32(
+    {{in_name[0]}},
+    {{in_name[1]}},
+    {{out_name[0]}},
+    {{name|upper}}_IN_0_DIMS,
+    {{name|upper}}_IN_1_DIMS,
+    {{name|upper}}_OUT_0_DIMS,
+    {{name|upper}}_IN_0_NB_DIMS,
+    {{name|upper}}_IN_1_NB_DIMS,
+    {{name|upper}}_OUT_0_NB_DIMS,
+    {{name|upper}}_OUTPUTS_SIZE);
diff --git a/aidge_export_arm_cortexm/_Aidge_Arm/templates/forward_call/elemwise.jinja b/aidge_export_arm_cortexm/_Aidge_Arm/templates/forward_call/elemwise.jinja
deleted file mode 100644
index 98d6cc95682c27cc1b7468e6972653ecf0189ca9..0000000000000000000000000000000000000000
--- a/aidge_export_arm_cortexm/_Aidge_Arm/templates/forward_call/elemwise.jinja
+++ /dev/null
@@ -1 +0,0 @@
-aidge_{{elemwise_op|lower}}_{{out_dtype[0]}}  ({{in_name[0]}}, {{in_name[1]}}, {{out_name[0]}}, {{in_name[0]}}_DIMS, {{in_name[1]}}_DIMS, {{out_name[0]}}_DIMS,{{in_name[0]|upper}}_NB_DIM,{{in_name[1]|upper}}_NB_DIM,{{out_name[0]|upper}}_NB_DIM, {{name|upper}}_OUTPUTS_SIZE);
diff --git a/aidge_export_arm_cortexm/_Aidge_Arm/templates/forward_call/mul.jinja b/aidge_export_arm_cortexm/_Aidge_Arm/templates/forward_call/mul.jinja
new file mode 100644
index 0000000000000000000000000000000000000000..056746e13f1b33bebfd4d626ccc346aedd20b3f8
--- /dev/null
+++ b/aidge_export_arm_cortexm/_Aidge_Arm/templates/forward_call/mul.jinja
@@ -0,0 +1,14 @@
+{% if not is_output %}
+{{out_cdtype[0]}}* {{out_name[0]}} = ({{out_cdtype[0]}}*) mem + {{out_name[0]|upper}}_OFFSET;
+{% endif %}
+aidge_mul_float32(
+    {{in_name[0]}},
+    {{in_name[1]}},
+    {{out_name[0]}},
+    {{name|upper}}_IN_0_DIMS,
+    {{name|upper}}_IN_1_DIMS,
+    {{name|upper}}_OUT_0_DIMS,
+    {{name|upper}}_IN_0_NB_DIMS,
+    {{name|upper}}_IN_1_NB_DIMS,
+    {{name|upper}}_OUT_0_NB_DIMS,
+    {{name|upper}}_OUTPUTS_SIZE);
diff --git a/aidge_export_arm_cortexm/_Aidge_Arm/templates/forward_call/sub.jinja b/aidge_export_arm_cortexm/_Aidge_Arm/templates/forward_call/sub.jinja
new file mode 100644
index 0000000000000000000000000000000000000000..1bf7fc6347666bef42f3504b4c34ca0f7f19229e
--- /dev/null
+++ b/aidge_export_arm_cortexm/_Aidge_Arm/templates/forward_call/sub.jinja
@@ -0,0 +1,5 @@
+{% if not is_output %}
+{{out_cdtype[0]}}* {{out_name[0]}} = ({{out_cdtype[0]}}*) mem + {{out_name[0]|upper}}_OFFSET;
+{% endif %}
+
+aidge_sub_float32({{in_name[0]}}, {{in_name[1]}}, {{out_name[0]}}, {{name|upper}}_OUTPUTS_SIZE);
diff --git a/aidge_export_arm_cortexm/operators.py b/aidge_export_arm_cortexm/operators.py
index c41304169e8a47af38d26a50e642d45c900ab2d4..9270ee93723ca6f16275865dbfd33725e94b4bda 100644
--- a/aidge_export_arm_cortexm/operators.py
+++ b/aidge_export_arm_cortexm/operators.py
@@ -322,10 +322,9 @@ class FC_ARMCortexM(ExportNodeCpp):
 class Add_ARMCortexM(ExportNodeCpp):
     def __init__(self, node, mem_info, is_input, is_output):
         super().__init__(node, mem_info, is_input, is_output)
-        self.attributes["elemwise_op"] = "\"ADD\""
 
-        self.config_template = str(ROOT / "_Aidge_Arm" / "templates" / "configuration" / "elemwise.jinja")
-        self.forward_template = str(ROOT / "_Aidge_Arm" / "templates" / "forward_call" / "elemwise.jinja")
+        self.config_template = str(ROOT / "_Aidge_Arm" / "templates" / "configuration" / "add.jinja")
+        self.forward_template = str(ROOT / "_Aidge_Arm" / "templates" / "forward_call" / "add.jinja")
         self.include_list = []
         self.kernels_to_copy = [
             str(ROOT / "_Aidge_Arm" / "kernels" / "Add" / "aidge_add_float32.h"),
@@ -333,13 +332,12 @@ class Add_ARMCortexM(ExportNodeCpp):
         ]
 
 @ExportLibAidgeARM.register("Sub", aidge_core.ImplSpec(aidge_core.IOSpec(aidge_core.dtype.float32)))
-class Add_ARMCortexM(ExportNodeCpp):
+class Sub_ARMCortexM(ExportNodeCpp):
     def __init__(self, node, mem_info, is_input, is_output):
         super().__init__(node, mem_info, is_input, is_output)
-        self.attributes["elemwise_op"] = "\"SUB\""
 
-        self.config_template = str(ROOT / "_Aidge_Arm" / "templates" / "configuration" / "elemwise.jinja")
-        self.forward_template = str(ROOT / "_Aidge_Arm" / "templates" / "forward_call" / "elemwise.jinja")
+        self.config_template = str(ROOT / "_Aidge_Arm" / "templates" / "configuration" / "sub.jinja")
+        self.forward_template = str(ROOT / "_Aidge_Arm" / "templates" / "forward_call" / "sub.jinja")
         self.include_list = []
         self.kernels_to_copy = [
             str(ROOT / "_Aidge_Arm" / "kernels" / "Sub" / "aidge_sub_float32.h"),
@@ -350,10 +348,9 @@ class Add_ARMCortexM(ExportNodeCpp):
 class Mul_ARMCortexM(ExportNodeCpp):
     def __init__(self, node, mem_info, is_input, is_output):
         super().__init__(node, mem_info, is_input, is_output)
-        self.attributes["elemwise_op"] = "\"MUL\""
 
-        self.config_template = str(ROOT / "_Aidge_Arm" / "templates" / "configuration" / "elemwise.jinja")
-        self.forward_template = str(ROOT / "_Aidge_Arm" / "templates" / "forward_call" / "elemwise.jinja")
+        self.config_template = str(ROOT / "_Aidge_Arm" / "templates" / "configuration" / "mul.jinja")
+        self.forward_template = str(ROOT / "_Aidge_Arm" / "templates" / "forward_call" / "mul.jinja")
         self.include_list = []
         self.kernels_to_copy = [
             str(ROOT / "_Aidge_Arm" / "kernels" / "Mul" / "aidge_mul_float32.h"),