Index: firmware/export/config/sansafuzev2.h
===================================================================
--- firmware/export/config/sansafuzev2.h	(revision 28903)
+++ firmware/export/config/sansafuzev2.h	(working copy)
@@ -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 */
 
Index: firmware/export/config/sansaclipplus.h
===================================================================
--- firmware/export/config/sansaclipplus.h	(revision 28903)
+++ firmware/export/config/sansaclipplus.h	(working copy)
@@ -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
 
Index: firmware/usbstack/usb_storage.c
===================================================================
--- firmware/usbstack/usb_storage.c	(revision 28903)
+++ firmware/usbstack/usb_storage.c	(working copy)
@@ -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"
Index: firmware/target/arm/as3525/usb-drv-as3525v2.c
===================================================================
--- firmware/target/arm/as3525/usb-drv-as3525v2.c	(revision 28903)
+++ firmware/target/arm/as3525/usb-drv-as3525v2.c	(working copy)
@@ -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_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 @@
         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 @@
     {
         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;
 