diff -u -r rockbox-devel.orig/apps/filetree.c rockbox-devel/apps/filetree.c
--- rockbox-devel.orig/apps/filetree.c	2006-08-12 20:57:54.000000000 +0300
+++ rockbox-devel/apps/filetree.c	2006-08-12 20:57:48.000000000 +0300
@@ -529,6 +529,28 @@
                 set_file(buf, (char *)global_settings.recordfont, MAX_FILENAME);
 #endif
                 
+                /* Custom user fonts to use in the wps */
+                font_load(buf, FONT_USER1);
+                set_file(buf, (char *)global_settings.userfont1, MAX_FILENAME);
+                
+                font_load(buf, FONT_USER2);
+                set_file(buf, (char *)global_settings.userfont2, MAX_FILENAME);
+                
+                font_load(buf, FONT_USER3);
+                set_file(buf, (char *)global_settings.userfont3, MAX_FILENAME);
+                
+                font_load(buf, FONT_USER4);
+                set_file(buf, (char *)global_settings.userfont4, MAX_FILENAME);
+                
+                font_load(buf, FONT_USER5);
+                set_file(buf, (char *)global_settings.userfont5, MAX_FILENAME);
+                
+                font_load(buf, FONT_USER6);
+                set_file(buf, (char *)global_settings.userfont6, MAX_FILENAME);
+                
+                font_load(buf, FONT_USER7);
+                set_file(buf, (char *)global_settings.userfont7, MAX_FILENAME);
+                
                 break;
 
             case TREE_ATTR_KBD:
diff -u -r rockbox-devel.orig/apps/settings.c rockbox-devel/apps/settings.c
--- rockbox-devel.orig/apps/settings.c	2006-08-12 20:57:55.000000000 +0300
+++ rockbox-devel/apps/settings.c	2006-08-12 20:57:48.000000000 +0300
@@ -920,6 +920,28 @@
             MAX_FILENAME);
     i+= MAX_FILENAME;
 #endif
+    /* Custom user fonts to use in wps */
+    strncpy((char *)&config_block[i], (char *)global_settings.userfont1,
+            MAX_FILENAME);
+    i+= MAX_FILENAME;
+    strncpy((char *)&config_block[i], (char *)global_settings.userfont2,
+            MAX_FILENAME);
+    i+= MAX_FILENAME;
+    strncpy((char *)&config_block[i], (char *)global_settings.userfont3,
+            MAX_FILENAME);
+    i+= MAX_FILENAME;
+    strncpy((char *)&config_block[i], (char *)global_settings.userfont4,
+            MAX_FILENAME);
+    i+= MAX_FILENAME;
+    strncpy((char *)&config_block[i], (char *)global_settings.userfont5,
+            MAX_FILENAME);
+    i+= MAX_FILENAME;
+    strncpy((char *)&config_block[i], (char *)global_settings.userfont6,
+            MAX_FILENAME);
+    i+= MAX_FILENAME;
+    strncpy((char *)&config_block[i], (char *)global_settings.userfont7,
+            MAX_FILENAME);
+    i+= MAX_FILENAME;
 #ifdef HAVE_REMOTE_LCD
     strncpy((char *)&config_block[i], (char *)global_settings.rwps_file,
             MAX_FILENAME);
@@ -1184,6 +1206,70 @@
         font_reset(FONT_RECORD);
 #endif /* HAVE_RECORDING */
 
