diff --git a/wayback-session/wayback-session.c b/wayback-session/wayback-session.c
index 1cefed5..147e765 100644
--- a/wayback-session/wayback-session.c
+++ b/wayback-session/wayback-session.c
@@ -57,11 +57,19 @@ int main(int argc, char *argv[])
 	wayback_log_init("wayback-session", LOG_INFO, NULL);
 
 	char **session_cmd;
-	char *xinitrc_path = NULL;
+
+	// This has to be char* to satisfy execvp
+	char *xinitrc_session_cmd[] = {
+		(char[]){ "sh" },
+		NULL, // Fill in with path to xinitrc if applicable
+		NULL,
+	};
+
 	signal(SIGCHLD, handle_child_exit);
 
 	if (argc == 1) {
-		xinitrc_path = get_xinitrc_path();
+		xinitrc_session_cmd[1] = get_xinitrc_path();
+		session_cmd = xinitrc_session_cmd;
 	} else {
 		session_cmd = &argv[optind];
 	}
@@ -98,13 +106,8 @@ int main(int argc, char *argv[])
 	if (session_pid == 0) {
 		setenv("XDG_SESSION_TYPE", "x11", true);
 		setenv("DISPLAY", x_display, true);
-		if (xinitrc_path != NULL) {
-			execlp("sh", "sh", xinitrc_path, (void *)NULL);
-		} else if (session_cmd != NULL) {
-			execvp(session_cmd[0], session_cmd);
-		}
+		execvp(session_cmd[0], session_cmd);
 		wayback_log(LOG_ERROR, "Failed to launch session");
-		free(xinitrc_path);
 		exit(EXIT_FAILURE);
 	}