diff -urw mediamvp.orig/console/menuapp.c mediamvp/console/menuapp.c
--- mediamvp.orig/console/menuapp.c	2004-10-16 11:07:09.000000000 +0200
+++ mediamvp/console/menuapp.c	2004-10-16 20:45:59.000000000 +0200
@@ -652,6 +652,8 @@
     filelist_t   *entry;
     menu_t       *child;
     int           i;
+    const char    *blue_key;
+    int           has_subdirs;
 
     menu_free_dialcode(menu);
     menu_set_dialcode_selection(menu,0);
@@ -670,6 +672,7 @@
         program_register_ack(dirlist->menuapp->program,REGISTER_MEDIA,media_ack,dirlist->menuapp);
         return 1;
     } else if ( entry->flags & FILE_DIR ) {
+
         /* The selection was a directory - we need to create a new menu - hah! */
         dirlist2 = new_dirlist(dirlist->menuapp);
 
@@ -685,10 +688,22 @@
         menu_set_param_clearup(child,delete_dirlist);
         menu_set_dialcode_callback(child, dial_entry);
             
+	has_subdirs = 0;
         for ( i = 0; i < dirlist2->filelist_num; i++ ) {
             menu_add(child,dirlist2->filelist[i].display_name,process_media);             
+	    if (dirlist2->filelist[i].flags & FILE_DIR) {
+	    	has_subdirs = 1;
+	    }
         }
-        menu_set_colour_actions(child,tr("Back"),tr("Play dir"),tr("Play list"), NULL, media_colour_keys);
+
+        blue_key = NULL;
+#ifdef VDR_PLUGIN
+        if (!has_subdirs && is_vdr_recording(dirlist2->path)) {
+            blue_key = tr("Delete dir");
+        }
+#endif
+
+        menu_set_colour_actions(child,tr("Back"),tr("Play dir"),tr("Play list"), blue_key, media_colour_keys);
 
         menu_display(child);
         return 1; 
@@ -793,6 +808,9 @@
     dirlist_t     *dir = (dirlist_t *)imenuapp;
     int            i;
     char           play = TRUE;
+#ifdef VDR_PLUGIN
+    menu_t	   *child;
+#endif
 
     switch ( key ) {
     case keyRed:
@@ -823,6 +841,19 @@
     case keyYellow:      
         playlist_parse(dir->menuapp,dir->path,dir->filelist[sel].url);
         break;   
+
+#ifdef VDR_PLUGIN
+    case keyBlue:
+
+        child = new_menu(dir->menuapp->dongle,dir->menuapp->render,dir->menuapp->program,menu,dir,0);
+        menu_set_title(child,tr("Confirm delete"));
+            
+        menu_set_colour_actions(child,tr("Back"),tr("Delete"),NULL, NULL, recdel_colour_keys);
+
+        menu_display(child);
+        break;
+#endif
+
     default:
         break;
     }
@@ -1038,9 +1069,12 @@
         break;
     case keySkip:
         if (  ( streamtype & MEDIA_LIVE ) == 0 ) {
-            dongle_send_message(menuapp->dongle,RDC_STOP);
-        } else {
-            return 0;   /* Continue with the menus */
+            dongle_send_message(menuapp->dongle,RDC_SKIP);
+        }
+        break;
+    case keyReplay:
+        if (  ( streamtype & MEDIA_LIVE ) == 0 ) {
+            dongle_send_message(menuapp->dongle,RDC_BACK);
         }
         break;
     case keyYellow:
diff -urw mediamvp.orig/menuapp-vdr.c mediamvp/menuapp-vdr.c
--- mediamvp.orig/menuapp-vdr.c	2004-10-15 13:46:48.000000000 +0200
+++ mediamvp/menuapp-vdr.c	2004-10-16 20:39:11.000000000 +0200
@@ -617,5 +617,69 @@
     return list;    
 }
 
+static cRecording* find_recording(const char *dirname) {
+    char          dirpath[PATH_MAX];
+    char          recpath[PATH_MAX];
+
+    if (realpath(dirname,dirpath)) { /* recording does exist */
+        for (cRecording *recording = Recordings.First(); recording; recording = Recordings.Next(recording)) {
+            /* search for recordings comparing real paths */
+            if (realpath( recording->FileName(), recpath ) && strcmp(dirpath, recpath) == 0) {
+                return recording;
+            }
+        }
+    }
+
+    return NULL;
+}
+
+
+
+static int is_vdr_recording(const char *dirname) {
+    char    *ptr;
+    if ( ( ptr = strrchr(dirname,'.') ) != NULL ) {
+        if ( strcasecmp(ptr,".rec") == 0 && find_recording(dirname) ) {
+            return 1;
+        }
+    }
+    return 0;  	
+}
+
+
+static int recdel_colour_keys(menu_t *menu, void *imenuapp, int key, int sel)
+{
+    dirlist_t     *dir = (dirlist_t *)imenuapp;
+    cRecording    *recording;
+    menu_t        *p_menu;
+    menu_t        *pp_menu;
+    menu_t        *ppp_menu;
+
+    switch ( key ) {
+    case keyRed:
+        return 0;
+    case keyGreen:       /* Really delete the recording */
+        recording = find_recording(dir->path);
+        if (recording) {
+            recording->Delete();
+
+            /* Delete this menu, it's parent, and it's parent's parent */
+            p_menu = menu_parent(menu);
+            pp_menu = menu_parent(p_menu);
+            ppp_menu = menu_parent(pp_menu);
+            delete_menu(menu);
+            delete_menu(p_menu);
+            delete_menu(pp_menu);
+
+            menu_display(ppp_menu);
+            return 1; /* important, menu is invalid now */
+        }
+
+        break;
+    default:
+        break;
+    }
+
+    return 1;     /* Carry on displaying this menu */
+}
