diff -u -r rockbox-devel.orig/apps/gui/gwps-common.c rockbox-devel/apps/gui/gwps-common.c
--- rockbox-devel.orig/apps/gui/gwps-common.c	2006-08-06 21:28:44.000000000 +0300
+++ rockbox-devel/apps/gui/gwps-common.c	2006-08-06 21:24:41.000000000 +0300
@@ -1294,6 +1294,42 @@
             case 0:
                 *buf++ = '%';
                 break;
+            case 'e': /* Line settings (x/y/width and font face */
+        	fmt++;
+        	if (*fmt == '|') {
+        	    char *p=strchr(fmt, '|');
+        	    if (p) {
+        		fmt = ++p;
+        		gwps->data->line_xpos = atoi(p);
+        		p = strchr(p, '|');
+        		if (p) {
+        		    fmt = ++p;
+        		    gwps->data->line_ypos = atoi(p);
+        		    p = strchr(p, '|');
+        		    if (p) {
+        			fmt = ++p;
+        			gwps->data->line_width = atoi(p);
+        			p = strchr(p, '|');
+        			if (p) {
+        			    fmt = ++p;
+        			    gwps->data->line_font = atoi(p);
+        			    p = strchr(p, '|');
+        			    if (p) {
+        				fmt = ++p;
+        				char fg_color[7];
+        				snprintf(fg_color, 7, "%s", p);
+        				gwps->data->line_fgcolor = hex_to_rgb(fg_color);
+        				p = strchr(p, '|');
+        				if (p) {
+        				    fmt = ++p;
+        				}
+        			    }
+        			}
+        		    }
+        		}
+        	    }
+        	}
+        	break;
             case 'a':
                 ++fmt;
                 /* remember where the current aligned text started */
@@ -1829,6 +1865,46 @@
             }
 #endif
 #ifdef HAVE_LCD_BITMAP
+	    /* If need to refresh a line and we have a custom font we
+	       should set the font face prior getting the font size */
+            if (flags & (WPS_REFRESH_DYNAMIC | WPS_REFRESH_STATIC))
+            {
+        	if (((refresh_mode & (WPS_REFRESH_DYNAMIC|WPS_REFRESH_STATIC)) ||
+        	    new_subline_refresh) && 
+        	    ((int)data->line_xpos || (int)data->line_ypos ||
+        	     (int)data->line_width || (int)data->line_font))
+        	{
+        	    if (data->line_font_prev != data->line_font) {
+        		switch (data->line_font) 
+        		{
+        		    case 1:
+        			display->setfont(FONT_USER1);
+        			break;
+        		    case 2:
+        			display->setfont(FONT_USER2);
+        			break;
+        		    case 3:
+        			display->setfont(FONT_USER3);
+        			break;
+        		    case 4:
+        			display->setfont(FONT_USER4);
+        			break;
+        		    case 5:
+        			display->setfont(FONT_USER5);
+        			break;
+        		    case 6:
+        			display->setfont(FONT_USER6);
+        			break;
+        		    case 7:
+        			display->setfont(FONT_USER7);
+        			break;
+        		}
+        		
+        		data->line_font_prev = data->line_font;
+        	    }
+        	}
+    	    }
+        	    
             /* calculate different string sizes and positions */
             display->getstringsize((unsigned char *)" ", &space_width, &string_height);
             if (data->format_align[i][data->curr_subline[i]].left != 0) {
@@ -2014,8 +2091,57 @@
 #endif
                 }
             }
+            /* Custom lines with x/y/width coordinates and font face/color */
             else if (flags & (WPS_REFRESH_DYNAMIC | WPS_REFRESH_STATIC))
             {
+        	if (((refresh_mode & (WPS_REFRESH_DYNAMIC|WPS_REFRESH_STATIC)) ||
+        	    new_subline_refresh) && 
+        	    ((int)data->line_xpos || (int)data->line_ypos ||
+        	     (int)data->line_width || (int)data->line_font))
+        	{
+        	    update_line = true;
+        	    
+        	    /* Clear the area first */
+        	    display->set_drawmode(DRMODE_SOLID|DRMODE_INVERSEVID);
+        	    display->fillrect((int)data->line_xpos,
+        			      (int)data->line_ypos,
+        			      (int)data->line_width,
+        			      string_height);
+        	    display->set_drawmode(DRMODE_SOLID);
+        	    
+        	    if (data->line_fgcolor_prev != data->line_fgcolor) {
+	        		display->set_foreground(data->line_fgcolor);
+    	    		data->line_fgcolor_prev = data->line_fgcolor;
+        	    }
+        	    
+        	    display->setmargins(data->line_xpos, data->line_ypos);
+        	    display->set_custom_width(data->line_width);
+        	    
+        	    /* Print aligned strings */
+        	    if (left_width != 0) 
+        	    {
+        			display->putsxy((int)data->line_xpos,
+        				(int)data->line_ypos,
+        				(unsigned char *)data->format_align[i]
+        				[data->curr_subline[i]].left);
+        	    }
+        	    if (center_width != 0) 
+        	    {
+        			display->putsxy((int)data->line_xpos+
+        					(int)((data->line_width-center_width)/2),
+        				(int)data->line_ypos,
+        				(unsigned char *)data->format_align[i]
+        				[data->curr_subline[i]].center);
+        	    }
+        	    if (right_width != 0) 
+        	    {
+        			display->putsxy((int)data->line_xpos+
+        				    ((int)data->line_width-right_width),
+        				(int)data->line_ypos,
+        				(unsigned char *)data->format_align[i]
+        				[data->curr_subline[i]].right);
+        	    }
+        	} else
                 /* dynamic / static line */
                 if ((refresh_mode & (WPS_REFRESH_DYNAMIC|WPS_REFRESH_STATIC)) ||
                     new_subline_refresh)
@@ -2073,6 +2198,10 @@
     /* Now we know wether the peak meter is used.
        So we can enable / disable the peak meter thread */
     data->peak_meter_enabled = enable_pm;
+    /* Reset display color */
+    data->line_fgcolor_prev = 0;
+    data->line_fgcolor = global_settings.fg_color;
+	display->set_foreground(global_settings.fg_color);
 #endif
 
 #ifdef CONFIG_BACKLIGHT
diff -u -r rockbox-devel.orig/apps/gui/gwps.h rockbox-devel/apps/gui/gwps.h
--- rockbox-devel.orig/apps/gui/gwps.h	2006-08-03 23:17:14.000000000 +0300
+++ rockbox-devel/apps/gui/gwps.h	2006-08-06 11:57:51.000000000 +0300
@@ -390,6 +390,9 @@
     int progress_end;
     bool wps_loaded;
     bool peak_meter_enabled;
+    int line_xpos, line_ypos, line_width;
+    int line_font, line_font_prev;
+    int line_fgcolor, line_fgcolor_prev;
 };
 
 /* initial setup of wps_data */
