Index: code/mission/missionbriefcommon.cpp
===================================================================
--- code/mission/missionbriefcommon.cpp	(revision 10838)
+++ code/mission/missionbriefcommon.cpp	(working copy)
@@ -136,6 +136,8 @@
 
 const char BRIEF_META_CHAR = '$';
 
+const int HIGHEST_COLOR_STACK_INDEX = 9;
+
 // camera related
 static vec3d	Current_cam_pos;		// current camera position
 static vec3d	Target_cam_pos;		// desired camera position
@@ -1556,23 +1558,19 @@
  *
  * @param src a not null pointer to a C string terminated by a /0 char.
  * @param instance index into Colored_stream where the result should be placed. Value is 0 unless multiple text streams are required.
+ * @param[in,out] default_color_stack pointer to an array containing a stack of default colors (for color spans)
+ * @param[in,out] color_stack_index pointer to the current index in the above stack
  * @return number of character of the resulting sequence.
  */
-int brief_text_colorize(char *src, int instance)
+int brief_text_colorize(char *src, int instance, ubyte default_color_stack[], int &color_stack_index)
 {
 	Assert(src);
 	Assert((0 <= instance) && (instance < (int)(sizeof(Colored_stream) / sizeof(*Colored_stream))));
 
-	// manage different default colors (don't use a SCP_ stack because eh)
-	const int HIGHEST_COLOR_STACK_INDEX = 9;
-	ubyte default_color_stack[10];
-	int color_stack_index = 0;
-
 	briefing_line dest_line;	//the resulting vector of colored character
 	ubyte active_color_index;	//the current drawing color
 
-	// start off with white
-	default_color_stack[0] = active_color_index = BRIEF_TEXT_WHITE;
+	active_color_index = default_color_stack[color_stack_index];
 
 	int src_len = strlen(src);
 	for (int i = 0; i < src_len; i++)
@@ -1652,6 +1650,13 @@
 	SCP_vector<const char*> p_str;
 	char brief_line[MAX_BRIEF_LINE_LEN];
 
+	// manage different default colors (don't use a SCP_ stack because eh)
+	ubyte default_color_stack[HIGHEST_COLOR_STACK_INDEX + 1];
+	int color_stack_index = 0;
+
+	// start off with white
+	default_color_stack[0] = BRIEF_TEXT_WHITE;
+
 	Assert(src != NULL);
 	n_lines = split_str(src, w, n_chars, p_str, BRIEF_META_CHAR);
 	Assert(n_lines >= 0);
@@ -1668,7 +1673,7 @@
 		strncpy(brief_line, p_str[i], n_chars[i]);
 		brief_line[n_chars[i]] = 0;
 		drop_leading_white_space(brief_line);
-		len = brief_text_colorize(&brief_line[0], instance);
+		len = brief_text_colorize(&brief_line[0], instance, default_color_stack, color_stack_index);
 		if (len > Max_briefing_line_len)
 			Max_briefing_line_len = len;
 	}
