diff --git a/src/sbbs3/wordwrap.c b/src/sbbs3/wordwrap.c
index 62f4c8e5cbcd35b78d01f9ef416726d107a2f508..f096f928e081022e97848d756339ce59f0c81d50 100644
--- a/src/sbbs3/wordwrap.c
+++ b/src/sbbs3/wordwrap.c
@@ -272,6 +272,7 @@ struct paragraph {
 	struct prefix prefix;
 	char *text;
 	size_t alloc_size;
+	size_t len;
 };
 
 /*
@@ -296,18 +297,18 @@ static void free_paragraphs(struct paragraph *paragraph, int count)
  */
 static BOOL paragraph_append(struct paragraph *paragraph, const char *bytes, size_t count)
 {
-	size_t len = strlen(paragraph->text);
 	char *new_text;
 
-	while (len + count + 1 > paragraph->alloc_size) {
+	while (paragraph->len + count + 1 > paragraph->alloc_size) {
 		new_text = realloc(paragraph->text, paragraph->alloc_size * 2);
 		if (new_text == NULL)
 			return FALSE;
 		paragraph->text = new_text;
 		paragraph->alloc_size *= 2;
 	}
-	memcpy(paragraph->text + len, bytes, count);
-	paragraph->text[len+count] = 0;
+	memcpy(paragraph->text + paragraph->len, bytes, count);
+	paragraph->text[paragraph->len+count] = 0;
+	paragraph->len += count;
 	return TRUE;
 }
 
@@ -342,6 +343,7 @@ static struct paragraph *word_unwrap(char *inbuf, int oldlen, BOOL handle_quotes
 		}
 		ret = newret;
 		ret[paragraph].text = (char *)malloc(oldlen+1);
+		ret[paragraph].len = 0;
 		ret[paragraph].prefix.bytes = NULL;
 		if (ret[paragraph].text == NULL) {
 			free_paragraphs(ret, paragraph+1);