diff --git a/epicardium/fs/filesystem_fat.c b/epicardium/fs/filesystem_fat.c
index 1e4998c4ace6b02deae97e04b31bebe2fb95493f..2f513b767167b2fb48f7ea0a3b03f3a6a0ede955 100644
--- a/epicardium/fs/filesystem_fat.c
+++ b/epicardium/fs/filesystem_fat.c
@@ -25,6 +25,7 @@
 #include "modules/log.h"
 #include "modules/modules.h"
 #include "api/common.h"
+#include "core_cmFunc.h" //__get_IPSR()
 
 #define SSLOG_DEBUG(...) LOG_DEBUG("fatfs", __VA_ARGS__)
 #define SSLOG_INFO(...) LOG_INFO("fatfs", __VA_ARGS__)
@@ -167,7 +168,13 @@ int fatfs_attach()
 
 void fatfs_schedule_attach(void)
 {
-	xTimerPendFunctionCallFromISR(cb_attachTimer, NULL, 0, NULL);
+	//if we're running in thread context, cont't call the *FromISR version
+	if (__get_IPSR() == 0) {
+		xTimerPendFunctionCall(
+			cb_attachTimer, NULL, 0, 1); //wait 1 tick
+	} else {
+		xTimerPendFunctionCallFromISR(cb_attachTimer, NULL, 0, NULL);
+	}
 }
 
 void fatfs_detach()
diff --git a/epicardium/modules/usb.c b/epicardium/modules/usb.c
index 302ea846428478a013784c03202cf2d457e77b19..e14032e4e3dccb91342630317786d8c35d363b3a 100644
--- a/epicardium/modules/usb.c
+++ b/epicardium/modules/usb.c
@@ -133,23 +133,29 @@ static int mscmem_ready()
 	return mx25_ready();
 }
 
+static bool s_fsDetached = false;
 int epic_usb_shutdown(void)
 {
 	esb_deinit();
-	fatfs_attach();
+	if (s_fsDetached) {
+		fatfs_attach();
+	}
 	return 0;
 }
 
 int epic_usb_storage(void)
 {
 	esb_deinit();
+	s_fsDetached = true;
 	return esb_init(&s_cfg_msc);
 }
 
 int epic_usb_cdcacm(void)
 {
 	esb_deinit();
-	fatfs_attach();
+	if (s_fsDetached) {
+		fatfs_attach();
+	}
 	return esb_init(&s_cfg_cdcacm);
 }