+    /* Load custom user fonts to use in wps */
+    if ( global_settings.userfont1[0] &&
+         global_settings.userfont1[0] != 0xff ) {
+        snprintf(buf, sizeof buf, ROCKBOX_DIR FONT_DIR "/%s.fnt",
+                 global_settings.userfont1);
+        font_load(buf, FONT_USER1);
+    }
+    else
+        font_reset(FONT_USER1);
+        
+    if ( global_settings.userfont2[0] &&
+         global_settings.userfont2[0] != 0xff ) {
+        snprintf(buf, sizeof buf, ROCKBOX_DIR FONT_DIR "/%s.fnt",
+                 global_settings.userfont2);
+        font_load(buf, FONT_USER2);
+    }
+    else
+        font_reset(FONT_USER2);
+        
+    if ( global_settings.userfont3[0] &&
+         global_settings.userfont3[0] != 0xff ) {
+        snprintf(buf, sizeof buf, ROCKBOX_DIR FONT_DIR "/%s.fnt",
+                 global_settings.userfont3);
+        font_load(buf, FONT_USER3);
+    }
+    else
+        font_reset(FONT_USER3);
+        
+    if ( global_settings.userfont4[0] &&
+         global_settings.userfont4[0] != 0xff ) {
+        snprintf(buf, sizeof buf, ROCKBOX_DIR FONT_DIR "/%s.fnt",
+                 global_settings.userfont4);
+        font_load(buf, FONT_USER4);
+    }
+    else
+        font_reset(FONT_USER4);
+        
+    if ( global_settings.userfont5[0] &&
+         global_settings.userfont5[0] != 0xff ) {
+        snprintf(buf, sizeof buf, ROCKBOX_DIR FONT_DIR "/%s.fnt",
+                 global_settings.userfont5);
+        font_load(buf, FONT_USER5);
+    }
+    else
+        font_reset(FONT_USER5);
+        
+    if ( global_settings.userfont6[0] &&
+         global_settings.userfont6[0] != 0xff ) {
+        snprintf(buf, sizeof buf, ROCKBOX_DIR FONT_DIR "/%s.fnt",
+                 global_settings.userfont6);
+        font_load(buf, FONT_USER6);
+    }
+    else
+        font_reset(FONT_USER6);
+        
+    if ( global_settings.userfont7[0] &&
+         global_settings.userfont7[0] != 0xff ) {
+        snprintf(buf, sizeof buf, ROCKBOX_DIR FONT_DIR "/%s.fnt",
+                 global_settings.userfont7);
+        font_load(buf, FONT_USER7);
+    }
+    else
+        font_reset(FONT_USER7);
+        
     if ( global_settings.kbd_file[0] &&
          global_settings.kbd_file[0] != 0xff ) {
         snprintf(buf, sizeof buf, ROCKBOX_DIR "/%s.kbd",
@@ -1351,6 +1437,35 @@
                 MAX_FILENAME);
         i+= MAX_FILENAME;
 #endif
+	/* User custom fonts for use in wps */
+        strncpy((char *)global_settings.userfont1, (char *)&config_block[i],
+                MAX_FILENAME);
+        i+= MAX_FILENAME;
+        
+        strncpy((char *)global_settings.userfont2, (char *)&config_block[i],
+                MAX_FILENAME);
+        i+= MAX_FILENAME;
+        
+        strncpy((char *)global_settings.userfont3, (char *)&config_block[i],
+                MAX_FILENAME);
+        i+= MAX_FILENAME;
+        
+        strncpy((char *)global_settings.userfont4, (char *)&config_block[i],
+                MAX_FILENAME);
+        i+= MAX_FILENAME;
+        
+        strncpy((char *)global_settings.userfont5, (char *)&config_block[i],
+                MAX_FILENAME);
+        i+= MAX_FILENAME;
+        
+        strncpy((char *)global_settings.userfont6, (char *)&config_block[i],
+                MAX_FILENAME);
+        i+= MAX_FILENAME;
+        
+        strncpy((char *)global_settings.userfont7, (char *)&config_block[i],
+                MAX_FILENAME);
+        i+= MAX_FILENAME;
+        
 #ifdef HAVE_REMOTE_LCD
         strncpy((char *)global_settings.rwps_file, (char *)&config_block[i],
                 MAX_FILENAME);
@@ -1571,6 +1686,35 @@
                 set_file(value, (char *)global_settings.recordfont, MAX_FILENAME);
         }
 #endif /* HAVE_RECORDING */
