diff --git a/epicardium/modules/ble.c b/epicardium/ble/ble.c
similarity index 99%
rename from epicardium/modules/ble.c
rename to epicardium/ble/ble.c
index 4f275832393b22d6de71763270bed7e1efb3477b..dc8664067b67e1d6679d1b2f411964e845ec6d60 100644
--- a/epicardium/modules/ble.c
+++ b/epicardium/ble/ble.c
@@ -11,8 +11,9 @@
 #include "util/bstream.h"
 #include "att_api.h"
 
-#include "modules.h"
+#include "modules/modules.h"
 
+#include "fs_util.h"
 #include "FreeRTOS.h"
 #include "timers.h"
 
diff --git a/epicardium/ble/meson.build b/epicardium/ble/meson.build
new file mode 100644
index 0000000000000000000000000000000000000000..0da905389727577c48386b415135b09a6b5a4035
--- /dev/null
+++ b/epicardium/ble/meson.build
@@ -0,0 +1,4 @@
+ble_sources = files(
+  'ble.c',
+  'stack.c'
+)
diff --git a/epicardium/modules/ble_stack_fit.c b/epicardium/ble/stack.c
similarity index 100%
rename from epicardium/modules/ble_stack_fit.c
rename to epicardium/ble/stack.c
diff --git a/epicardium/meson.build b/epicardium/meson.build
index bf727f0715673fdf9e430ddd8685a777ac1c3b10..9b3880a81e8dcf3ea17ef76411328cc54a2f15f1 100644
--- a/epicardium/meson.build
+++ b/epicardium/meson.build
@@ -65,6 +65,7 @@ freertos = static_library(
 ##########################################################################
 
 subdir('modules/')
+subdir('ble/')
 
 subdir('l0der/')
 
@@ -75,6 +76,7 @@ elf = executable(
   'support.c',
   module_sources,
   l0der_sources,
+  ble_sources,
   dependencies: [libcard10, max32665_startup_core0, maxusb, libff13, ble],
   link_with: [api_dispatcher_lib, freertos],
   link_whole: [max32665_startup_core0_lib, board_card10_lib, newlib_heap_lib],
diff --git a/epicardium/modules/meson.build b/epicardium/modules/meson.build
index 416ec428cb6e031569ad768d1eb05ea3b57a0045..d02549569f0ae789435567c1115864a1fa2f860f 100644
--- a/epicardium/modules/meson.build
+++ b/epicardium/modules/meson.build
@@ -10,6 +10,4 @@ module_sources = files(
   'vibra.c',
   'light_sensor.c',
   'rtc.c',
-  'ble.c',
-  'ble_stack_fit.c'
 )