diff --git a/minui/graphics.c b/minui/graphics.c
index 88572a8..287878e 100644
--- a/minui/graphics.c
+++ b/minui/graphics.c
@@ -245,6 +245,9 @@
 }
 
 void gr_texticon(int x, int y, gr_surface icon) {
+    if (gr_context == NULL || icon == NULL) {
+        return;
+    }
     GGLContext* gl = gr_context;
 
     gl->bindTexture(gl, (GGLSurface*) icon);
@@ -268,7 +271,7 @@
 }
 
 void gr_blit(gr_surface source, int sx, int sy, int w, int h, int dx, int dy) {
-    if (gr_context == NULL) {
+    if (gr_context == NULL || source == NULL) {
         return;
     }
     GGLContext *gl = gr_context;
diff --git a/minui/resources.c b/minui/resources.c
index ac7bdac..065f431 100644
--- a/minui/resources.c
+++ b/minui/resources.c
@@ -178,8 +178,6 @@
 static int matches_locale(const char* loc) {
     if (locale == NULL) return 0;
 
-    printf("matching loc=[%s] vs locale=[%s]\n", loc, locale);
-
     if (strcmp(loc, locale) == 0) return 1;
 
     // if loc does *not* have an underscore, and it matches the start
@@ -190,7 +188,6 @@
     int i;
     for (i = 0; loc[i] != 0 && loc[i] != '_'; ++i);
     if (loc[i] == '_') return 0;
-    printf("  partial match possible; i = %d\n", i);
 
     return (strncmp(locale, loc, i) == 0 && locale[i] == '_');
 }
@@ -268,9 +265,9 @@
         int len = row[4];
         char* loc = row+5;
 
-        printf("row %d: %s %d x %d\n", y, loc, w, h);
-
         if (y+1+h >= height || matches_locale(loc)) {
+            printf("  %20s: %s (%d x %d @ %d)\n", name, loc, w, h, y);
+
             surface = malloc(sizeof(GGLSurface));
             if (surface == NULL) {
                 result = -8;
diff --git a/screen_ui.cpp b/screen_ui.cpp
index 1f2471a..0b34375 100644
--- a/screen_ui.cpp
+++ b/screen_ui.cpp
@@ -78,7 +78,9 @@
     indeterminate_frames(16),
     installing_frames(48),
     install_overlay_offset_x(65),
-    install_overlay_offset_y(106) {
+    install_overlay_offset_y(106),
+    overlay_offset_x(-1),
+    overlay_offset_y(-1) {
     pthread_mutex_init(&updateMutex, NULL);
     self = this;
 }
@@ -89,7 +91,7 @@
 // animation.  Does nothing if no overlay animation is defined.
 // Should only be called with updateMutex locked.
 void ScreenRecoveryUI::draw_install_overlay_locked(int frame) {
-    if (installationOverlay == NULL) return;
+    if (installationOverlay == NULL || overlay_offset_x < 0) return;
     gr_surface surface = installationOverlay[frame];
     int iconWidth = gr_get_width(surface);
     int iconHeight = gr_get_height(surface);
@@ -361,8 +363,6 @@
 void ScreenRecoveryUI::SetBackground(Icon icon)
 {
     pthread_mutex_lock(&updateMutex);
-    currentIcon = icon;
-    update_screen_locked();
 
     // Adjust the offset to account for the positioning of the
     // base image on the screen.
@@ -374,6 +374,9 @@
             (gr_fb_height() - (gr_get_height(bg) + gr_get_height(text) + 40)) / 2;
     }
 
+    currentIcon = icon;
+    update_screen_locked();
+
     pthread_mutex_unlock(&updateMutex);
 }
 