+	/* User custom fonts for use in wps */
+        else if (!strcasecmp(name, "userfont1")) {
+            if (font_load(value, FONT_USER1))
+                set_file(value, (char *)global_settings.userfont1, MAX_FILENAME);
+        }
+        else if (!strcasecmp(name, "userfont2")) {
+            if (font_load(value, FONT_USER2))
+                set_file(value, (char *)global_settings.userfont2, MAX_FILENAME);
+        }
+        else if (!strcasecmp(name, "userfont3")) {
+            if (font_load(value, FONT_USER3))
+                set_file(value, (char *)global_settings.userfont3, MAX_FILENAME);
+        }
+        else if (!strcasecmp(name, "userfont4")) {
+            if (font_load(value, FONT_USER4))
+                set_file(value, (char *)global_settings.userfont4, MAX_FILENAME);
+        }
+        else if (!strcasecmp(name, "userfont5")) {
+            if (font_load(value, FONT_USER5))
+                set_file(value, (char *)global_settings.userfont5, MAX_FILENAME);
+        }
+        else if (!strcasecmp(name, "userfont6")) {
+            if (font_load(value, FONT_USER6))
+                set_file(value, (char *)global_settings.userfont6, MAX_FILENAME);
+        }
+        else if (!strcasecmp(name, "userfont7")) {
+            if (font_load(value, FONT_USER7))
+                set_file(value, (char *)global_settings.userfont7, MAX_FILENAME);
+        }
 #endif /* HAVE_LCD_BITMAP */
 #ifdef HAVE_LCD_COLOR
         else if (!strcasecmp(name, "backdrop")) {
@@ -1752,6 +1896,27 @@
         fdprintf(fd, "recordfont: %s/%s.fnt\r\n", ROCKBOX_DIR FONT_DIR,
                  global_settings.recordfont);
 #endif /* HAVE_RECORDING */
+    if (global_settings.userfont1[0] != 0)
+        fdprintf(fd, "userfont1: %s/%s.fnt\r\n", ROCKBOX_DIR FONT_DIR,
+                 global_settings.userfont1);
+    if (global_settings.userfont2[0] != 0)
+        fdprintf(fd, "userfont2: %s/%s.fnt\r\n", ROCKBOX_DIR FONT_DIR,
+                 global_settings.userfont2);
+    if (global_settings.userfont3[0] != 0)
+        fdprintf(fd, "userfont3: %s/%s.fnt\r\n", ROCKBOX_DIR FONT_DIR,
+                 global_settings.userfont3);
+    if (global_settings.userfont4[0] != 0)
+        fdprintf(fd, "userfont4: %s/%s.fnt\r\n", ROCKBOX_DIR FONT_DIR,
+                 global_settings.userfont4);
+    if (global_settings.userfont5[0] != 0)
+        fdprintf(fd, "userfont5: %s/%s.fnt\r\n", ROCKBOX_DIR FONT_DIR,
+                 global_settings.userfont5);
+    if (global_settings.userfont6[0] != 0)
+        fdprintf(fd, "userfont6: %s/%s.fnt\r\n", ROCKBOX_DIR FONT_DIR,
+                 global_settings.userfont6);
+    if (global_settings.userfont7[0] != 0)
+        fdprintf(fd, "userfont7: %s/%s.fnt\r\n", ROCKBOX_DIR FONT_DIR,
+                 global_settings.userfont7);
 #endif /* HAVE_LCD_BITMAP */
 
 #ifdef HAVE_LCD_COLOR
@@ -1864,6 +2029,13 @@
 #ifdef HAVE_RECORDING
     global_settings.recordfont[0] = '\0';
 #endif
+    global_settings.userfont1[0] = '\0';
+    global_settings.userfont2[0] = '\0';
+    global_settings.userfont3[0] = '\0';
+    global_settings.userfont4[0] = '\0';
+    global_settings.userfont5[0] = '\0';
+    global_settings.userfont6[0] = '\0';
+    global_settings.userfont7[0] = '\0';
     global_settings.lang_file[0] = '\0';
 #ifdef HAVE_LCD_COLOR
     global_settings.backdrop_file[0] = '\0';
diff -u -r rockbox-devel.orig/apps/settings.h rockbox-devel/apps/settings.h
--- rockbox-devel.orig/apps/settings.h	2006-08-12 20:57:55.000000000 +0300
+++ rockbox-devel/apps/settings.h	2006-08-12 20:57:48.000000000 +0300
@@ -332,6 +332,13 @@
 #ifdef HAVE_RECORDING
     unsigned char recordfont[MAX_FILENAME+1];
 #endif
+    unsigned char userfont1[MAX_FILENAME+1];
+    unsigned char userfont2[MAX_FILENAME+1];
+    unsigned char userfont3[MAX_FILENAME+1];
+    unsigned char userfont4[MAX_FILENAME+1];
+    unsigned char userfont5[MAX_FILENAME+1];
+    unsigned char userfont6[MAX_FILENAME+1];
+    unsigned char userfont7[MAX_FILENAME+1];
 
 #ifdef CONFIG_TUNER
     unsigned char fmr_file[MAX_FILENAME+1]; /* last fmr preset */
Only in rockbox-devel: build
diff -u -r rockbox-devel.orig/firmware/export/font.h rockbox-devel/firmware/export/font.h
--- rockbox-devel.orig/firmware/export/font.h	2006-08-12 20:57:55.000000000 +0300
+++ rockbox-devel/firmware/export/font.h	2006-08-12 20:58:12.000000000 +0300
@@ -30,7 +30,7 @@
 /* fonts > 45kb in size go through the font/glyph cache code */
 #ifndef MAX_FONT_SIZE
 #if LCD_HEIGHT > 64
-#define MAX_FONT_SIZE   45000
+#define MAX_FONT_SIZE   55000
 #else
 #define MAX_FONT_SIZE   4000
 #endif
@@ -50,6 +50,13 @@
 #ifdef HAVE_RECORDING
 #define GLYPH_CACHE_FILE_RECORD "/.rockbox/.glyphcache-record"
 #endif
+#define GLYPH_CACHE_FILE_USER1 "/.rockbox/.glyphcache-user1"
+#define GLYPH_CACHE_FILE_USER2 "/.rockbox/.glyphcache-user2"
+#define GLYPH_CACHE_FILE_USER3 "/.rockbox/.glyphcache-user3"
+#define GLYPH_CACHE_FILE_USER4 "/.rockbox/.glyphcache-user4"
+#define GLYPH_CACHE_FILE_USER5 "/.rockbox/.glyphcache-user5"
+#define GLYPH_CACHE_FILE_USER6 "/.rockbox/.glyphcache-user6"
+#define GLYPH_CACHE_FILE_USER7 "/.rockbox/.glyphcache-user7"
 
 /*
  * Fonts are specified by number, and used for display
@@ -72,6 +79,13 @@
 #ifdef HAVE_RECORDING
     FONT_RECORD,   /* Recording font */
 #endif
+    FONT_USER1,    /* User custom fonts for use in wps */
+    FONT_USER2,    /* User custom fonts for use in wps */
+    FONT_USER3,    /* User custom fonts for use in wps */
+    FONT_USER4,    /* User custom fonts for use in wps */
+    FONT_USER5,    /* User custom fonts for use in wps */
+    FONT_USER6,    /* User custom fonts for use in wps */
+    FONT_USER7,    /* User custom fonts for use in wps */
     MAXFONTS
 };
 
