Index: apps/onplay.c
===================================================================
--- apps/onplay.c	(revision 29669)
+++ apps/onplay.c	(working copy)
@@ -1017,18 +1017,9 @@
 #if LCD_DEPTH > 1
 static bool set_backdrop(void)
 {
-    /* load the image 
-    if(sb_set_backdrop(SCREEN_MAIN, selected_file)) {
-        splash(HZ, str(LANG_BACKDROP_LOADED));
-        set_file(selected_file, (char *)global_settings.backdrop_file,
-            MAX_FILENAME);
-        return true;
-    } else {
-        splash(HZ, str(LANG_BACKDROP_FAILED));
-        return false;
-    }*/
-    set_file(selected_file, (char *)global_settings.backdrop_file,
-        MAX_FILENAME);
+    strlcpy(global_settings.backdrop_file, selected_file,
+            sizeof(global_settings.backdrop_file));
+    settings_save();
     skin_backdrop_load_setting();
     return true;
 }
Index: apps/gui/skin_engine/skin_backdrops.c
===================================================================
--- apps/gui/skin_engine/skin_backdrops.c	(revision 29669)
+++ apps/gui/skin_engine/skin_backdrops.c	(working copy)
@@ -113,10 +113,7 @@
             if (screen == SCREEN_MAIN && global_settings.backdrop_file[0] &&
                 global_settings.backdrop_file[0] != '-' && filename[0] == '-')
             {
-                char* temp = filename+2; /* slightly hacky to get a buffer */
-                size_t size = sizeof(backdrops[i].name) - 2;
-                snprintf(temp, size, BACKDROP_DIR "/%s.bmp", global_settings.backdrop_file);
-                filename = temp;
+                filename = global_settings.backdrop_file;
             }
             if (*filename && *filename != '-')
             {
@@ -156,7 +153,6 @@
 void skin_backdrop_load_setting(void)
 {
     int i;
-    char filename[MAX_PATH];
     for(i=0;i<SKINNABLE_SCREENS_COUNT*NB_SCREENS;i++)
     {
         if (backdrops[i].name[0] == '-' && backdrops[i].screen == SCREEN_MAIN)
@@ -166,11 +162,11 @@
             {
                 if (!backdrops[i].buffer)
                     backdrops[i].buffer = (char*)skin_buffer_alloc(LCD_BACKDROP_BYTES);
-                snprintf(filename, sizeof filename, BACKDROP_DIR "/%s.bmp",
-                         global_settings.backdrop_file);
+
                 bool loaded = backdrops[i].buffer && 
-                              screens[SCREEN_MAIN].backdrop_load(filename,
-                                                            backdrops[i].buffer);
+                              screens[SCREEN_MAIN].backdrop_load(
+                                                   global_settings.backdrop_file,
+                                                   backdrops[i].buffer);
                 backdrops[i].name[2] = loaded ? '.' : '\0';
                 return;
             }
Index: apps/settings.h
===================================================================
--- apps/settings.h	(revision 29669)
+++ apps/settings.h	(working copy)
@@ -588,7 +588,7 @@
 #endif /* HAVE_TAGCACHE */
 
 #if LCD_DEPTH > 1
-    unsigned char backdrop_file[MAX_FILENAME+1];  /* backdrop bitmap file */
+    unsigned char backdrop_file[MAX_PATHNAME+1];  /* backdrop bitmap file */
 #endif
 
 #ifdef HAVE_LCD_COLOR
Index: apps/settings_list.c
===================================================================
--- apps/settings_list.c	(revision 29669)
+++ apps/settings_list.c	(working copy)
@@ -1587,7 +1587,7 @@
     TEXT_SETTING(0,lang_file,"lang","",LANG_DIR "/",".lng"),
 #if LCD_DEPTH > 1
     TEXT_SETTING(F_THEMESETTING,backdrop_file,"backdrop",
-                     DEFAULT_BACKDROP, BACKDROP_DIR "/", ".bmp"),
+                     DEFAULT_BACKDROP, NULL, NULL),
 #endif
 #ifdef HAVE_LCD_BITMAP
     TEXT_SETTING(0,kbd_file,"kbd","-",ROCKBOX_DIR "/",".kbd"),
