diff --git a/firmware/export/font.h b/firmware/export/font.h
index 57991a5..649a1d0 100644
--- a/firmware/export/font.h
+++ b/firmware/export/font.h
@@ -19,6 +19,8 @@
 #ifndef _FONT_H
 #define _FONT_H
 
+#include "inttypes.h"
+
 /*
  * Incore font and image definitions
  */
@@ -99,7 +101,7 @@
     const unsigned short *offset;	/* offsets into bitmap data*/
     const unsigned char *width;	/* character widths or NULL if fixed*/
     int		defaultchar;	/* default char (not glyph index)*/
-    long       bits_size;       /* # bytes of glyph bits*/
+    int32_t       bits_size;       /* # bytes of glyph bits*/
 };
 
 /* font routines*/
@@ -111,7 +113,6 @@
 int font_get_width(struct font* ft, unsigned short ch);
 const unsigned char * font_get_bits(struct font* ft, unsigned short ch);
 void glyph_cache_save(void);
-void glyph_cache_load(void);
 
 #else /* HAVE_LCD_BITMAP */
 
diff --git a/firmware/font.c b/firmware/font.c
index 1635441..cf4a16a 100644
--- a/firmware/font.c
+++ b/firmware/font.c
@@ -28,6 +28,7 @@
 
 #include <stdio.h>
 #include <string.h>
+#include "inttypes.h"
 #include "lcd.h"
 #include "font.h"
 #include "file.h"
@@ -60,13 +61,15 @@
 /* Font cache structures */
 static struct font_cache font_cache_ui;
 static int fnt_file = -1;           /* >=0 if font is cached   */
-unsigned long file_width_offset;    /* offset to file width data    */
-unsigned long file_offset_offset;   /* offset to file offset data   */
+uint32_t file_width_offset;    /* offset to file width data    */
+uint32_t file_offset_offset;   /* offset to file offset data   */
 static void cache_create(int maxwidth, int height);
 static int long_offset = 0;
 static int glyph_file;
 /* End Font cache structures */
 
+static void glyph_cache_load(void);
+
 void font_init(void)
 {
     memset(&font_ui, 0, sizeof(struct font));
@@ -89,14 +92,14 @@
     return s;
 }
 
-static long readlong(void)
+static int32_t readlong(void)
 {
-    unsigned long l;
+    uint32_t l;
 
     l = *fileptr++ & 0xff;
     l |= *fileptr++ << 8;
-    l |= ((unsigned long)(*fileptr++)) << 16;
-    l |= ((unsigned long)(*fileptr++)) << 24;
+    l |= ((uint32_t)(*fileptr++)) << 16;
+    l |= ((uint32_t)(*fileptr++)) << 24;
     return l;
 }
 
@@ -143,9 +146,9 @@
     return pf;
 }
 /* Load memory font */
-struct font* font_load_in_memory(struct font* pf)
+static struct font* font_load_in_memory(struct font* pf)
 {
-    long i, noffset, nwidth;
+    int32_t i, noffset, nwidth;
 
     if (!HAVEBYTES(4))
         return NULL;
@@ -163,12 +166,12 @@
     if ( pf->bits_size < 0xFFDB )
     {
         /* pad to 16-bit boundary */
-        fileptr = (unsigned char *)(((long)fileptr + 1) & ~1);
+        fileptr = (unsigned char *)(((int32_t)fileptr + 1) & ~1);
     }
     else
     {
         /* pad to 32-bit boundary*/
-        fileptr = (unsigned char *)(((long)fileptr + 3) & ~3);
+        fileptr = (unsigned char *)(((int32_t)fileptr + 3) & ~3);
     }
 
     if (noffset)
@@ -193,12 +196,12 @@
             pf->offset = (unsigned short *)fileptr;
 
             /* Check we have sufficient buffer */
-            if (!HAVEBYTES(noffset * sizeof(long)))
+            if (!HAVEBYTES(noffset * sizeof(int32_t)))
                 return NULL;
 
             for (i=0; i<noffset; ++i)
             {
-                ((unsigned long*)(pf->offset))[i] = (unsigned long)readlong();
+                ((uint32_t*)(pf->offset))[i] = (uint32_t)readlong();
             }
         }
     }
@@ -219,12 +222,12 @@
 }
 
 /* Load cached font */
-struct font* font_load_cached(struct font* pf)
+static struct font* font_load_cached(struct font* pf)
 {
-    unsigned long noffset, nwidth;
+    uint32_t noffset, nwidth;
     unsigned char* oldfileptr = fileptr;
 
-    if (!HAVEBYTES(2 * sizeof(long)))
+    if (!HAVEBYTES(2 * sizeof(int32_t)))
         return NULL;
 
     /* # longs of offset*/
@@ -243,17 +246,17 @@
     {
         long_offset = 0;
         /* pad to 16-bit boundary */
-        fileptr = (unsigned char *)(((long)fileptr + 1) & ~1);
+        fileptr = (unsigned char *)(((int32_t)fileptr + 1) & ~1);
     }
     else
     {
         long_offset = 1;
         /* pad to 32-bit boundary*/
-        fileptr = (unsigned char *)(((long)fileptr + 3) & ~3);
+        fileptr = (unsigned char *)(((int32_t)fileptr + 3) & ~3);
     }
 
     if (noffset)
-        file_offset_offset = (unsigned long)(fileptr - freeptr);
+        file_offset_offset = (uint32_t)(fileptr - freeptr);
     else
         file_offset_offset = 0;
 
@@ -261,10 +264,10 @@
     if ( pf->bits_size < 0xFFDB )
         fileptr += noffset * sizeof(unsigned short);
     else
-        fileptr += noffset * sizeof(unsigned long);
+        fileptr += noffset * sizeof(uint32_t);
 
     if (nwidth)
-        file_width_offset = (unsigned long)(fileptr - freeptr);
+        file_width_offset = (uint32_t)(fileptr - freeptr);
     else
         file_width_offset = 0;
 
@@ -416,11 +419,11 @@
         p->width = pf->maxwidth;
     }
  
-    long bitmap_offset = 0;
+    int32_t bitmap_offset = 0;
 
     if (file_offset_offset)
     {
-        long offset = file_offset_offset + char_code * (long_offset ? sizeof(long) : sizeof(short));
+        int32_t offset = file_offset_offset + char_code * (long_offset ? sizeof(int32_t) : sizeof(short));
         lseek(fnt_file, offset, SEEK_SET);
         read (fnt_file, tmp, 2);
         bitmap_offset = tmp[0] | (tmp[1] << 8);
@@ -434,7 +437,7 @@
         bitmap_offset = ((pf->height + 7) / 8) * p->width * char_code;
     }
 
-    long file_offset = FONT_HEADER_SIZE + bitmap_offset;
+    int32_t file_offset = FONT_HEADER_SIZE + bitmap_offset;
     lseek(fnt_file, file_offset, SEEK_SET);
 
     int src_bytes = p->width * ((pf->height + 7) / 8);
@@ -492,7 +495,7 @@
     return bits;
 }
 
-void glyph_file_write(void* data)
+static void glyph_file_write(void* data)
 {
     struct font_cache_entry* p = data;
     struct font* pf = &font_ui;
@@ -530,7 +533,7 @@
     return;
 }
 
-void glyph_cache_load(void)
+static void glyph_cache_load(void)
 {
     if (fnt_file >= 0) {
 
