Index: firmware/target/arm/iriver/h10/button-h10.c
===================================================================
--- firmware/target/arm/iriver/h10/button-h10.c	(revision 12414)
+++ firmware/target/arm/iriver/h10/button-h10.c	(working copy)
@@ -61,6 +61,7 @@
 int button_read_device(void)
 {
     int btn = BUTTON_NONE;
+    static int lastbtn = BUTTON_NONE;
     int data;
     unsigned char state;
     static bool hold_button = false;
@@ -101,12 +102,23 @@
             udelay(50);
             data = adc_scan(ADC_SCROLLPAD);
             GPIOD_OUTPUT_VAL |= 0x40;
-            
-            if(data < 0x210)
-            {
-                btn |= BUTTON_SCROLL_DOWN;
+
+            /* if we were scrolling... */
+            if(lastbtn & (BUTTON_SCROLL_UP | BUTTON_SCROLL_DOWN)){
+                /*scroll if within extended bounds*/
+                if(data < 0x250){
+                    btn |= BUTTON_SCROLL_DOWN & lastbtn;
+                }
+                if(data > 0x150){
+                    btn |= BUTTON_SCROLL_UP & lastbtn;
+                }
             } else {
-                btn |= BUTTON_SCROLL_UP;
+                /*scroll if within the restricted bounds*/
+                if(data < 0x150){
+                    btn |= BUTTON_SCROLL_DOWN;
+                } else if(data > 0x250) {
+                    btn |= BUTTON_SCROLL_UP;
+                }
             }
         }
     }
@@ -142,6 +154,7 @@
     /* remote play button should be dead if hold */
     if (!remote_hold_button && !(GPIOA_INPUT_VAL & 0x1))
         btn |= BUTTON_RC_PLAY;
-    
+
+    lastbtn = btn;
     return btn;
 }
