diff --git a/ChangeLog b/ChangeLog
index 5562b65f47f5c8ded04a02104c0e2f79d9d06e39..ef74d0fdb9c2fb063733c9291f53bf89c93ca620 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -5,6 +5,8 @@
 	* src/nano.h: Delete a now-unused struct member.
 	* src/global.c (free_list_item): Elide this now too tiny function.
 	* scr/global.c (thanks_for_all_the_fish): Rename three variables.
+	* src/rcfile.c (parse_colors): Tweak a few things.
+	* src/color.c (color_update): Rename a variable.
 
 2016-03-01  Benno Schulenberg  <bensberg@justemail.net>
 	* src/rcfile.c (parse_syntax), src/color.c (color_update): Don't
diff --git a/src/color.c b/src/color.c
index e127e7bac823a7caeeba4db15228b3d7df60e83e..3026c2d695f7b6f0ffb156854b5b79094d085712 100644
--- a/src/color.c
+++ b/src/color.c
@@ -164,7 +164,7 @@ bool found_in_list(regexlisttype *head, const char *shibboleth)
 void color_update(void)
 {
     syntaxtype *sint;
-    colortype *tmpcolor;
+    colortype *ink;
 
     assert(openfile != NULL);
 
@@ -291,21 +291,19 @@ void color_update(void)
 	}
     }
 
-    for (tmpcolor = openfile->colorstrings; tmpcolor != NULL;
-	tmpcolor = tmpcolor->next) {
-	/* tmpcolor->start_regex and tmpcolor->end_regex have already
-	 * been checked for validity elsewhere.  Compile their specified
-	 * regexes if we haven't already. */
-	if (tmpcolor->start == NULL) {
-	    tmpcolor->start = (regex_t *)nmalloc(sizeof(regex_t));
-	    regcomp(tmpcolor->start, fixbounds(tmpcolor->start_regex),
-		REG_EXTENDED | (tmpcolor->icase ? REG_ICASE : 0));
+    /* If a syntax was found, compile its specified regexes, which have
+     * already been checked for validity when they were read in. */
+    for (ink = openfile->colorstrings; ink != NULL; ink = ink->next) {
+	if (ink->start == NULL) {
+	    ink->start = (regex_t *)nmalloc(sizeof(regex_t));
+	    regcomp(ink->start, fixbounds(ink->start_regex),
+			REG_EXTENDED | (ink->icase ? REG_ICASE : 0));
 	}
 
-	if (tmpcolor->end_regex != NULL && tmpcolor->end == NULL) {
-	    tmpcolor->end = (regex_t *)nmalloc(sizeof(regex_t));
-	    regcomp(tmpcolor->end, fixbounds(tmpcolor->end_regex),
-		REG_EXTENDED | (tmpcolor->icase ? REG_ICASE : 0));
+	if (ink->end_regex != NULL && ink->end == NULL) {
+	    ink->end = (regex_t *)nmalloc(sizeof(regex_t));
+	    regcomp(ink->end, fixbounds(ink->end_regex),
+			REG_EXTENDED | (ink->icase ? REG_ICASE : 0));
 	}
     }
 }
diff --git a/src/rcfile.c b/src/rcfile.c
index 8e1a62d568c6881d7ede80fb5a9d2602477d13db..e7dd76921d95cd2aea104e3b7d6ec24697f14dcf 100644
--- a/src/rcfile.c
+++ b/src/rcfile.c
@@ -711,18 +711,16 @@ void parse_colors(char *ptr, bool icase)
 	    continue;
 	}
 
-	ptr++;
-
-	fgstr = ptr;
+	fgstr = ++ptr;
 	ptr = parse_next_regex(ptr);
 	if (ptr == NULL)
 	    break;
 
-	newcolor = (colortype *)nmalloc(sizeof(colortype));
-
 	/* Save the starting regex string if it's valid, and set up the
 	 * color information. */
 	if (nregcomp(fgstr, icase ? REG_ICASE : 0)) {
+	    newcolor = (colortype *)nmalloc(sizeof(colortype));
+
 	    newcolor->fg = fg;
 	    newcolor->bg = bg;
 	    newcolor->bright = bright;
@@ -747,16 +745,14 @@ void parse_colors(char *ptr, bool icase)
 #endif
 		/* Need to recompute endcolor now so we can extend
 		 * colors to syntaxes. */
-		for (endcolor = endsyntax->color; endcolor->next != NULL; endcolor = endcolor->next)
-		    ;
+		for (endcolor = endsyntax->color; endcolor->next != NULL;)
+		    endcolor = endcolor->next;
 		endcolor->next = newcolor;
 	    }
 
 	    endcolor = newcolor;
-	} else {
-	    free(newcolor);
+	} else
 	    cancelled = TRUE;
-	}
 
 	if (expectend) {
 	    if (ptr == NULL || strncasecmp(ptr, "end=", 4) != 0) {
@@ -771,9 +767,7 @@ void parse_colors(char *ptr, bool icase)
 		continue;
 	    }
 
-	    ptr++;
-
-	    fgstr = ptr;
+	    fgstr = ++ptr;
 	    ptr = parse_next_regex(ptr);
 	    if (ptr == NULL)
 		break;
@@ -783,9 +777,9 @@ void parse_colors(char *ptr, bool icase)
 	    if (cancelled)
 		continue;
 
-	    /* Save the ending regex string if it's valid. */
-	    newcolor->end_regex = (nregcomp(fgstr, icase ? REG_ICASE :
-		0)) ? mallocstrcpy(NULL, fgstr) : NULL;
+	    /* If it's valid, save the ending regex string. */
+	    if (nregcomp(fgstr, icase ? REG_ICASE : 0))
+		newcolor->end_regex = mallocstrcpy(NULL, fgstr);
 
 	    /* Lame way to skip another static counter. */
 	    newcolor->id = endsyntax->nmultis;