diff --git a/rbutil/mkamsboot/dualboot.c b/rbutil/mkamsboot/dualboot.c
index 6aa4429..e283a8e 100644
--- a/rbutil/mkamsboot/dualboot.c
+++ b/rbutil/mkamsboot/dualboot.c
@@ -102,23 +102,33 @@ unsigned char dualboot_fuze[204] = {
     0xfb, 0xff, 0xff, 0x1a, 0x01, 0x00, 0x83, 0xe2, 0x00, 0x20, 0xa0, 0xe3, 0x15, 0xff, 0x2f, 0xe1,
     0x14, 0x00, 0x0f, 0xc8, 0x00, 0x00, 0x0b, 0xc8, 0x00, 0x00, 0x0d, 0xc8
 };
-unsigned char dualboot_clipv2[248] = {
+unsigned char dualboot_clipv2[408] = {
     0x06, 0x00, 0x00, 0xea, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     0x24, 0x00, 0x1f, 0xe5, 0x24, 0x10, 0x1f, 0xe5, 0x01, 0x20, 0x40, 0xe0, 0x18, 0x30, 0x1f, 0xe5,
     0x01, 0x40, 0x50, 0xe4, 0x01, 0x40, 0x43, 0xe4, 0x00, 0x00, 0x52, 0xe1, 0xfb, 0xff, 0xff, 0x1a,
-    0x2c, 0x30, 0x0f, 0xe5, 0xa0, 0x00, 0x9f, 0xe5, 0x00, 0x10, 0x90, 0xe5, 0x01, 0x18, 0x81, 0xe3,
-    0x00, 0x10, 0x80, 0xe5, 0x94, 0x00, 0x9f, 0xe5, 0x00, 0x10, 0xa0, 0xe3, 0x00, 0x14, 0x80, 0xe5,
-    0x00, 0x11, 0x90, 0xe5, 0x00, 0x00, 0x51, 0xe3, 0x13, 0x00, 0x00, 0x1a, 0x80, 0x00, 0x9f, 0xe5,
-    0x38, 0x10, 0xa0, 0xe3, 0x00, 0x14, 0x80, 0xe5, 0x08, 0x10, 0xa0, 0xe3, 0x20, 0x10, 0x80, 0xe5,
-    0x10, 0x10, 0xa0, 0xe3, 0x40, 0x10, 0x80, 0xe5, 0x20, 0x10, 0xa0, 0xe3, 0x80, 0x10, 0x80, 0xe5,
-    0x00, 0x10, 0xa0, 0xe3, 0x40, 0x10, 0x80, 0xe5, 0x05, 0x10, 0xa0, 0xe3, 0x01, 0x10, 0x51, 0xe2,
-    0xfd, 0xff, 0xff, 0x1a, 0x04, 0x10, 0x90, 0xe5, 0x00, 0x00, 0x51, 0xe3, 0x02, 0x00, 0x00, 0x0a,
-    0xa4, 0x00, 0x1f, 0xe5, 0xa4, 0x10, 0x1f, 0xe5, 0x01, 0x00, 0x00, 0xea, 0xb8, 0x00, 0x1f, 0xe5,
-    0xb8, 0x10, 0x1f, 0xe5, 0xb0, 0x30, 0x1f, 0xe5, 0x02, 0x50, 0x83, 0xe2, 0x01, 0x40, 0x43, 0xe0,
-    0x01, 0x20, 0x50, 0xe4, 0x01, 0x20, 0x43, 0xe4, 0x04, 0x00, 0x53, 0xe1, 0xfb, 0xff, 0xff, 0x1a,
-    0x01, 0x00, 0x83, 0xe2, 0x00, 0x20, 0xa0, 0xe3, 0x15, 0xff, 0x2f, 0xe1, 0x14, 0x00, 0x0f, 0xc8,
-    0x00, 0x00, 0x0b, 0xc8, 0x00, 0x00, 0x0e, 0xc8
+    0x2c, 0x30, 0x0f, 0xe5, 0x3c, 0x01, 0x9f, 0xe5, 0x00, 0x10, 0x90, 0xe5, 0x01, 0x18, 0x81, 0xe3,
+    0x00, 0x10, 0x80, 0xe5, 0x30, 0x01, 0x9f, 0xe5, 0x00, 0x14, 0x90, 0xe5, 0x08, 0x10, 0xc1, 0xe3,
+    0x80, 0x10, 0x81, 0xe3, 0x00, 0x14, 0x80, 0xe5, 0x80, 0x10, 0xa0, 0xe3, 0x00, 0x12, 0x80, 0xe5,
+    0x00, 0x10, 0xa0, 0xe3, 0x00, 0x00, 0xa0, 0xe1, 0x01, 0x10, 0x81, 0xe2, 0x32, 0x00, 0x51, 0xe3,
+    0xfb, 0xff, 0xff, 0xba, 0x20, 0x20, 0x90, 0xe5, 0x7f, 0x10, 0xa0, 0xe3, 0x00, 0x12, 0x80, 0xe5,
+    0x00, 0x10, 0xa0, 0xe3, 0x00, 0x00, 0xa0, 0xe1, 0x01, 0x10, 0x81, 0xe2, 0x0a, 0x00, 0x51, 0xe3,
+    0xfb, 0xff, 0xff, 0xba, 0x00, 0x14, 0x90, 0xe5, 0x80, 0x10, 0xc1, 0xe3, 0x00, 0x14, 0x80, 0xe5,
+    0x00, 0x00, 0x52, 0xe3, 0x27, 0x00, 0x00, 0x0a, 0xd0, 0x00, 0x9f, 0xe5, 0x00, 0x10, 0xa0, 0xe3,
+    0x00, 0x10, 0x80, 0xe5, 0xbc, 0x00, 0x9f, 0xe5, 0x00, 0x10, 0x90, 0xe5, 0x02, 0x18, 0x81, 0xe3,
+    0x7f, 0x10, 0xc1, 0xe3, 0x00, 0x10, 0x80, 0xe5, 0xb4, 0x00, 0x9f, 0xe5, 0x00, 0x10, 0xa0, 0xe3,
+    0x24, 0x10, 0x80, 0xe5, 0x3c, 0x10, 0xa0, 0xe3, 0x1c, 0x10, 0x80, 0xe5, 0x00, 0x10, 0xa0, 0xe3,
+    0x20, 0x10, 0x80, 0xe5, 0x8c, 0x10, 0xa0, 0xe3, 0x04, 0x10, 0x80, 0xe5, 0x51, 0x20, 0xa0, 0xe3,
+    0x0c, 0x20, 0x80, 0xe5, 0x30, 0x10, 0x90, 0xe5, 0x01, 0x00, 0x11, 0xe3, 0xfc, 0xff, 0xff, 0x1a,
+    0x02, 0x17, 0xa0, 0xe3, 0x01, 0x10, 0x51, 0xe2, 0xfd, 0xff, 0xff, 0x1a, 0x25, 0x10, 0xa0, 0xe3,
+    0x44, 0x10, 0x80, 0xe5, 0x02, 0x20, 0x82, 0xe3, 0x0c, 0x20, 0x80, 0xe5, 0x01, 0x10, 0xa0, 0xe3,
+    0x10, 0x10, 0x80, 0xe5, 0x10, 0x10, 0x90, 0xe5, 0x00, 0x00, 0x51, 0xe3, 0xfc, 0xff, 0xff, 0x1a,
+    0x00, 0x10, 0x90, 0xe5, 0x08, 0x00, 0x11, 0xe3, 0x02, 0x00, 0x00, 0x1a, 0x40, 0x01, 0x1f, 0xe5,
+    0x40, 0x11, 0x1f, 0xe5, 0x01, 0x00, 0x00, 0xea, 0x54, 0x01, 0x1f, 0xe5, 0x54, 0x11, 0x1f, 0xe5,
+    0x4c, 0x31, 0x1f, 0xe5, 0x02, 0x50, 0x83, 0xe2, 0x01, 0x40, 0x43, 0xe0, 0x01, 0x20, 0x50, 0xe4,
+    0x01, 0x20, 0x43, 0xe4, 0x04, 0x00, 0x53, 0xe1, 0xfb, 0xff, 0xff, 0x1a, 0x01, 0x00, 0x83, 0xe2,
+    0x00, 0x20, 0xa0, 0xe3, 0x15, 0xff, 0x2f, 0xe1, 0x14, 0x00, 0x0f, 0xc8, 0x00, 0x00, 0x0b, 0xc8,
+    0x10, 0x00, 0x0f, 0xc8, 0x00, 0x00, 0x07, 0xc8
 };
 unsigned char dualboot_clipplus[340] = {
     0x06, 0x00, 0x00, 0xea, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
diff --git a/rbutil/mkamsboot/dualboot.h b/rbutil/mkamsboot/dualboot.h
index 76d4641..9e199d2 100644
--- a/rbutil/mkamsboot/dualboot.h
+++ b/rbutil/mkamsboot/dualboot.h
@@ -6,6 +6,6 @@ extern unsigned char dualboot_e200v2[204];
 extern unsigned char dualboot_c200v2[400];
 extern unsigned char dualboot_m200v4[180];
 extern unsigned char dualboot_fuze[204];
-extern unsigned char dualboot_clipv2[248];
+extern unsigned char dualboot_clipv2[408];
 extern unsigned char dualboot_clipplus[340];
 extern unsigned char dualboot_fuzev2[332];
diff --git a/rbutil/mkamsboot/dualboot/dualboot.S b/rbutil/mkamsboot/dualboot/dualboot.S
index 77fb4de..bc5f5f9 100644
--- a/rbutil/mkamsboot/dualboot/dualboot.S
+++ b/rbutil/mkamsboot/dualboot/dualboot.S
@@ -91,7 +91,7 @@ uclcopy:


 /* TODO : M200V4 ? */
-#if defined(SANSA_CLIP) || defined(SANSA_CLIPV2)
+#if defined(SANSA_CLIP)
 #define USB_PIN 6
 #elif defined(SANSA_FUZE) || defined(SANSA_E200V2)
 #define USB_PIN 3
@@ -182,28 +182,38 @@ uclcopy:
 .set row, (1<<4) /* enable output on D4 */
 .set col, (1<<0) /* read keyscan column D0 */

-        ldr     r0, =GPIOD
-        mov     r1, #((1<<5)|(1<<4)|(1<<3)) /* all rows as output */
+        ldr     r0, =GPIOA
+
+        ldr     r1, [r0, #0x400]
+        bic     r1, r1, #(1<<3)     @ A3 in
+        orr     r1, r1, #(1<<7)     @ A7 out
         str     r1, [r0, #0x400]

-        /* all rows high */
-        mov     r1, #(1<<3)
-        str     r1, [r0, #(4*(1<<3))]
-        mov     r1, #(1<<4)
-        str     r1, [r0, #(4*(1<<4))]
-        mov     r1, #(1<<5)
-        str     r1, [r0, #(4*(1<<5))]
+        mov     r1, #(1<<7)
+        str     r1, [r0, #0x200]    @ A7 = 1

-        mov     r1, #0                      /* button row low */
-        str     r1, [r0, #(4*row)]
+        mov     r1, #0
+1:      nop
+        add     r1, r1, #1
+        cmp     r1, #50
+        blt     1b

-        mov     r1, #5                      /* small delay */
-1:      subs    r1, r1, #1
-        bne     1b
+        ldr     r2, [r0, #0x20]     @ read A3

-        ldr     r1, [r0, #(4*col)]
+        mov     r1, #0x7f
+        str     r1, [r0, #0x200]    @ A7 = 0

-        cmp     r1, #0
+        mov     r1, #0
+1:      nop
+        add     r1, r1, #1
+        cmp     r1, #10
+        blt     1b
+
+        ldr     r1, [r0, #0x400]
+        bic     r1, r1, #(1<<7)     @ A7 in
+        str     r1, [r0, #0x400]
+
+        cmp     r2, #0
         beq     boot_of
 #elif defined(SANSA_E200V2) || defined(SANSA_FUZE)
         ldr     r0, =GPIOC
@@ -307,7 +317,7 @@ uclcopy:
         #error No target-specific key check defined!
 #endif

-#if defined(SANSA_CLIPPLUS) || defined(SANSA_FUZEV2)
+#if defined(SANSA_CLIPPLUS) || defined(SANSA_FUZEV2) || defined(SANSA_CLIPV2)
         /* Check for USB after buttons because I trust more the GPIO code than
          * the i2c code.
          * Also it seems we need to wait a bit before detecting USB connection
[fun@kru /media/bordel/rockbox/rbuti