diff --git a/src/browser.c b/src/browser.c
index 089ffcfd2a1efabd9f2004946ea2632295c49221..29b40c7deff5e2d09825b8f30b5fe11b5bbc8c6a 100644
--- a/src/browser.c
+++ b/src/browser.c
@@ -336,13 +336,12 @@ void browse_key_sel(int change) {
 }
 
 
-
 #define toggle(x,y) if(x & y) x -=y; else x |= y
 
 int browse_key(int ch) {
   char tmp[PATH_MAX];
   char sort = 0, nonfo = 0;
-  struct dir *n;
+  struct dir *n, *r;
 
   switch(ch) {
     /* selecting items */
@@ -450,8 +449,14 @@ int browse_key(int ch) {
           break;
       if(n == NULL)
         break;
-      delete_init(n);
       nonfo++;
+      /* quirky method of getting the next selected dir without actually selecting it */
+      browse_key_sel(n->next ? 1 : -1);
+      for(r=browse_dir; r!=NULL; r=r->next)
+        if(r->flags & FF_BSEL)
+          break;
+      browse_key_sel(n->next ? -1 : 1);
+      delete_init(n, r);
       break;
   }
 
diff --git a/src/delete.c b/src/delete.c
index 0cf6fccd4571ae159dee212b94f6687b260e7186..2963f5d4b7cba58167e66108da6bb953b43607bf 100644
--- a/src/delete.c
+++ b/src/delete.c
@@ -42,7 +42,7 @@
 int delete_delay = 100;
 
 suseconds_t lastupdate;
-struct dir *root;
+struct dir *root, *nextsel;
 char noconfirm = 0,
      ignoreerr = 0,
      state, seloption, curfile[PATH_MAX];
@@ -229,28 +229,32 @@ int delete_dir(struct dir *dr) {
 
 
 void delete_process() {
-  struct dir *n;
+  /* determine dir to open after successful delete */
+  struct dir *n = root->parent->sub != root ? root->parent->sub : root->next ? root->next : root->parent;
+
   /* confirm */
   seloption = 1;
   while(state == DS_CONFIRM && !noconfirm)
     if(input_handle(0))
       return browse_init(root);
 
-  n = root->parent->sub != root ? root->parent->sub : root->next ? root->next : root->parent;
-
   /* delete */
   lastupdate = 999;
   seloption = 0;
   if(delete_dir(root))
     browse_init(root);
-  else
+  else {
     browse_init(n);
+    if(nextsel)
+      nextsel->flags |= FF_BSEL;
+  }
 }
 
 
-void delete_init(struct dir *dr) {
+void delete_init(struct dir *dr, struct dir *s) {
   state = DS_CONFIRM;
   root = dr;
   pstate = ST_DEL;
+  nextsel = s;
 }
 
diff --git a/src/delete.h b/src/delete.h
index a994854d647f4672cbd3b72e8d4f8630c4b909e1..a5ecc0d7a1737276b1c5b3b612561e69c53f655b 100644
--- a/src/delete.h
+++ b/src/delete.h
@@ -33,7 +33,7 @@ extern int delete_delay;
 void delete_process(void);
 int  delete_key(int);
 int  delete_draw(void);
-void delete_init(struct dir *);
+void delete_init(struct dir *, struct dir *);
 
 
 #endif