diff --git a/components/micropython/CMakeLists.txt b/components/micropython/CMakeLists.txt
index eccea015c468760bf4851781f91d95e44bb0175a..6efb5c7b96269ad23d0ae19de0fe3b08724427ed 100644
--- a/components/micropython/CMakeLists.txt
+++ b/components/micropython/CMakeLists.txt
@@ -181,3 +181,5 @@ target_compile_definitions(${COMPONENT_TARGET} PUBLIC
 )
 
 include("${MICROPY_DIR}/py/mkrules.cmake")
+
+target_link_libraries(${COMPONENT_LIB} INTERFACE "-u flow3r_startup")
\ No newline at end of file
diff --git a/components/micropython/include/mpconfigboard.h b/components/micropython/include/mpconfigboard.h
index d8e51ab1529dd0cf6b85e6bac28cbe3a9e999275..f3a24752ce550b4711c954e1521459ade07f883f 100644
--- a/components/micropython/include/mpconfigboard.h
+++ b/components/micropython/include/mpconfigboard.h
@@ -11,5 +11,5 @@
 #define MICROPY_ESP_IDF_4 1
 #define MICROPY_VFS_POSIX 1
 
-void st3m_board_startup(void);
-#define MICROPY_BOARD_STARTUP st3m_board_startup
+void flow3r_startup(void);
+#define MICROPY_BOARD_STARTUP flow3r_startup
diff --git a/components/st3m/CMakeLists.txt b/components/st3m/CMakeLists.txt
index b98d6a7fc67d938aeb31730fd8f32fcdfe6d7590..2aac4cd768947e0651578c9d1956c53f0d2e64b9 100644
--- a/components/st3m/CMakeLists.txt
+++ b/components/st3m/CMakeLists.txt
@@ -1,12 +1,8 @@
-set(SYS_C_PATH "${CMAKE_CURRENT_BINARY_DIR}/include/st3m_sys_data.c")
-
 idf_component_register(
     SRCS
         st3m_audio.c
-        st3m_board_startup.c
         st3m_gfx.c
         st3m_counter.c
-        st3m_fs.c
         st3m_scope.c
         st3m_leds.c
         st3m_colors.c
@@ -20,36 +16,17 @@ idf_component_register(
         st3m_captouch.c
         st3m_ringbuffer.c
         st3m_tar.c
-        "${SYS_C_PATH}"
     INCLUDE_DIRS
         .
     REQUIRES
         flow3r_bsp
-        bl00mbox
         ctx
         fatfs
         tinyusb
         esp_ringbuf
+        esp_timer
         usb
 )
 
 idf_component_get_property(tusb_lib tinyusb COMPONENT_LIB)
-target_include_directories(${tusb_lib} PRIVATE .)
-
-# Generate st3m_sys_data.c from python_payload.
-idf_build_get_property(python PYTHON)
-file(GLOB_RECURSE payload_files "${PROJECT_DIR}/python_payload/*.py")
-add_custom_command(
-    OUTPUT
-        "${SYS_C_PATH}"
-    COMMAND
-        "${python}" "${CMAKE_CURRENT_SOURCE_DIR}/host-tools/pack-sys.py" "${PROJECT_DIR}/python_payload" "${SYS_C_PATH}"
-    DEPENDS
-        "${CMAKE_CURRENT_SOURCE_DIR}/host-tools/pack-sys.py" 
-        "${payload_files}"
-        
-)
-add_custom_target(generate_st3m_sys_c ALL DEPENDS "${SYS_C_PATH}")
-
-idf_component_get_property(st3m_lib st3m COMPONENT_LIB)
-add_dependencies("${st3m_lib}" generate_st3m_sys_c)
+target_include_directories(${tusb_lib} PRIVATE .)
\ No newline at end of file
diff --git a/main/CMakeLists.txt b/main/CMakeLists.txt
index 02f1ef7b006e2a37296a1c75745da45f4dfbd96e..baa142fde9c994942b190d616637b68c9c7e460f 100644
--- a/main/CMakeLists.txt
+++ b/main/CMakeLists.txt
@@ -1,4 +1,28 @@
+set(SYS_C_PATH "${CMAKE_CURRENT_BINARY_DIR}/include/sys_data.c")
+
 idf_component_register(
+    SRCS
+        main.c
+        fs.c
+        "${SYS_C_PATH}"
 )
 idf_component_get_property(freertos_lib freertos COMPONENT_LIB)
 target_compile_options(${freertos_lib} PRIVATE -Wno-format)
+
+# Generate sys_data.c from python_payload.
+idf_build_get_property(python PYTHON)
+file(GLOB_RECURSE payload_files "${PROJECT_DIR}/python_payload/*.py")
+add_custom_command(
+    OUTPUT
+        "${SYS_C_PATH}"
+    COMMAND
+        "${python}" "${CMAKE_CURRENT_SOURCE_DIR}/host-tools/pack-sys.py" "${PROJECT_DIR}/python_payload" "${SYS_C_PATH}"
+    DEPENDS
+        "${CMAKE_CURRENT_SOURCE_DIR}/host-tools/pack-sys.py" 
+        "${payload_files}"
+        
+)
+add_custom_target(generate_sys_c ALL DEPENDS "${SYS_C_PATH}")
+
+idf_component_get_property(main_lib main COMPONENT_LIB)
+add_dependencies("${main_lib}" generate_sys_c)
\ No newline at end of file
diff --git a/components/st3m/st3m_fs.c b/main/fs.c
similarity index 98%
rename from components/st3m/st3m_fs.c
rename to main/fs.c
index 1378e7c77f53f12f3ef8c0715fd223b7c0c6d6c1..1fcab2a06eb649f748b3f08f863cbce0e64184bd 100644
--- a/components/st3m/st3m_fs.c
+++ b/main/fs.c
@@ -1,4 +1,5 @@
-#include "st3m_fs.h"
+#include "fs.h"
+
 #include "st3m_mode.h"
 #include "st3m_sys_data.h"
 #include "st3m_tar.h"
diff --git a/components/st3m/st3m_fs.h b/main/fs.h
similarity index 100%
rename from components/st3m/st3m_fs.h
rename to main/fs.h
diff --git a/components/st3m/host-tools/pack-sys.py b/main/host-tools/pack-sys.py
similarity index 100%
rename from components/st3m/host-tools/pack-sys.py
rename to main/host-tools/pack-sys.py
diff --git a/components/st3m/st3m_board_startup.c b/main/main.c
similarity index 97%
rename from components/st3m/st3m_board_startup.c
rename to main/main.c
index 659c7719552cda346532d60677bcd3dd5b644586..1edd80096cd49758065ffe13a39c4587d6279411 100644
--- a/components/st3m/st3m_board_startup.c
+++ b/main/main.c
@@ -3,7 +3,6 @@
 #include "st3m_audio.h"
 #include "st3m_captouch.h"
 #include "st3m_console.h"
-#include "st3m_fs.h"
 #include "st3m_gfx.h"
 #include "st3m_io.h"
 #include "st3m_leds.h"
@@ -11,12 +10,14 @@
 #include "st3m_scope.h"
 #include "st3m_usb.h"
 
+#include "fs.h"
+
 #include "esp_log.h"
 #include "freertos/FreeRTOS.h"
 #include "freertos/task.h"
 
 // Called by micropython via MICROPY_BOARD_STARTUP.
-void st3m_board_startup(void) {
+void flow3r_startup(void) {
     // Initialize display first as that gives us a nice splash screen.
     st3m_gfx_init();
     // Submit splash a couple of times to make sure we've fully flushed out the