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,43 @@
         rb->closedir(dir);
     }
 }
+
+bool custom_dir(void)
+{
+    DIR* dir_check;
+    char *starts, line[MAX_PATH],formatted_line[MAX_PATH];
+    static int fd2;
+
+    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
+                rb->splash(HZ, "Error: %s", line);
+        }
+        rb->close(fd2);
+    }
+    else 
+        return false;
+    return true;
+}
+
 void generate(void)
 {
     dirs_count = 0;
@@ -139,7 +178,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);
