Index: firmware/font.c
===================================================================
--- firmware/font.c	(revision 27631)
+++ firmware/font.c	(working copy)
@@ -28,6 +28,7 @@
 
 #include <stdio.h>
 #include <string.h>
+#include <stdlib.h>
 #include "inttypes.h"
 #include "lcd.h"
 #include "font.h"
@@ -624,27 +625,40 @@
     return;
 }
 
+static int ushortcmp(const void *a, const void *b)
+{
+    return ((int)(*(unsigned short*)a - *(unsigned short*)b));
+}
+
+
 static void glyph_cache_load(struct font* pf)
 {
     if (pf->fd >= 0) {
         int fd;
+        int i, size = 0;
         unsigned char tmp[2];
         unsigned short ch;
+        unsigned short glyphs[256];
 
         fd = open(GLYPH_CACHE_FILE, O_RDONLY|O_BINARY);
 
         if (fd >= 0) {
 
-            while (read(fd, tmp, 2) == 2) {
-                ch = (tmp[0] << 8) | tmp[1];
-                font_get_bits(pf, ch);
+            while ( read(fd, tmp, 2) == 2 && size < 256 ) {
+                glyphs[size] = (tmp[0] << 8) | tmp[1];
+                size++;
             }
+            
+            close(fd);
+            /* sort glyphs arrary to make sector cache happy */
+            qsort((void *)glyphs, size, sizeof(unsigned short), ushortcmp );
 
-            close(fd);
+            for ( i = 0; i < size ; i++) 
+                font_get_bits(pf, glyphs[i]);
+            
         } else {
             /* load latin1 chars into cache */
-            ch = 256;
-            while (ch-- > 32)
+            for ( ch = 33 ; ch < 256 ; ch++ );
                 font_get_bits(pf, ch);
         }
     }
