diff --git a/firmware/export/config/sansaclipplus.h b/firmware/export/config/sansaclipplus.h
index 8a0a040..0d53774 100644
--- a/firmware/export/config/sansaclipplus.h
+++ b/firmware/export/config/sansaclipplus.h
@@ -179,8 +179,8 @@
 
 /* enable these for the experimental usb stack */
 #define HAVE_USBSTACK
-#define USB_HANDLED_BY_OF
-//#define USE_ROCKBOX_USB
+//#define USB_HANDLED_BY_OF
+#define USE_ROCKBOX_USB
 #define USB_VENDOR_ID 0x0781
 #define USB_PRODUCT_ID 0x74d1
 
diff --git a/firmware/export/config/sansafuzev2.h b/firmware/export/config/sansafuzev2.h
index b725ab5..086cde4 100644
--- a/firmware/export/config/sansafuzev2.h
+++ b/firmware/export/config/sansafuzev2.h
@@ -193,8 +193,8 @@
 
 /* enable these for the experimental usb stack */
 #define HAVE_USBSTACK
-#define USB_HANDLED_BY_OF
-//#define USE_ROCKBOX_USB
+//#define USB_HANDLED_BY_OF
+#define USE_ROCKBOX_USB
 #define USB_VENDOR_ID 0x0781
 #define USB_PRODUCT_ID 0x74c3   /* MSC = 0x74c3, MTP = 0x74c2 */
 
diff --git a/firmware/target/arm/as3525/usb-drv-as3525v2.c b/firmware/target/arm/as3525/usb-drv-as3525v2.c
index 63f6e83..8e090fa 100644
--- a/firmware/target/arm/as3525/usb-drv-as3525v2.c
+++ b/firmware/target/arm/as3525/usb-drv-as3525v2.c
@@ -31,7 +31,7 @@
 #include "panic.h"
 #include "mmu-arm.h"
 #include "system.h"
-//#define LOGF_ENABLE
+#define LOGF_ENABLE
 #include "logf.h"
 #include "usb-drv-as3525v2.h"
 #include "usb_core.h"
@@ -90,6 +90,8 @@ static struct usb_endpoint endpoints[USB_NUM_ENDPOINTS][2];
 static struct usb_ctrlrequest _ep0_setup_pkt __attribute__((aligned(32)));
 static struct usb_ctrlrequest *ep0_setup_pkt = AS3525_UNCACHED_ADDR(&_ep0_setup_pkt);
 
+static int g_usbreset_count = 0;
+
 /* state of EP0 */
 static enum ep0state ep0_state;
 
@@ -449,6 +451,8 @@ void usb_drv_init(void)
         wakeup_init(&endpoints[ep][DIR_OUT].complete);
     /* Enable global interrupts */
     enable_global_interrupts();
+
+    g_usbreset_count = 0;
 }
 
 void usb_drv_exit(void)
@@ -587,6 +591,19 @@ void INT_USB(void)
     {
         logf("usb-drv: bus reset");
 
+        g_usbreset_count++;
+
+        if(g_usbreset_count == 2)
+        {
+            logf("usb-drv: hard reset");
+            logf("--------");
+            logf("--------");
+            DCTL |= DCTL_sftdiscon;
+            usb_delay();
+            usb_drv_exit();
+            usb_drv_init(); /* reset g_usbreset_count here */
+        }
+
         /* Clear the Remote Wakeup Signalling */
         DCTL &= ~DCTL_rmtwkupsig;
 
diff --git a/firmware/usbstack/usb_storage.c b/firmware/usbstack/usb_storage.c
index 567331d..1973852 100644
--- a/firmware/usbstack/usb_storage.c
+++ b/firmware/usbstack/usb_storage.c
@@ -23,7 +23,7 @@
 #include "usb_core.h"
 #include "usb_drv.h"
 #include "usb_class_driver.h"
-/*#define LOGF_ENABLE*/
+#define LOGF_ENABLE
 #include "logf.h"
 #include "storage.h"
 #include "disk.h"
