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)
@@ -115,7 +115,10 @@
             {
                 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);
+                if(global_settings.backdrop_file[0] != '/')
+                    snprintf(temp, size, BACKDROP_DIR "/%s.bmp", global_settings.backdrop_file);
+                else
+                    temp = global_settings.backdrop_file;
                 filename = temp;
             }
             if (*filename && *filename != '-')
@@ -166,8 +169,12 @@
             {
                 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);
+                if(global_settings.backdrop_file[0] != '/')
+                    snprintf(filename, sizeof filename, BACKDROP_DIR "/%s.bmp",
+                             global_settings.backdrop_file);
+                else
+                    strlcpy(filename, global_settings.backdrop_file, sizeof filename);
+
                 bool loaded = backdrops[i].buffer && 
                               screens[SCREEN_MAIN].backdrop_load(filename,
                                                             backdrops[i].buffer);
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"),
