Index: rockbox_svn/firmware/drivers/lcd-16bit.c
===================================================================
--- rockbox_svn.orig/firmware/drivers/lcd-16bit.c
+++ rockbox_svn/firmware/drivers/lcd-16bit.c
@@ -944,6 +944,7 @@ void lcd_puts_scroll_style_offset(int x,
         s->startx = xmargin + x * s->width / s->len;
         s->backward = false;
         scrolling_lines |= (1<<y);
+        s->y_margin=ymargin;
     }
     else
         /* force a bit switch-off since it doesn't scroll */
@@ -984,7 +985,7 @@ static void scroll_thread(void)
 
             pf = font_get(curfont);
             xpos = s->startx;
-            ypos = ymargin + index * pf->height;
+            ypos = s->y_margin + index * pf->height;
 
             if (s->bidir) { /* scroll bidirectional */
                 if (s->offset <= 0) {
Index: rockbox_svn/firmware/export/lcd.h
===================================================================
--- rockbox_svn.orig/firmware/export/lcd.h
+++ rockbox_svn/firmware/export/lcd.h
@@ -393,6 +393,7 @@ struct scrollinfo {
     bool bidir;
     bool invert; /* invert the scrolled text */
     long start_tick;
+    int y_margin;
 };
 #else /* !HAVE_LCD_BITMAP */
 
Index: rockbox_svn/firmware/drivers/lcd-1bit-vert.c
===================================================================
--- rockbox_svn.orig/firmware/drivers/lcd-1bit-vert.c
+++ rockbox_svn/firmware/drivers/lcd-1bit-vert.c
@@ -789,6 +789,7 @@ void lcd_puts_scroll_style_offset(int x,
         s->startx = xmargin + x * s->width / s->len;;
         s->backward = false;
         scrolling_lines |= (1<<y);
+        s->y_margin=ymargin;
     }
     else
         /* force a bit switch-off since it doesn't scroll */
@@ -825,7 +826,7 @@ static void scroll_thread(void)
 
             pf = font_get(curfont);
             xpos = s->startx;
-            ypos = ymargin + index * pf->height;
+            ypos = s->y_margin + index * pf->height;
 
             if (s->bidir) { /* scroll bidirectional */
                 if (s->offset <= 0) {
Index: rockbox_svn/firmware/drivers/lcd-2bit-horz.c
===================================================================
--- rockbox_svn.orig/firmware/drivers/lcd-2bit-horz.c
+++ rockbox_svn/firmware/drivers/lcd-2bit-horz.c
@@ -985,6 +985,7 @@ void lcd_puts_scroll_style_offset(int x,
         s->startx = xmargin + x * s->width / s->len;;
         s->backward = false;
         scrolling_lines |= (1<<y);
+        s->y_margin=ymargin;
     }
     else
         /* force a bit switch-off since it doesn't scroll */
@@ -1021,7 +1022,7 @@ static void scroll_thread(void)
 
             pf = font_get(curfont);
             xpos = s->startx;
-            ypos = ymargin + index * pf->height;
+            ypos = s->y_margin + index * pf->height;
 
             if (s->bidir) { /* scroll bidirectional */
                 if (s->offset <= 0) {
Index: rockbox_svn/firmware/drivers/lcd-2bit-vert.c
===================================================================
--- rockbox_svn.orig/firmware/drivers/lcd-2bit-vert.c
+++ rockbox_svn/firmware/drivers/lcd-2bit-vert.c
@@ -1121,6 +1121,7 @@ void lcd_puts_scroll_style_offset(int x,
         s->startx = xmargin + x * s->width / s->len;
         s->backward = false;
         scrolling_lines |= (1<<y);
+        s->y_margin=ymargin;
     }
     else
         /* force a bit switch-off since it doesn't scroll */
@@ -1157,7 +1158,7 @@ static void scroll_thread(void)
 
             pf = font_get(curfont);
             xpos = s->startx;
-            ypos = ymargin + index * pf->height;
+            ypos = s->y_margin + index * pf->height;
 
             if (s->bidir) { /* scroll bidirectional */
                 if (s->offset <= 0) {
Index: rockbox_svn/firmware/drivers/lcd-remote-1bit-v.c
===================================================================
--- rockbox_svn.orig/firmware/drivers/lcd-remote-1bit-v.c
+++ rockbox_svn/firmware/drivers/lcd-remote-1bit-v.c
@@ -787,6 +787,7 @@ void lcd_remote_puts_scroll_style_offset
         s->startx = xmargin + x * s->width / s->len;;
         s->backward = false;
         scrolling_lines |= (1<<y);
+        s->y_margin=ymargin;
     }
     else
         /* force a bit switch-off since it doesn't scroll */
@@ -853,7 +854,7 @@ static void scroll_thread(void)
 
             pf = font_get(curfont);
             xpos = s->startx;
-            ypos = ymargin + index * pf->height;
+            ypos = s->y_margin + index * pf->height;
 
             if (s->bidir) { /* scroll bidirectional */
                 if (s->offset <= 0) {
Index: rockbox_svn/firmware/drivers/lcd-remote-2bit-vi.c
===================================================================
--- rockbox_svn.orig/firmware/drivers/lcd-remote-2bit-vi.c
+++ rockbox_svn/firmware/drivers/lcd-remote-2bit-vi.c
@@ -1123,6 +1123,7 @@ void lcd_remote_puts_scroll_style_offset
         s->startx = xmargin + x * s->width / s->len;;
         s->backward = false;
         scrolling_lines |= (1<<y);
+        s->y_margin=ymargin;
     }
     else
         /* force a bit switch-off since it doesn't scroll */
@@ -1190,7 +1191,7 @@ static void scroll_thread(void)
 
             pf = font_get(curfont);
             xpos = s->startx;
-            ypos = ymargin + index * pf->height;
+            ypos = s->y_margin + index * pf->height;
 
             if (s->bidir) { /* scroll bidirectional */
                 if (s->offset <= 0) {
