diff --git a/src/browser.c b/src/browser.c
index fd323cfaae0470d78fb9c15f58fe1de521b89e31..f3941c747d4a0521f6a367b261625e0f66a64060 100644
--- a/src/browser.c
+++ b/src/browser.c
@@ -310,7 +310,8 @@ void browse_key_sel(int change) {
   struct dir *n, *cur, par;
   int i, max;
 
-  cur = browse_dir;
+  if((cur = browse_dir) == NULL)
+    return;
   par.next = cur;
   if(cur->parent->parent)
     cur = ∥
@@ -402,13 +403,13 @@ int browse_key(int ch) {
           break;
       if(n != NULL && n->sub != NULL)
         browse_dir = n->sub;
-      if(n == NULL && browse_dir->parent->parent)
+      if(n == NULL && browse_dir != NULL && browse_dir->parent->parent)
         browse_dir = browse_dir->parent->parent->sub;
       nonfo++;
       sort++;
       break;
     case KEY_LEFT:
-      if(browse_dir->parent->parent != NULL)
+      if(browse_dir != NULL && browse_dir->parent->parent != NULL)
         browse_dir = browse_dir->parent->parent->sub;
       nonfo++;
       sort++;
@@ -416,7 +417,8 @@ int browse_key(int ch) {
 
    /* refresh */
     case 'r':
-      calc_init(getpath(browse_dir->parent), browse_dir->parent);
+      if(browse_dir != NULL)
+        calc_init(getpath(browse_dir->parent), browse_dir->parent);
       nonfo++;
       sort++;
       break;
@@ -457,7 +459,7 @@ int browse_key(int ch) {
       break;
   }
 
-  if(sort)
+  if(sort && browse_dir != NULL)
     browse_dir = browse_sort(browse_dir);
   if(nonfo)
     flags &= ~BF_INFO;