diff -u -r rockbox-devel.orig/firmware/font.c rockbox-devel/firmware/font.c
--- rockbox-devel.orig/firmware/font.c	2006-08-12 20:57:55.000000000 +0300
+++ rockbox-devel/firmware/font.c	2006-08-12 20:57:48.000000000 +0300
@@ -55,6 +55,13 @@
 #ifdef HAVE_RECORDING
 static struct font recordfont;
 #endif
+static struct font userfont1;
+static struct font userfont2;
+static struct font userfont3;
+static struct font userfont4;
+static struct font userfont5;
+static struct font userfont6;
+static struct font userfont7;
 
 /* system font table, in order of FONT_xxx definition */
 static struct font* sysfonts[MAXFONTS] = {
@@ -66,8 +73,15 @@
     &tunerfont,
 #endif
 #ifdef HAVE_RECORDING
-    &recordfont
+    &recordfont,
 #endif
+    &userfont1,
+    &userfont2,
+    &userfont3,
+    &userfont4,
+    &userfont5,
+    &userfont6,
+    &userfont7
  };
 
 /* static buffer allocation structures */
@@ -586,6 +600,27 @@
 		fntfile[font].glyph_fd = creat(GLYPH_CACHE_FILE_RECORD, 0);
 		break;
 #endif
+	    case 5:
+		fntfile[font].glyph_fd = creat(GLYPH_CACHE_FILE_USER1, 0);
+		break;
+	    case 6:
+		fntfile[font].glyph_fd = creat(GLYPH_CACHE_FILE_USER2, 0);
+		break;
+	    case 7:
+		fntfile[font].glyph_fd = creat(GLYPH_CACHE_FILE_USER3, 0);
+		break;
+	    case 8:
+		fntfile[font].glyph_fd = creat(GLYPH_CACHE_FILE_USER4, 0);
+		break;
+	    case 9:
+		fntfile[font].glyph_fd = creat(GLYPH_CACHE_FILE_USER5, 0);
+		break;
+	    case 10:
+		fntfile[font].glyph_fd = creat(GLYPH_CACHE_FILE_USER6, 0);
+		break;
+	    case 11:
+		fntfile[font].glyph_fd = creat(GLYPH_CACHE_FILE_USER7, 0);
+		break;
 	    default:
 		return;
 	}
@@ -630,6 +665,27 @@
 		fd = open(GLYPH_CACHE_FILE_RECORD, O_RDONLY|O_BINARY);
 		break;
 #endif
+	    case 5:
+		fd = open(GLYPH_CACHE_FILE_USER1, O_RDONLY|O_BINARY);
+		break;
+	    case 6:
+		fd = open(GLYPH_CACHE_FILE_USER2, O_RDONLY|O_BINARY);
+		break;
+	    case 7:
+		fd = open(GLYPH_CACHE_FILE_USER3, O_RDONLY|O_BINARY);
+		break;
+	    case 8:
+		fd = open(GLYPH_CACHE_FILE_USER4, O_RDONLY|O_BINARY);
+		break;
+	    case 9:
+		fd = open(GLYPH_CACHE_FILE_USER5, O_RDONLY|O_BINARY);
+		break;
+	    case 10:
+		fd = open(GLYPH_CACHE_FILE_USER6, O_RDONLY|O_BINARY);
+		break;
+	    case 11:
+		fd = open(GLYPH_CACHE_FILE_USER7, O_RDONLY|O_BINARY);
+		break;
 	    default:
 		return;
 	}
