diff --git a/ChangeLog b/ChangeLog
index 249533fb20d4febce54a1fbc0c0df7eb5382c58c..e4752e447af50a0a2f6450d81ffce41096ea59d3 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,6 +1,11 @@
 CVS code -
 - General:
 	- Translation updates (see po/ChangeLog for details).
+	- Remove malloc.h, as it's unneeded and just causes annoyances on
+	  *BSD systems.  Added stdlib.h to global.c
+	- Added Meta-Y toggle to disable/enable color syntax highlighting
+	  completely.  This may eventually be per-buffer, but that's too
+	  complicated for a feature freeze.
 
 GNU nano 1.1.11 - 10/01/2002
 - General:
diff --git a/configure.ac b/configure.ac
index 34f9b9c9a82da01e64bd930601a4e09e38c9baab..b0d3dd7c8ef3b65ab0aa0ce4149bdc6eebf49630 100644
--- a/configure.ac
+++ b/configure.ac
@@ -15,7 +15,7 @@ AC_SYS_LARGEFILE
 
 dnl Checks for header files.
 AC_HEADER_STDC
-AC_CHECK_HEADERS(fcntl.h unistd.h malloc.h termios.h termio.h limits.h getopt.h regex.h)
+AC_CHECK_HEADERS(fcntl.h unistd.h termios.h termio.h limits.h getopt.h regex.h)
 
 dnl options
 AC_ARG_ENABLE(debug, 
diff --git a/global.c b/global.c
index 0e978606c13ccb201a080396bb965269aab22c1c..5fc946b51693a4c98162ea4588d68efb6b3e0a2e 100644
--- a/global.c
+++ b/global.c
@@ -21,6 +21,7 @@
 
 #include "config.h"
 
+#include <stdlib.h>
 #include <assert.h>
 #include <sys/stat.h>
 #include "proto.h"
@@ -222,6 +223,9 @@ void toggle_init(void)
 #ifdef ENABLE_MULTIBUFFER
     char *toggle_load_msg;
 #endif
+#ifdef ENABLE_COLOR
+    char *toggle_syntax_msg;
+#endif
 
     /* There is no need to reinitialize the toggles.  They can't
        change.  In fact, reinitializing them causes a segfault in
@@ -242,6 +246,9 @@ void toggle_init(void)
     toggle_mac_msg = _("Writing file in Mac format");
     toggle_backup_msg = _("Backing up file");
     toggle_smooth_msg = _("Smooth scrolling");
+#ifdef ENABLE_COLOR
+    toggle_syntax_msg = _("Color syntax highlighting");
+#endif
 #ifndef DISABLE_WRAPPING
     toggle_wrap_msg = _("Auto wrap");
 #endif
@@ -267,6 +274,9 @@ void toggle_init(void)
     toggle_init_one(TOGGLE_MAC_KEY, toggle_mac_msg, MAC_FILE);
     toggle_init_one(TOGGLE_BACKUP_KEY, toggle_backup_msg, BACKUP_FILE);
     toggle_init_one(TOGGLE_SMOOTH_KEY, toggle_smooth_msg, SMOOTHSCROLL);
+#ifdef ENABLE_COLOR
+    toggle_init_one(TOGGLE_SYNTAX_KEY, toggle_syntax_msg, COLOR_SYNTAX);
+#endif
 }
 
 #ifdef DEBUG
diff --git a/nano.c b/nano.c
index c68ae8aaa2bbaec18505bc856864174397afd353..538099ddf966ca57bf4b9c192683912e72912a41 100644
--- a/nano.c
+++ b/nano.c
@@ -2838,6 +2838,9 @@ void do_toggle(const toggle *which)
     case TOGGLE_MAC_KEY:
 	UNSET(DOS_FILE);
 	break;
+    case TOGGLE_SYNTAX_KEY:
+	edit_refresh();
+ 	break;
     }
 
     /* We are assuming here that shortcut_init() above didn't free and
diff --git a/nano.h b/nano.h
index e16a941cda66be2d527e335db1909bca158fdfb3..3e38bc008ccebd75cb125aa19c57d72f85826be2 100644
--- a/nano.h
+++ b/nano.h
@@ -19,10 +19,6 @@
  *                                                                        *
  **************************************************************************/
 
-#ifdef HAVE_MALLOC_H
-#include <malloc.h>
-#endif
-
 #ifdef HAVE_LIMITS_H
 #include <limits.h>
 #endif
@@ -174,7 +170,6 @@ typedef struct syntaxtype {
     exttype *extensions;	/* List of extensions that this applies to */
     colortype *color;		/* color struct for this syntax */
     struct syntaxtype *next;
-
 } syntaxtype;
 
 #endif /* ENABLE_COLOR */
@@ -211,6 +206,7 @@ typedef struct syntaxtype {
 #define NO_CONVERT		(1<<26)
 #define BACKUP_FILE		(1<<27)
 #define NO_RCFILE		(1<<28)
+#define COLOR_SYNTAX		(1<<28)
 
 /* Control key sequences, changing these would be very very bad */
 
@@ -364,6 +360,7 @@ know what you're doing */
 #define TOGGLE_SMOOTH_KEY	NANO_ALT_S
 #define TOGGLE_NOCONVERT_KEY	NANO_ALT_N
 #define TOGGLE_BACKUP_KEY	NANO_ALT_B
+#define TOGGLE_SYNTAX_KEY	NANO_ALT_Y
 #endif /* !NANO_SMALL */
 
 #define MAIN_VISIBLE 12
diff --git a/rcfile.c b/rcfile.c
index 0f55f1167b981bc92efa8f6b228f66fced414b08..43594413d5d9585b10ec3e385ce848b388285d26 100644
--- a/rcfile.c
+++ b/rcfile.c
@@ -275,6 +275,7 @@ void parse_syntax(char *ptr)
     if (syntaxes == NULL) {
 	syntaxes = (syntaxtype *)nmalloc(sizeof(syntaxtype));
 	tmpsyntax = syntaxes;
+	SET(COLOR_SYNTAX);
     } else {
 	for (tmpsyntax = syntaxes; tmpsyntax->next != NULL;
 		tmpsyntax = tmpsyntax->next)
diff --git a/winio.c b/winio.c
index fb79153b615ceadaad9b191eebfd95ae9fe40f48..e09cdcd14d3f9fb034dc72796df422ebbdf8b720 100644
--- a/winio.c
+++ b/winio.c
@@ -614,7 +614,7 @@ void edit_add(const filestruct *fileptr, int yval, int start
     mvwaddnstr(edit, yval, 0, &fileptr->data[start], COLS);
 
 #ifdef ENABLE_COLOR
-    if (colorstrings != NULL) {
+    if (colorstrings != NULL && ISSET(COLOR_SYNTAX)) {
 	const colortype *tmpcolor = colorstrings;
 
 	for (; tmpcolor != NULL; tmpcolor = tmpcolor->next) {