diff --git a/src/d_net.cpp b/src/d_net.cpp
index ff70fdbf9..b3e70d410 100644
--- a/src/d_net.cpp
+++ b/src/d_net.cpp
@@ -185,7 +185,7 @@ static struct TicSpecial
 	size_t used[BACKUPTICS];
 	BYTE *streamptr;
 	size_t streamoffs;
-	int   specialsize;
+	size_t specialsize;
 	int	  lastmaketic;
 	bool  okay;
 
@@ -224,11 +224,11 @@ static struct TicSpecial
 	}
 
 	// Make more room for special commands.
-	void GetMoreSpace ()
+	void GetMoreSpace (size_t needed)
 	{
 		int i;
 
-		specialsize <<= 1;
+		specialsize = MAX(specialsize * 2, needed + 30);
 
 		DPrintf ("Expanding special size to %d\n", specialsize);
 
@@ -240,8 +240,8 @@ static struct TicSpecial
 
 	void CheckSpace (size_t needed)
 	{
-		if (streamoffs >= specialsize - needed)
-			GetMoreSpace ();
+		if (streamoffs + needed >= specialsize)
+			GetMoreSpace (streamoffs + needed);
 
 		streamoffs += needed;
 	}