diff --git a/aidge_export_arm_cortexm/_Aidge_Arm/kernels/Atan/aidge_atan.hpp b/aidge_export_arm_cortexm/_Aidge_Arm/kernels/Atan/aidge_atan.hpp
new file mode 100644
index 0000000000000000000000000000000000000000..d4da329a44eb8669bc0469a31beeca670b63e6c3
--- /dev/null
+++ b/aidge_export_arm_cortexm/_Aidge_Arm/kernels/Atan/aidge_atan.hpp
@@ -0,0 +1,10 @@
+#include <cmath>
+
+template <unsigned int SIZE, typename Input_T, typename Output_T>
+__attribute__((always_inline)) inline static
+void aidge_atan(Input_T* __restrict input, Output_T* __restrict output) {
+  for (unsigned int i = 0; i < SIZE; ++i) {
+    // Note : no cast to get compiler warning if we lose precision during auto cast!
+    output[i] = std::atan(input[i]);
+  }
+}
diff --git a/aidge_export_arm_cortexm/_Aidge_Arm/kernels/Atan/aidge_atan_float32.c b/aidge_export_arm_cortexm/_Aidge_Arm/kernels/Atan/aidge_atan_float32.c
deleted file mode 100644
index 469f3aec9364ea16c715cbf39e6e9d31213c246e..0000000000000000000000000000000000000000
--- a/aidge_export_arm_cortexm/_Aidge_Arm/kernels/Atan/aidge_atan_float32.c
+++ /dev/null
@@ -1,10 +0,0 @@
-#include <math.h>
-
-void aidge_atan_float32 (float* input,
-                         float* output,
-                         unsigned int size)
-{
-    for (unsigned int i = 0; i < size; ++i) {
-        output[i] = atanf(input[i]);
-    }
-}
diff --git a/aidge_export_arm_cortexm/_Aidge_Arm/templates/configuration/atan.jinja b/aidge_export_arm_cortexm/_Aidge_Arm/templates/configuration/atan.jinja
new file mode 100644
index 0000000000000000000000000000000000000000..70ab97008b2cc15ab00b132d5f96c696d7d61415
--- /dev/null
+++ b/aidge_export_arm_cortexm/_Aidge_Arm/templates/configuration/atan.jinja
@@ -0,0 +1,9 @@
+{#- For name header -#}
+#ifndef {{ name|upper }}_LAYER_H
+#define {{ name|upper }}_LAYER_H
+
+{% include "./_meminfo.jinja" %}
+
+#define {{ name|upper }}_OUTPUTS_SIZE {{ out_chan[0] * out_height[0] * out_width[0] }}
+
+#endif /* {{ name|upper }}_LAYER_H */
diff --git a/aidge_export_arm_cortexm/_Aidge_Arm/templates/configuration/elemwise.jinja b/aidge_export_arm_cortexm/_Aidge_Arm/templates/configuration/elemwise.jinja
index dc3bdc00f90f903f116f42e4825dc7613b2a2180..4651bd47002f994097b233825f32e399c0c6995a 100644
--- a/aidge_export_arm_cortexm/_Aidge_Arm/templates/configuration/elemwise.jinja
+++ b/aidge_export_arm_cortexm/_Aidge_Arm/templates/configuration/elemwise.jinja
@@ -16,6 +16,5 @@
 #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}}
-#define {{ name|upper }}_ELEM_OP {{ elemwise_op }}
 
 #endif /* {{ name|upper }}_LAYER_H */
diff --git a/aidge_export_arm_cortexm/_Aidge_Arm/templates/forward_call/atan.jinja b/aidge_export_arm_cortexm/_Aidge_Arm/templates/forward_call/atan.jinja
new file mode 100644
index 0000000000000000000000000000000000000000..3bd5ea111bddf2f4cca2fcc401fc3b5bb3256833
--- /dev/null
+++ b/aidge_export_arm_cortexm/_Aidge_Arm/templates/forward_call/atan.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_atan <{{name|upper}}_OUTPUTS_SIZE> ({{in_name[0]}}, {{out_name[0]}});
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
index c4ca30d6f9ef7cab5fbc3f260b23275feed3b6f0..98d6cc95682c27cc1b7468e6972653ecf0189ca9 100644
--- a/aidge_export_arm_cortexm/_Aidge_Arm/templates/forward_call/elemwise.jinja
+++ b/aidge_export_arm_cortexm/_Aidge_Arm/templates/forward_call/elemwise.jinja
@@ -1 +1 @@
-aidge_{{elemwise_type|lower}}_{{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);
+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/operators.py b/aidge_export_arm_cortexm/operators.py
index dd6ce2e713389940fd4c2b5b63d05b526eaf929f..8df1bfeaf9bbe6a4394c1bcb4cacc3d5d877d249 100644
--- a/aidge_export_arm_cortexm/operators.py
+++ b/aidge_export_arm_cortexm/operators.py
@@ -345,6 +345,20 @@ class Add_ARMCortexM(ExportNodeCpp):
             str(ROOT / "_Aidge_Arm" / "kernels" / "Utils" / "aidge_supportfunctions.h")
         ]
 
+@ExportLibAidgeARM.register("Sub", aidge_core.ImplSpec(aidge_core.IOSpec(aidge_core.dtype.float32)))
+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"] = "\"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.include_list = []
+        self.kernels_to_copy = [
+            str(ROOT / "_Aidge_Arm" / "kernels" / "Sub" / "aidge_sub_float32.h"),
+            str(ROOT / "_Aidge_Arm" / "kernels" / "Utils" / "aidge_supportfunctions.h")
+        ]
+
 @ExportLibAidgeARM.register("Mul", aidge_core.ImplSpec(aidge_core.IOSpec(aidge_core.dtype.float32)))
 class Mul_ARMCortexM(ExportNodeCpp):
     def __init__(self, node, mem_info, is_input, is_output):
@@ -372,6 +386,19 @@ class Softmax_ARMCortexM(ExportNodeCpp):
             str(ROOT / "_Aidge_Arm" / "kernels" / "Softmax" / "aidge_softmax_chw_float32.h"),
         ]
 
+@ExportLibAidgeARM.register("Atan", aidge_core.ImplSpec(aidge_core.IOSpec(aidge_core.dtype.float32)))
+class Atan_ARMCortexM(ExportNodeCpp):
+    def __init__(self, node, mem_info, is_input, is_output):
+        super().__init__(node, mem_info, is_input, is_output)
+
+        self.config_template = str(ROOT / "_Aidge_Arm" / "templates" / "configuration" / "atan.jinja")
+        self.forward_template = str(ROOT / "_Aidge_Arm" / "templates" / "forward_call" / "atan.jinja")
+        self.include_list = []
+        self.kernels_to_copy = [
+            str(ROOT / "_Aidge_Arm" / "kernels" / "Atan" / "aidge_atan.hpp"),
+        ]
+
+
 @ExportLibAidgeARM.register("Sigmoid", aidge_core.ImplSpec(aidge_core.IOSpec(aidge_core.dtype.float32)))
 class Sigmoid_ARMCortexM(ExportNodeCpp):
     def __init__(self, node, mem_info, is_input, is_output):