diff --git a/src/nano.c b/src/nano.c
index ace2a8d1907bd71e31983f08cfdb7ca1fc7d549f..de4d7a7a42d600c433c6e32b5c1792e0a22f1741 100644
--- a/src/nano.c
+++ b/src/nano.c
@@ -557,6 +557,7 @@ void finish(void)
     blank_statusbar();
     blank_bottombars();
     wrefresh(bottomwin);
+    curs_set(1);
     endwin();
 
     /* Restore the old terminal settings. */
@@ -584,6 +585,7 @@ void die(const char *msg, ...)
 {
     va_list ap;
 
+    curs_set(1);
     endwin();
 
     /* Restore the old terminal settings. */
diff --git a/src/winio.c b/src/winio.c
index 60ec948c38e2dc3eeb9d72fd824743eb84e885fb..075557d5555dcedd12b8ddaf07fabf1b2bd6a7a5 100644
--- a/src/winio.c
+++ b/src/winio.c
@@ -185,8 +185,12 @@ void get_key_buffer(WINDOW *win)
      * screen updates. */
     doupdate();
 
-    if (reveal_cursor)
+    if (reveal_cursor) {
 	curs_set(1);
+#ifdef USE_SLANG
+	doupdate();
+#endif
+    }
 
     /* Read in the first keystroke using whatever mode we're in. */
     while (input == ERR) {