diff --git a/firmware/panic.c b/firmware/panic.c
index 0e575e0..9230337 100644
--- a/firmware/panic.c
+++ b/firmware/panic.c
@@ -63,6 +63,7 @@ void panicf( const char *fmt, ...)

 #if LCD_DEPTH > 1
     lcd_set_backdrop(NULL);
+    lcd_set_drawmode(DRMODE_SOLID);
     lcd_set_foreground(LCD_BLACK);
     lcd_set_background(LCD_WHITE);
 #endif
diff --git a/firmware/target/arm/system-arm.c b/firmware/target/arm/system-arm.c
index 920dbac..22e7029 100644
--- a/firmware/target/arm/system-arm.c
+++ b/firmware/target/arm/system-arm.c
@@ -36,10 +36,17 @@ static const char* const uiename[] = {
  */
 void __attribute__((noreturn)) UIE(unsigned int pc, unsigned int num)
 {
-    lcd_clear_display();
 #ifdef HAVE_LCD_BITMAP
+#if LCD_DEPTH > 1
+    lcd_set_backdrop(NULL);
+    lcd_set_drawmode(DRMODE_SOLID);
+    lcd_set_foreground(LCD_BLACK);
+    lcd_set_background(LCD_WHITE);
+#endif
     lcd_setfont(FONT_SYSFIXED);
+    lcd_set_viewport(NULL);
 #endif
+    lcd_clear_display();
     lcd_puts(0, 0, uiename[num]);
     lcd_putsf(0, 1, "at %08x" IF_COP(" (%d)"), pc
              IF_COP(, CURRENT_CORE));
diff --git a/firmware/target/coldfire/system-coldfire.c b/firmware/target/coldfire/system-coldfire.c
index 8ae702f..edee27b 100644
--- a/firmware/target/coldfire/system-coldfire.c
+++ b/firmware/target/coldfire/system-coldfire.c
@@ -167,8 +167,17 @@ static void system_display_exception_info(unsigned long format,
     int vector = (format >> 18) & 0xff;

     /* clear screen */
-    lcd_clear_display ();
+#ifdef HAVE_LCD_BITMAP
+#if LCD_DEPTH > 1
+    lcd_set_backdrop(NULL);
+    lcd_set_drawmode(DRMODE_SOLID);
+    lcd_set_foreground(LCD_BLACK);
+    lcd_set_background(LCD_WHITE);
+#endif
     lcd_setfont(FONT_SYSFIXED);
+    lcd_set_viewport(NULL);
+#endif
+    lcd_clear_display();

     lcd_putsf(0, 0, "I%02x:%s", vector, irqname[vector]);
     lcd_putsf(0, 1, "at %08x", pc);
diff --git a/firmware/target/mips/ingenic_jz47xx/system-jz4740.c b/firmware/target/mips/ingenic_jz47xx/system-jz4740.c
index c5f99ab..68d4759 100644
--- a/firmware/target/mips/ingenic_jz47xx/system-jz4740.c
+++ b/firmware/target/mips/ingenic_jz47xx/system-jz4740.c
@@ -262,9 +262,17 @@ void exception_handler(void* stack_ptr, unsigned int cause, unsigned int epc)
                           "$1", "LO", "HI", "STATUS", "EPC" };
     int i;

+#ifdef HAVE_LCD_BITMAP
+#if LCD_DEPTH > 1
     lcd_set_backdrop(NULL);
-    lcd_clear_display();
+    lcd_set_drawmode(DRMODE_SOLID);
+    lcd_set_foreground(LCD_BLACK);
+    lcd_set_background(LCD_WHITE);
+#endif
     lcd_setfont(FONT_SYSFIXED);
+    lcd_set_viewport(NULL);
+#endif
+    lcd_clear_display();
     _backlight_on();

     snprintf(buffer, sizeof(buffer), "0x%08x at 0x%08x", read_c0_badvaddr(), epc);
diff --git a/firmware/target/sh/system-sh.c b/firmware/target/sh/system-sh.c
index 2482109..e054801 100644
--- a/firmware/target/sh/system-sh.c
+++ b/firmware/target/sh/system-sh.c
@@ -299,10 +299,18 @@ void UIE (unsigned int pc) /* Unexpected Interrupt or Exception */
     asm volatile ("sts\tpr,%0" : "=r"(n));

     /* clear screen */
-    lcd_clear_display();
 #ifdef HAVE_LCD_BITMAP
+#if LCD_DEPTH > 1
+    lcd_set_backdrop(NULL);
+    lcd_set_drawmode(DRMODE_SOLID);
+    lcd_set_foreground(LCD_BLACK);
+    lcd_set_background(LCD_WHITE);
+#endif
     lcd_setfont(FONT_SYSFIXED);
+    lcd_set_viewport(NULL);
 #endif
+
+    lcd_clear_display();
     /* output exception */
     n = (n - (unsigned)UIE4 + 12)>>2; /* get exception or interrupt number */
     lcd_putsf(0, 0, "I%02x:%s", n, irqname[n]);