diff --git a/src/d_clisrv.c b/src/d_clisrv.c
index c345d529082041cbcd1ff5fb236b296b74d5404a..36ced7f64e5a9cf9a7e6c0f71db8343189e32381 100644
--- a/src/d_clisrv.c
+++ b/src/d_clisrv.c
@@ -2297,6 +2297,7 @@ static boolean CL_ServerConnectionTicker(const char *tmpsave, tic_t *oldtic, tic
 		case CL_LOADFILES:
 			if (CL_LoadServerFiles())
 			{
+				FreeFileNeeded();
 				*asksent = 0; //This ensure the first join ask is right away
 				firstconnectattempttime = I_GetTime();
 				cl_mode = CL_ASKJOIN;
diff --git a/src/d_netfil.c b/src/d_netfil.c
index 6e9130f14342c25fbf5055e5cc3c34f839129cb8..5168fff9ad1215df458f3ff7a9f3d431dd04cea8 100644
--- a/src/d_netfil.c
+++ b/src/d_netfil.c
@@ -189,6 +189,8 @@ void AllocFileNeeded(INT32 size)
 {
 	if (fileneeded == NULL)
 		fileneeded = Z_Calloc(sizeof(fileneeded_t) * size, PU_STATIC, NULL);
+	else
+		fileneeded = Z_Realloc(fileneeded, sizeof(fileneeded_t) * size, PU_STATIC, NULL);
 }
 
 void FreeFileNeeded(void)
@@ -235,6 +237,7 @@ void CL_PrepareDownloadSaveGame(const char *tmpsave)
 	lastfilenum = -1;
 #endif
 
+	FreeFileNeeded();
 	AllocFileNeeded(1);
 
 	fileneedednum = 1;
@@ -728,6 +731,7 @@ void CL_PrepareDownloadLuaFile(void)
 	netbuffer->packettype = PT_ASKLUAFILE;
 	HSendPacket(servernode, true, 0, 0);
 
+	FreeFileNeeded();
 	AllocFileNeeded(1);
 
 	fileneedednum = 1;