diff --git a/ChangeLog b/ChangeLog
index b5d2cb939c5ffb3b82ece7737b5df82e1ee667f0..e406deba19b4df09fdec8f997e25c3e3116c7694 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,4 +1,9 @@
 CVS code -
+- nano.c:
+  main()
+	- Move the call to raw() on systems that don't define
+	  _POSIX_VDISABLE outside the main input/output loop, as it
+	  doesn't need to be called every time through the loop. (DLR)
 - README:
 	- Reformat to 72 characters per line, fix wording in one spot,
 	  and fix spacing in several spots. (DLR)
diff --git a/src/nano.c b/src/nano.c
index af59ebbf9ac4228859de2299e971e14eb5c0b185..98f9a7f3936e29b3ccf19aebb47ab7467b247743 100644
--- a/src/nano.c
+++ b/src/nano.c
@@ -3434,6 +3434,11 @@ int main(int argc, char *argv[])
     cbreak();
     noecho();
 
+#ifndef _POSIX_VDISABLE
+    /* We're going to have to do it the old way, i.e, on Cygwin. */
+    raw();
+#endif
+
     /* Set up some global variables */
     global_init(0);
     shortcut_init(0);
@@ -3508,11 +3513,6 @@ int main(int argc, char *argv[])
 	currshortcut = main_list;
 #endif
 
-#ifndef _POSIX_VDISABLE
-	/* We're going to have to do it the old way, i.e. on cygwin */
-	raw();
-#endif
-
 	kbinput = get_kbinput(edit, &meta);
 #ifdef DEBUG
 	fprintf(stderr, "AHA!  %c (%d)\n", kbinput, kbinput);