Index: tintin++-2.01.5/src/buffer.c
===================================================================
--- tintin++-2.01.5.orig/src/buffer.c
+++ tintin++-2.01.5/src/buffer.c
@@ -103,7 +103,7 @@ void add_line_buffer(struct session *ses
 
 	if (more_output == TRUE)
 	{
-		if (strlen(ses->more_output) < BUFFER_SIZE / 2)
+		if (strlen(ses->more_output) < BUFFER_SIZE / 3)
 		{
 			strcat(ses->more_output, line);
 
Index: tintin++-2.01.5/src/net.c
===================================================================
--- tintin++-2.01.5.orig/src/net.c
+++ tintin++-2.01.5/src/net.c
@@ -278,7 +278,7 @@ int read_buffer_mud(struct session *ses)
 void readmud(struct session *ses)
 {
 	char *line, *next_line;
-	char linebuf[STRING_SIZE];
+	char linebuf[BUFFER_SIZE];
 
 	push_call("readmud(%p)", ses);
 
@@ -305,23 +305,39 @@ void readmud(struct session *ses)
 
 		if (next_line)
 		{
-			*next_line = 0;
-			next_line++;
+			if (next_line - line >= BUFFER_SIZE / 3)
+			{
+				// This is not ideal, but being a rare case it'll suffice for now
+
+				next_line = &line[BUFFER_SIZE / 3];
+			}
+			*next_line++ = 0;
 		}
-		else if (*line == 0)
+		else
 		{
-			break;
-		}
+			if (*line == 0)
+			{
+				break;
+			}
 
-		if (next_line == NULL && strlen(ses->more_output) < BUFFER_SIZE / 2)
-		{
-			if (!HAS_BIT(gtd->ses->telopts, TELOPT_FLAG_PROMPT))
+			if (strlen(line) > BUFFER_SIZE / 3)
+			{
+				next_line = &line[BUFFER_SIZE / 3];
+
+				*next_line++ = 0;
+			}
+
+			if (strlen(ses->more_output) < BUFFER_SIZE / 3)
 			{
-				if (gts->check_output)
+				if (!HAS_BIT(gtd->ses->telopts, TELOPT_FLAG_PROMPT))
 				{
-					strcat(ses->more_output, line);
-					ses->check_output = utime() + gts->check_output;
-					break;
+					if (gts->check_output)
+					{
+						strcat(ses->more_output, line);
+						ses->check_output = utime() + gts->check_output;
+
+						break;
+					}
 				}
 			}
 		}
@@ -330,7 +346,8 @@ void readmud(struct session *ses)
 		{
 			if (ses->check_output)
 			{
-				sprintf(linebuf, "%s%s", ses->more_output, line);
+				strcat(ses->more_output, line);
+				strcpy(linebuf, ses->more_output);
 
 				ses->more_output[0] = 0;
 			}
Index: tintin++-2.01.5/src/tintin.h
===================================================================
--- tintin++-2.01.5.orig/src/tintin.h
+++ tintin++-2.01.5/src/tintin.h
@@ -702,7 +702,7 @@ struct session
 	int                     read_max;
 	long long               connect_retry;
 	int                     connect_error;
-	char                    more_output[BUFFER_SIZE * 2];
+	char                    more_output[BUFFER_SIZE];
 	char                    color[100];
 	long long               check_output;
 	int                     auto_tab;
