Index: code/fred2/shipflagsdlg.cpp
===================================================================
--- code/fred2/shipflagsdlg.cpp	(revision 9405)
+++ code/fred2/shipflagsdlg.cpp	(working copy)
@@ -419,7 +419,20 @@
 	object *objp = &Objects[shipp->objnum];
 
 	if (m_reinforcement.GetCheck() != 2)
-		set_reinforcement(shipp->ship_name, m_reinforcement.GetCheck());
+	{
+		//Check if we're trying to add more and we've got too many.
+		if( (Num_reinforcements >= MAX_REINFORCEMENTS) && (m_reinforcement.GetCheck() == 1))
+		{
+			char error_message[256];
+			sprintf(error_message, "Too many reinforcements; could not add ship '%s' to reinforcement list!", shipp->ship_name); 
+			MessageBox(error_message);
+		}
+		//Otherwise, just update as normal.
+		else
+		{
+			set_reinforcement(shipp->ship_name, m_reinforcement.GetCheck());	
+		}
+	}
 
 	switch (m_cargo_known.GetCheck()) {
 		case 1:
Index: code/fred2/wing_editor.cpp
===================================================================
--- code/fred2/wing_editor.cpp	(revision 9405)
+++ code/fred2/wing_editor.cpp	(working copy)
@@ -701,7 +701,28 @@
 			Update_window = 1;
 		}
 
-		if (set_reinforcement(str, m_reinforcement) == 1) {
+		//Check if we're trying to add more and we've got too many.
+		if( (Num_reinforcements >= MAX_REINFORCEMENTS) && (m_reinforcement == 1))
+		{
+			if (bypass_errors)
+				return 1;
+
+			bypass_errors = 1;
+
+			char error_message[256];
+			sprintf(error_message, "Too many reinforcements; could not add wing '%s' to reinforcement list!", str); 
+			MessageBox(error_message, "Error", MB_ICONEXCLAMATION | MB_OK);
+
+			//clear the flag
+			m_reinforcement = 0;
+			UpdateData(FALSE);
+
+			return -1;
+
+		}
+		//Otherwise, just update as normal.
+		else if (set_reinforcement(str, m_reinforcement) == 1) 
+		{
 			free_sexp2(Wings[cur_wing].arrival_cue);
 			Wings[cur_wing].arrival_cue = Locked_sexp_false;
 		}
