Index: code/fred2/fredview.cpp
===================================================================
--- code/fred2/fredview.cpp	(revision 5199)
+++ code/fred2/fredview.cpp	(working copy)
@@ -3850,9 +3850,11 @@
 	sprintf(buf2, "%s\n\nThis is an internal error.  Please let Jason\n"
 		"know about this so he can fix it.  Click cancel to debug.", buf);
 
-	if (MessageBox(buf2, "Internal Error", MB_OKCANCEL | MB_ICONEXCLAMATION) == IDCANCEL)
-		Int3();  // drop to debugger so the problem can be analyzed.
+	Error( LOCATION, buf2 );
 
+	//if (MessageBox(buf2, "Internal Error", MB_OKCANCEL | MB_ICONEXCLAMATION) == IDCANCEL)
+	//	Int3();  // drop to debugger so the problem can be analyzed.
+
 #else
 	MessageBox(buf, "Error", MB_OK | MB_ICONEXCLAMATION);
 #endif
Index: code/globalincs/windebug.cpp
===================================================================
--- code/globalincs/windebug.cpp	(revision 5199)
+++ code/globalincs/windebug.cpp	(working copy)
@@ -286,6 +286,7 @@
 
 int Global_warning_count = 0;
 int Global_error_count = 0;
+static const int maxMessageNewLines = 20;
 
 #ifdef _MSC_VER
 #include <crtdbg.h>
@@ -1201,7 +1202,28 @@
 	va_end(args);
 
 	filename = strrchr(filename, '\\')+1;
-	sprintf(AssertText2, "Error: %s\r\nFile: %s\r\nLine: %d\r\n", AssertText1, filename, line);
+
+	int newLineCount = 0;
+	/* On the occurrence of the maxMessageNewLines (th) newline, replace it with NULL */
+	int slen = strlen(AssertText1);
+	for ( int i = 0; i < slen; i++ )
+	{
+		if ( AssertText1[ i ] == '\n' )
+			newLineCount++;
+		
+		if ( newLineCount > maxMessageNewLines )
+		{
+			AssertText1[ i ] = NULL;
+			break;
+		}
+	}
+
+	if ( newLineCount > maxMessageNewLines )
+		sprintf(AssertText2, "Warning: %s\r\nFile: %s\r\nLine: %d\r\n[ Output has been truncated. See clipboard for full information ]", AssertText1, filename, line );
+	else
+		sprintf(AssertText2, "Warning: %s\r\nFile: %s\r\nLine: %d\r\n", AssertText1, filename, line );
+
+	//sprintf(AssertText2, "Error: %s\r\nFile: %s\r\nLine: %d\r\n", AssertText1, filename, line);
 	mprintf(("ERROR: %s\r\nFile: %s\r\nLine: %d\r\n", AssertText1, filename, line));
 
 	Messagebox_active = true;
@@ -1291,8 +1313,27 @@
 	}
 
 	filename = strrchr(filename, '\\')+1;
-	sprintf(AssertText2, "Warning: %s\r\nFile: %s\r\nLine: %d\r\n", AssertText1, filename, line );
 
+	int newLineCount = 0;
+	/* On the occurrence of the maxMessageNewLines (th) newline, replace it with NULL */
+	slen = strlen(AssertText1);
+	for ( int i = 0; i < slen; i++ )
+	{
+		if ( AssertText1[ i ] == '\n' )
+			newLineCount++;
+		
+		if ( newLineCount > maxMessageNewLines )
+		{
+			AssertText1[ i ] = NULL;
+			break;
+		}
+	}
+
+	if ( newLineCount > maxMessageNewLines )
+		sprintf(AssertText2, "Warning: %s\r\nFile: %s\r\nLine: %d\r\n[ Output has been truncated. See clipboard for full information ]", AssertText1, filename, line );
+	else
+		sprintf(AssertText2, "Warning: %s\r\nFile: %s\r\nLine: %d\r\n", AssertText1, filename, line );
+
 	Messagebox_active = true;
 
 	gr_activate(0);
