diff --git a/src/d_clisrv.c b/src/d_clisrv.c
index 1dc2c1420d29a5c9d62d31ae276ec8ce51c3ea34..213f5dde06ec0bd1d8005570ab89480482ba691e 100644
--- a/src/d_clisrv.c
+++ b/src/d_clisrv.c
@@ -1428,8 +1428,14 @@ static void SV_SendPlayerInfo(INT32 node)
 	UINT8 i;
 	netbuffer->packettype = PT_PLAYERINFO;
 
-	for (i = 0; i < MAXPLAYERS; i++)
+	for (i = 0; i < MSCOMPAT_MAXPLAYERS; i++)
 	{
+		if (i >= MAXPLAYERS)
+		{
+			netbuffer->u.playerinfo[i].node = 255;
+			continue;
+		}
+
 		if (!playeringame[i])
 		{
 			netbuffer->u.playerinfo[i].node = 255; // This slot is empty.
@@ -1477,7 +1483,7 @@ static void SV_SendPlayerInfo(INT32 node)
 			netbuffer->u.playerinfo[i].data |= 0x80;
 	}
 
-	HSendPacket(node, false, 0, sizeof(plrinfo) * MAXPLAYERS);
+	HSendPacket(node, false, 0, sizeof(plrinfo) * MSCOMPAT_MAXPLAYERS);
 }
 
 /** Sends a PT_SERVERCFG packet
diff --git a/src/d_clisrv.h b/src/d_clisrv.h
index e7879d58290a80126b6b1ee12e04d85e542da087..66d9e73ea4aa46f046b21f46c31f2b6f80a99df7 100644
--- a/src/d_clisrv.h
+++ b/src/d_clisrv.h
@@ -468,7 +468,7 @@ typedef struct
 		serverrefuse_pak serverrefuse;      //       65025 bytes (somehow I feel like those values are garbage...)
 		askinfo_pak askinfo;                //          61 bytes
 		msaskinfo_pak msaskinfo;            //          22 bytes
-		plrinfo playerinfo[MAXPLAYERS];     //         576 bytes(?)
+		plrinfo playerinfo[MSCOMPAT_MAXPLAYERS];//         576 bytes(?)
 		plrconfig playerconfig[MAXPLAYERS]; // (up to) 528 bytes(?)
 		INT32 filesneedednum;               //           4 bytes
 		filesneededconfig_pak filesneededcfg; //       ??? bytes
diff --git a/src/doomdef.h b/src/doomdef.h
index 4ab40853a13889d3d3a19025a9623a2753ec02f4..24b52e8d2e815f2da1e34dcee89f068aeaa62184 100644
--- a/src/doomdef.h
+++ b/src/doomdef.h
@@ -252,6 +252,9 @@ extern FILE *logstream;
 #define PLAYERSMASK (MAXPLAYERS-1)
 #define MAXPLAYERNAME 21
 
+// Master Server compatibility ONLY
+#define MSCOMPAT_MAXPLAYERS (32)
+
 typedef enum
 {
 	SKINCOLOR_NONE = 0,