Index: apps/plugins/random_folder_advance_config.c
===================================================================
--- apps/plugins/random_folder_advance_config.c	(revision 13196)
+++ apps/plugins/random_folder_advance_config.c	(working copy)
@@ -26,6 +26,8 @@
 static int dirs_count;
 static int lasttick;
 #define RFA_FILE ROCKBOX_DIR "/folder_advance_list.dat"
+#define RFADIR_FILE ROCKBOX_DIR "/folder_advance_dir.txt"
+
 char *buffer = NULL;
 int buffer_size;
 struct file_format {
@@ -123,6 +125,57 @@
         rb->closedir(dir);
     }
 }
+
+bool custom_dir(void)
+{
+    DIR* dir_check;
+    char *starts, line[MAX_PATH],formatted_line[MAX_PATH];
+    static int fd2;
+    char buf[21];
+    int line_no = 0;
+    int i;
+
+    if((fd2 = rb->open(RFADIR_FILE,O_RDONLY)) > 0)
+    {
+        while ((rb->read_line(fd2, line, MAX_PATH - 1)) > 0)
+        {
+            if (line[0] != '/')
+                rb->snprintf(formatted_line, MAX_PATH, "/%s", line);
+            else
+                rb->snprintf(formatted_line, MAX_PATH, "%s", line);
+            dir_check = rb->opendir(formatted_line);
+
+            if (dir_check)
+            {
+                rb->closedir(dir_check);
+                dirs_count++;
+                starts = &formatted_line[rb->strlen(formatted_line)];
+                rb->memset(starts, 0, &formatted_line[MAX_PATH-1]-starts);
+                rb->write(fd, formatted_line, MAX_PATH);
+                traversedir("", line);
+            }
+            else
+            {
+                 line_no ++;
+                 FOR_NB_SCREENS(i)
+                 {
+                     rb->snprintf(buf,sizeof(buf),"Not found:");
+                     rb->screens[0]->puts(0,0,buf);
+                     rb->screens[0]->puts(0, line_no, line);
+                     rb->screens[i]->update();
+                 }
+            }
+
+        }
+        rb->close(fd2);
+        if(line_no)
+            rb->get_action(CONTEXT_STD, TIMEOUT_BLOCK);
+    }
+    else
+        return false;
+    return true;
+}
+
 void generate(void)
 {
     dirs_count = 0;
@@ -139,7 +192,9 @@
 #endif
     lasttick = *rb->current_tick;
 
-    traversedir("", "");
+    if(!custom_dir())
+        traversedir("", "");
+
     rb->lseek(fd,0,SEEK_SET);
     rb->write(fd,&dirs_count,sizeof(int));
     rb->close(fd);
