diff --git a/flash/bootbox/main.c b/flash/bootbox/main.c
index 7170867..2bd3fea 100644
--- a/flash/bootbox/main.c
+++ b/flash/bootbox/main.c
@@ -44,7 +44,7 @@
 #include "usb.h"
 #include "powermgmt.h"
 
-void usb_screen(void)
+static void usb_screen(void)
 {
     lcd_clear_display();
     lcd_puts(0, 0, "USB mode");
@@ -55,7 +55,7 @@
     }
 }
 
-void show_logo(void)
+static void show_logo(void)
 {
     lcd_clear_display();
     lcd_puts(0, 0, "Rockbox");
@@ -64,13 +64,7 @@
 }
 
 #if CONFIG_CHARGING
-/*
-bool backlight_get_on_when_charging(void)
-{
-    return false;
-}
-*/
-void charging_screen(void)
+static void charging_screen(void)
 {
     unsigned int button;
     const char* msg;
@@ -123,7 +117,7 @@
 #endif /* CONFIG_CHARGING */
 
 /* prompt user to plug USB and fix a problem */
-void prompt_usb(const char* msg1, const char* msg2)
+static void prompt_usb(const char* msg1, const char* msg2)
 {
     int button;
     lcd_clear_display();
diff --git a/flash/bootloader/Makefile b/flash/bootloader/Makefile
index 6872fcb..e7bd17a 100644
--- a/flash/bootloader/Makefile
+++ b/flash/bootloader/Makefile
@@ -35,7 +35,7 @@
 
 OBJDIR := .
 
-CFLAGS = -O -W -Wall -m1 -nostdlib -ffreestanding -Wstrict-prototypes -fomit-frame-pointer -fschedule-insns $(INCLUDES) $(DEFINES)
+CFLAGS = -Os -W -Wall -m1 -nostdlib -ffreestanding -Wstrict-prototypes -fomit-frame-pointer -fschedule-insns $(INCLUDES) $(DEFINES)
 AFLAGS += -small -relax
 
 
diff --git a/flash/bootloader/bootloader.c b/flash/bootloader/bootloader.c
index dc094d1..d1955c2 100644
--- a/flash/bootloader/bootloader.c
+++ b/flash/bootloader/bootloader.c
@@ -27,6 +27,22 @@
 #include "sh7034.h"
 #include "bootloader.h"
 
+// prototypes
+static void PlatformInit(void);
+static int ucl_nrv2e_decompress_8(const UINT8 *src, UINT8 *dst, UINT32* dst_len);
+static void DecompressStart(tImage* pImage);
+#ifdef USE_ADC
+static int ReadADC(int channel);
+#endif
+static int ButtonPressed(void);
+static tImage* GetStartImage(int nPreferred);
+// test functions
+static void SetLed(BOOL bOn);
+static void UartInit(void);
+static UINT8 UartRead(void);
+static void UartWrite(UINT8 byte);
+static void MiniMon(void);
+
 
 #ifdef NO_ROM
 /* start with the vector table */
@@ -71,7 +87,7 @@
 }
 
 
-void BootInit(void)
+static void BootInit(void)
 {
     /* inits from the boot ROM, whether they make sense or not */
     PBDR  &= 0xFFBF; /* LED off (0x131E) */
@@ -117,7 +133,7 @@
 
 
 /* init code that is specific to certain platform */
-void PlatformInit(void)
+static void PlatformInit(void)
 {
 #ifdef NO_ROM
     BootInit(); /* if not started by boot ROM, we need to init what it did */
@@ -177,7 +193,7 @@
 #define GETBIT(bb, src, ilen) \
     (((bb = bb & 0x7f ? bb*2 : ((unsigned)src[ilen++]*2+1)) >> 8) & 1)
 
-int ucl_nrv2e_decompress_8(
+static int ucl_nrv2e_decompress_8(
     const UINT8 *src, UINT8 *dst, UINT32* dst_len)
 {
     UINT32 bb = 0;
@@ -239,7 +255,7 @@
 
 
 /* move the image into place and start it */
-void DecompressStart(tImage* pImage)
+static void DecompressStart(tImage* pImage)
 {
     UINT32* pSrc;
     UINT32* pDest;
@@ -273,7 +289,7 @@
 }
 
 #ifdef USE_ADC
-int ReadADC(int channel)
+static int ReadADC(int channel)
 {
     /* after channel 3, the ports wrap and get re-used */
     volatile UINT16* pResult = (UINT16*)(ADDRAH_ADDR + 2 * (channel & 0x03));
@@ -289,7 +305,7 @@
 
 /* This function is platform-dependent,
  * until I figure out how to distinguish at runtime. */
-int ButtonPressed(void) /* return 1,2,3 for F1,F2,F3, 0 if none pressed */
+static int ButtonPressed(void) /* return 1,2,3 for F1,F2,F3, 0 if none pressed */
 {
 #ifdef USE_ADC
     int value = ReadADC(CHANNEL);
@@ -316,7 +332,7 @@
 
 
 /* Determine the image to be started */
-tImage* GetStartImage(int nPreferred)
+static tImage* GetStartImage(int nPreferred)
 {
     tImage* pImage1;
     tImage* pImage2 = NULL; /* default to not present */
@@ -357,7 +373,7 @@
 
 /* diagnostic functions */
 
-void SetLed(BOOL bOn)
+static void SetLed(BOOL bOn)
 {
     if (bOn)
         PBDR |= 0x0040;
@@ -366,7 +382,7 @@
 }
 
 
-void UartInit(void)
+static void UartInit(void)
 {
     PBIOR &= 0xFBFF; /* input: RXD1 remote pin */
     PBCR1 |= 0x00A0; /* set PB11+PB10 to UART */
@@ -378,7 +394,7 @@
 }
 
 
-UINT8 UartRead(void)
+static UINT8 UartRead(void)
 {
     UINT8 byte;
     while (!(SSR1 & SCI_RDRF)); /* wait for char to be available */
@@ -388,7 +404,7 @@
 }
 
 
-void UartWrite(UINT8 byte)
+static void UartWrite(UINT8 byte)
 {
     while (!(SSR1 & SCI_TDRE)); /* wait for transmit buffer empty */
     TDR1 = byte;
@@ -397,7 +413,7 @@
 
 
 /* include the mini monitor as a rescue feature, started with F3 */
-void MiniMon(void)
+static void MiniMon(void)
 {
     UINT8 cmd;
     UINT32 addr;
diff --git a/flash/bootloader/bootloader.h b/flash/bootloader/bootloader.h
index fc6bcb1..948311f 100644
--- a/flash/bootloader/bootloader.h
+++ b/flash/bootloader/bootloader.h
@@ -76,26 +76,9 @@
 #define FLASH_BASE 0x02000000 // start of the flash memory
 #define FW_VERSION *(unsigned short*)(FLASH_BASE + 0xFE) // firmware version
 
-
 // prototypes
 void _main(void) __attribute__ ((section (".startup")));
 int main(void);
-void PlatformInit(void);
-void DramInit(void);
-int ucl_nrv2e_decompress_8(const UINT8 *src, UINT8 *dst, UINT32* dst_len);
-void DecompressStart(tImage* pImage);
-#ifdef USE_ADC
-int ReadADC(int channel);
-#endif
-int ButtonPressed(void);
-tImage* GetStartImage(int nPreferred);
-// test functions
-void SetLed(BOOL bOn);
-void UartInit(void);
-UINT8 UartRead(void);
-void UartWrite(UINT8 byte);
-void MiniMon(void);
-
 
 // minimon commands
 #define BAUDRATE       0x00 // followed by BRR value; response: command byte
