diff --git a/src/nnn.c b/src/nnn.c
index 65f6c43..4c8351c 100644
--- a/src/nnn.c
+++ b/src/nnn.c
@@ -2826,14 +2826,21 @@ nochange:
 			cur = ndents - 1;
 			break;
 		case SEL_CDHOME:
-			dir = getenv("HOME");
-			if (dir == NULL) {
-				clearprompt();
-				goto nochange;
-			} // fallthrough
+			dir = xgetenv("HOME", path); // fallthrough
 		case SEL_CDBEGIN:
 			if (sel == SEL_CDBEGIN)
-				dir = ipath;
+				dir = ipath; // fallthrough
+		case SEL_CDLAST:
+			if (sel == SEL_CDLAST)
+				dir = lastdir; // fallthrough
+		case SEL_VISIT:
+			if (sel == SEL_VISIT)
+				dir = mark;
+
+			if (dir[0] == '\0') {
+				printmsg("not set");
+				goto nochange;
+			}
 
 			if (!xdiraccess(dir))
 				goto nochange;
@@ -2841,33 +2848,12 @@ nochange:
 			if (strcmp(path, dir) == 0)
 				break;
 
+			/* SEL_CDLAST: dir pointing to lastdir */
+			xstrlcpy(newpath, dir, PATH_MAX);
+
 			/* Save last working directory */
 			xstrlcpy(lastdir, path, PATH_MAX);
-			xstrlcpy(path, dir, PATH_MAX);
-			lastname[0] = '\0';
-			DPRINTF_S(path);
-			setdirwatch();
-			goto begin;
-		case SEL_CDLAST: // fallthrough
-		case SEL_VISIT:
-			if (sel == SEL_VISIT) {
-				if (strcmp(mark, path) == 0)
-					break;
-
-				tmp = mark;
-			} else
-				tmp = lastdir;
-
-			if (tmp[0] == '\0') {
-				printmsg("not set");
-				goto nochange;
-			}
 
-			if (!xdiraccess(tmp))
-				goto nochange;
-
-			xstrlcpy(newpath, tmp, PATH_MAX);
-			xstrlcpy(lastdir, path, PATH_MAX);
 			xstrlcpy(path, newpath, PATH_MAX);
 			lastname[0] = '\0';
 			DPRINTF_S(path);
diff --git a/src/nnn.h b/src/nnn.h
index 9a2930f..adccfc6 100644
--- a/src/nnn.h
+++ b/src/nnn.h
@@ -48,6 +48,7 @@ enum action {
 	SEL_CDHOME,
 	SEL_CDBEGIN,
 	SEL_CDLAST,
+	SEL_VISIT,
 	SEL_LEADER,
 	SEL_CYCLE,
 	SEL_CTX1,
@@ -55,7 +56,6 @@ enum action {
 	SEL_CTX3,
 	SEL_CTX4,
 	SEL_PIN,
-	SEL_VISIT,
 	SEL_FLTR,
 	SEL_MFLTR,
 	SEL_TOGGLEDOT,
@@ -141,6 +141,8 @@ static struct key bindings[] = {
 	{ '&',            SEL_CDBEGIN },
 	/* Last visited dir */
 	{ '-',            SEL_CDLAST },
+	/* Visit marked directory */
+	{ CONTROL('W'),   SEL_VISIT },
 	/* Leader key */
 	{ CONTROL('_'),   SEL_LEADER },
 	{ '`',            SEL_LEADER },
@@ -154,8 +156,6 @@ static struct key bindings[] = {
 	{ '4',            SEL_CTX4 },
 	/* Mark a path to visit later */
 	{ 'b',            SEL_PIN },
-	/* Visit marked directory */
-	{ CONTROL('W'),   SEL_VISIT },
 	/* Filter */
 	{ '/',            SEL_FLTR },
 	/* Toggle filter mode */