diff --git a/apps/gui/icon.c b/apps/gui/icon.c
index 73c0fb5..cf4f56a 100644
--- a/apps/gui/icon.c
+++ b/apps/gui/icon.c
@@ -237,10 +237,12 @@ static void load_icons(const char* filename, enum Iconset iconset,
     *loaded_ok = false;
     if (!allow_disable || (filename[0] && filename[0] != '-'))
     {
-        char path[MAX_PATH];
+        char path[MAX_PATH], temp[MAX_PATH];
+        const char* file;
         
         snprintf(path, sizeof(path), "%s/%s.bmp", ICON_DIR, filename);
-        size_read = read_bmp_file(path, bmp, IMG_BUFSIZE, bmpformat, NULL);
+        file = get_user_file_path(path, IS_FILE, temp, sizeof(temp));
+        size_read = read_bmp_file(file, bmp, IMG_BUFSIZE, bmpformat, NULL);
         if (size_read > 0)
         {
             *loaded_ok = true;
diff --git a/apps/gui/skin_engine/skin_backdrops.c b/apps/gui/skin_engine/skin_backdrops.c
index 3a000b2..ae4f609 100644
--- a/apps/gui/skin_engine/skin_backdrops.c
+++ b/apps/gui/skin_engine/skin_backdrops.c
@@ -114,13 +114,11 @@ bool skin_backdrops_preload(void)
             if (screen == SCREEN_MAIN && global_settings.backdrop_file[0] &&
                 global_settings.backdrop_file[0] != '-' && filename[0] == '-')
             {
-                char dir[MAX_PATH];
+                char path[MAX_PATH];
                 char* temp = filename+2; /* slightly hacky to get a buffer */
                 size_t size = sizeof(backdrops[i].name) - 2;
-                snprintf(temp, size, "%s/%s.bmp",
-                         get_user_file_path(BACKDROP_DIR, 0, dir, sizeof(dir)),
-                         global_settings.backdrop_file);
-                filename = temp;
+                snprintf(temp, size, BACKDROP_DIR "/%s.bmp", global_settings.backdrop_file);
+                filename = get_user_file_path(temp, IS_FILE, path, sizeof(path));
             }
             if (*filename && *filename != '-')
             {
@@ -157,7 +155,7 @@ void skin_backdrop_unload(int backdrop_id)
 void skin_backdrop_load_setting(void)
 {
     int i;
-    char filename[MAX_PATH], dir[MAX_PATH];
+    char filename[MAX_PATH], dir[MAX_PATH], *temp;
     for(i=0;i<SKINNABLE_SCREENS_COUNT*NB_SCREENS;i++)
     {
         if (backdrops[i].name[0] == '-' && backdrops[i].screen == SCREEN_MAIN)
@@ -167,11 +165,11 @@ void skin_backdrop_load_setting(void)
             {
                 if (!backdrops[i].buffer)
                     backdrops[i].buffer = (char*)skin_buffer_alloc(LCD_BACKDROP_BYTES);
-                snprintf(filename, sizeof filename, "%s/%s.bmp",
-                         get_user_file_path(BACKDROP_DIR, 0, dir, sizeof(dir)),
+                snprintf(filename, sizeof filename, BACKDROP_DIR "/%s.bmp",
                          global_settings.backdrop_file);
+                temp = get_user_file_path(filename, IS_FILE, dir, sizeof(dir));
                 bool loaded = backdrops[i].buffer && 
-                              screens[SCREEN_MAIN].backdrop_load(filename,
+                              screens[SCREEN_MAIN].backdrop_load(temp,
                                                             backdrops[i].buffer);
                 backdrops[i].name[2] = loaded ? '.' : '\0';
                 return;
diff --git a/apps/gui/skin_engine/skin_fonts.c b/apps/gui/skin_engine/skin_fonts.c
index e5081e8..23086cb 100644
--- a/apps/gui/skin_engine/skin_fonts.c
+++ b/apps/gui/skin_engine/skin_fonts.c
@@ -73,7 +73,7 @@ int skin_font_load(char* font_name, int glyphs)
         return FONT_UI_REMOTE;
 #endif
     snprintf(tmp, MAX_PATH, FONT_DIR "/%s.fnt", font_name);
-    get_user_file_path(tmp, FORCE_BUFFER_COPY, filename, sizeof(filename));
+    get_user_file_path(tmp, IS_FILE|FORCE_BUFFER_COPY, filename, sizeof(filename));
     
     for(i=0;i<MAXUSERFONTS;i++)
     {
diff --git a/firmware/common/rbpaths.c b/firmware/common/rbpaths.c
index b63586c..9fb0ac5 100644
--- a/firmware/common/rbpaths.c
+++ b/firmware/common/rbpaths.c
@@ -42,6 +42,21 @@ void paths_init(void)
 #endif
 }
 
+static bool try_path(const char* filename, unsigned flags)
+{
+    if (flags & IS_FILE)
+    {
+        if (file_exists(filename))
+            return true;
+    }
+    else
+    {
+        if (dir_exists(filename))
+            return true;
+    }
+    return false;
+}
+
 const char* get_user_file_path(const char *path,
                                unsigned flags,
                                char* buf,
@@ -66,19 +81,19 @@ const char* get_user_file_path(const char *path,
      * write access is needed */
     if (flags & NEED_WRITE)
         ret = buf;
-    else
+    else if (try_path(buf, flags))
+        ret = buf;
+    //printf("\t'%s': %s\n",buf, buf == ret ? "yes" : "no");    
+    if (ret != buf) /* not found in $HOME, try ROCKBOX_BASE_DIR, !NEED_WRITE only */
     {
-        if (flags & IS_FILE)
-        {
-            if (file_exists(buf))
-                ret = buf;
-        }
-        else
-        {
-            if (dir_exists(buf))
-                ret = buf;
-        }
+        if (snprintf(buf, bufsize, ROCKBOX_BASE_DIR "/%s", pos) >= (int)bufsize)
+            return NULL;
+
+        if (try_path(buf, flags))
+            ret = buf;
+    //printf("\t'%s': %s\n",buf, buf == ret ? "yes" : "no");    
     }
+        
 
     /* make a copy if we're about to return the path*/
     if (UNLIKELY((flags & FORCE_BUFFER_COPY) && (ret != buf)))
@@ -87,6 +102,6 @@ const char* get_user_file_path(const char *path,
         ret = buf;
     }
 
-    printf("%s(): %s\n", __func__, ret);
+    printf("\t%s(): %s\n", __func__, ret);
     return ret;
 }
diff --git a/tools/configure b/tools/configure
index e716439..6777544 100755
--- a/tools/configure
+++ b/tools/configure
@@ -3175,7 +3175,12 @@ sed > autoconf.h \
 @lcd_height@
 
 /* root of Rockbox */
+#if APPLICATION
+#define ROCKBOX_BASE_DIR "@RBDIR@"
+#define ROCKBOX_DIR "/<Rb>"
+#else
 #define ROCKBOX_DIR "@RBDIR@"
+#endif
 #define ROCKBOX_BINARY_PATH "@binpath@"
 #define ROCKBOX_LIBRARY_PATH "@libpath@"
 
