diff --git a/src/nnn.c b/src/nnn.c
index 00860c3..aedc79b 100644
--- a/src/nnn.c
+++ b/src/nnn.c
@@ -5461,6 +5461,16 @@ nochange:
 			mkpath(path, dents[cur].name, newpath);
 			DPRINTF_S(newpath);
 
+			if (dents[cur].flags & DIR_OR_LINK_TO_DIR) {
+				if (chdir(newpath) == -1) {
+					printwarn(&presel);
+					goto nochange;
+				}
+
+				cdprep(lastdir, lastname, path, newpath) ? (presel = FILTER) : (watch = TRUE);
+				goto begin;
+			}
+
 			/* Cannot use stale data in entry, file may be missing by now */
 			if (stat(newpath, &sb) == -1) {
 				printwarn(&presel);
@@ -5469,14 +5479,6 @@ nochange:
 			DPRINTF_U(sb.st_mode);
 
 			switch (sb.st_mode & S_IFMT) {
-			case S_IFDIR:
-				if (chdir(newpath) == -1) {
-					printwarn(&presel);
-					goto nochange;
-				}
-
-				cdprep(lastdir, lastname, path, newpath) ? (presel = FILTER) : (watch = TRUE);
-				goto begin;
 			case S_IFREG:
 			{
 				/* If opened as vim plugin and Enter/^M pressed, pick */