diff --git a/epicardium/epicardium.h b/epicardium/epicardium.h
index d5af7aefe1262e31df689181ceba6f903ba4c079..9a7f8050c210672659270b7f7ff81acbdf6542d4 100644
--- a/epicardium/epicardium.h
+++ b/epicardium/epicardium.h
@@ -12,6 +12,7 @@ API(API_UART_WRITE, void epic_uart_write_str(const char*str, intptr_t length));
 #define API_UART_READ  0x2
 API(API_UART_READ, char epic_uart_read_chr(void));
 
+// set LED color of led $led to color rgb
 #define API_LEDS_SET   0x3
 API(API_LEDS_SET, void epic_leds_set(int led, uint8_t r, uint8_t g, uint8_t b));
 
diff --git a/epicardium/main.c b/epicardium/main.c
index b2bd12e572e6433665c56ecdec807b9820a6bfbe..903d1b995e8256eb1a554fa65f30f93d8ab37db8 100644
--- a/epicardium/main.c
+++ b/epicardium/main.c
@@ -16,13 +16,6 @@
 
 TaskHandle_t dispatcher_task_id;
 
-/* TODO: Move out of main.c */
-void epic_leds_set(int led, uint8_t r, uint8_t g, uint8_t b)
-{
-	leds_set(led, r, g, b);
-	leds_update();
-}
-
 /*
  * API dispatcher task.  This task will sleep until an API call is issued and
  * then wake up to dispatch it.
diff --git a/epicardium/meson.build b/epicardium/meson.build
index 88726887b7d67b9644ceff2a8b1f2c0d45d20002..27848d2a2bef9a9f1996965687e479f9beb6fcb5 100644
--- a/epicardium/meson.build
+++ b/epicardium/meson.build
@@ -67,6 +67,7 @@ elf = executable(
   'main.c',
   'serial.c',
   'support.c',
+  'modules/leds.c',
   dependencies: [libcard10, max32665_startup_core0, maxusb],
   link_with: [api_dispatcher_lib, freertos],
   link_whole: [max32665_startup_core0_lib, board_card10_lib],
diff --git a/epicardium/modules/leds.c b/epicardium/modules/leds.c
new file mode 100644
index 0000000000000000000000000000000000000000..c4a3f977b8886eadcaac06d818541e87468339a1
--- /dev/null
+++ b/epicardium/modules/leds.c
@@ -0,0 +1,7 @@
+#include "leds.h"
+
+void epic_leds_set(int led, uint8_t r, uint8_t g, uint8_t b)
+{
+	leds_set(led, r, g, b);
+	leds_update();
+}
\ No newline at end of file