diff --git a/src/files.c b/src/files.c
index d6c05ccbcfa4643f142dc3e65bdbef3ff26bad49..bfa74d9d730cb2b34c2680ea0ec6b693df24eb99 100644
--- a/src/files.c
+++ b/src/files.c
@@ -611,7 +611,7 @@ void switch_to_prevnext_buffer(bool to_next)
     assert(openfile != NULL);
 
     /* If only one file buffer is open, say so and get out. */
-    if (openfile == openfile->next) {
+    if (openfile == openfile->next && !inhelp) {
 	statusbar(_("No more open file buffers"));
 	return;
     }
diff --git a/src/help.c b/src/help.c
index 68858861b72f5e439dc6669d73d65bb9eaaab1eb..794e92b83aabdee501b3ae6ed09115b7fa121a08 100644
--- a/src/help.c
+++ b/src/help.c
@@ -235,6 +235,9 @@ void do_help(void)
 	}
     }
 
+    /* Switch back to the buffer we were invoked from. */
+    switch_to_prev_buffer_void();
+
     /* Restore the settings of all flags. */
     memcpy(flags, stash, sizeof(flags));