diff --git a/src/netcode/d_clisrv.c b/src/netcode/d_clisrv.c
index d222920c3baf085ba800d8c80c66ad88fba58944..ac0b42d4929608a6abba326c37b4ed4061651c49 100644
--- a/src/netcode/d_clisrv.c
+++ b/src/netcode/d_clisrv.c
@@ -90,8 +90,8 @@ INT16 consistancy[BACKUPTICS];
 // true when a player is connecting or disconnecting so that the gameplay has stopped in its tracks
 boolean hu_stopped = false;
 
-UINT8 (*adminpassmd5)[16];
-UINT32 adminpasscount = 0;
+UINT8 adminpassmd5[16];
+boolean adminpasswordset = false;
 
 tic_t neededtic;
 SINT8 servernode = 0; // the number of the server node
@@ -862,31 +862,26 @@ static void PT_Login(SINT8 node, INT32 netconsole)
 
 #ifndef NOMD5
 	UINT8 finalmd5[16];/* Well, it's the cool thing to do? */
-	UINT32 i;
 
 	if (doomcom->datalength < 16)/* ignore partial sends */
 		return;
 
-	if (adminpasscount == 0)
+	if (!adminpasswordset)
 	{
 		CONS_Printf(M_GetText("Password from %s failed (no password set).\n"), player_names[netconsole]);
 		return;
 	}
 
-	for (i = 0; i < adminpasscount; i++)
-	{
-		// Do the final pass to compare with the sent md5
-		D_MD5PasswordPass(adminpassmd5[i], 16, va("PNUM%02d", netconsole), &finalmd5);
+	// Do the final pass to compare with the sent md5
+	D_MD5PasswordPass(adminpassmd5, 16, va("PNUM%02d", netconsole), &finalmd5);
 
-		if (!memcmp(netbuffer->u.md5sum, finalmd5, 16))
-		{
-			CONS_Printf(M_GetText("%s passed authentication.\n"), player_names[netconsole]);
-			COM_BufInsertText(va("promote %d\n", netconsole)); // do this immediately
-			return;
-		}
+	if (!memcmp(netbuffer->u.md5sum, finalmd5, 16))
+	{
+		CONS_Printf(M_GetText("%s passed authentication.\n"), player_names[netconsole]);
+		COM_BufInsertText(va("promote %d\n", netconsole)); // do this immediately
 	}
-
-	CONS_Printf(M_GetText("Password from %s failed.\n"), player_names[netconsole]);
+	else
+		CONS_Printf(M_GetText("Password from %s failed.\n"), player_names[netconsole]);
 #else
 	(void)netconsole;
 #endif
diff --git a/src/netcode/d_clisrv.h b/src/netcode/d_clisrv.h
index f9cbf8876833486c232e7f51bbf8ae699ba6bd96..092878421354f521181cae01991b978c028d85f9 100644
--- a/src/netcode/d_clisrv.h
+++ b/src/netcode/d_clisrv.h
@@ -128,8 +128,8 @@ tic_t GetLag(INT32 node);
 
 void D_MD5PasswordPass(const UINT8 *buffer, size_t len, const char *salt, void *dest);
 
-extern UINT8 (*adminpassmd5)[16];
-extern UINT32 adminpasscount;
+extern UINT8 adminpassmd5[16];
+extern boolean adminpasswordset;
 
 extern boolean hu_stopped;
 
diff --git a/src/netcode/d_netcmd.c b/src/netcode/d_netcmd.c
index ef1ef9aeb1971d1a63b41944e59c161d8e05f676..2b445a83575366692c10600e8c4e515be61492b5 100644
--- a/src/netcode/d_netcmd.c
+++ b/src/netcode/d_netcmd.c
@@ -150,7 +150,6 @@ static void Command_Clearscores_f(void);
 
 // Remote Administration
 static void Command_Changepassword_f(void);
-static void Command_Clearpassword_f(void);
 static void Command_Login_f(void);
 static void Got_Verification(UINT8 **cp, INT32 playernum);
 static void Got_Removal(UINT8 **cp, INT32 playernum);
@@ -469,7 +468,6 @@ void D_RegisterServerCommands(void)
 
 	// Remote Administration
 	COM_AddCommand("password", Command_Changepassword_f, COM_LUA);
-	COM_AddCommand("clearpassword", Command_Clearpassword_f, COM_LUA);
 	COM_AddCommand("login", Command_Login_f, COM_LUA); // useful in dedicated to kick off remote admin
 	COM_AddCommand("promote", Command_Verify_f, COM_LUA);
 	RegisterNetXCmd(XD_VERIFIED, Got_Verification);
@@ -2846,15 +2844,8 @@ static void Got_Teamchange(UINT8 **cp, INT32 playernum)
 
 void D_SetPassword(const char *pw)
 {
-	adminpassmd5 = Z_Realloc(adminpassmd5, sizeof(*adminpassmd5) * ++adminpasscount, PU_STATIC, NULL);
-	D_MD5PasswordPass((const UINT8 *)pw, strlen(pw), BASESALT, &adminpassmd5[adminpasscount-1]);
-}
-
-void D_ClearPassword(void)
-{
-	Z_Free(adminpassmd5);
-	adminpassmd5 = NULL;
-	adminpasscount = 0;
+	D_MD5PasswordPass((const UINT8 *)pw, strlen(pw), BASESALT, &adminpassmd5);
+	adminpasswordset = true;
 }
 
 // Remote Administration
@@ -2872,30 +2863,12 @@ static void Command_Changepassword_f(void)
 
 	if (COM_Argc() != 2)
 	{
-		CONS_Printf(M_GetText("password <password>: add remote admin password\n"));
+		CONS_Printf(M_GetText("password <password>: change remote admin password\n"));
 		return;
 	}
 
 	D_SetPassword(COM_Argv(1));
-	CONS_Printf(M_GetText("Password added.\n"));
-#endif
-}
-
-// Remote Administration
-static void Command_Clearpassword_f(void)
-{
-#ifdef NOMD5
-	// If we have no MD5 support then completely disable XD_LOGIN responses for security.
-	CONS_Alert(CONS_NOTICE, "Remote administration commands are not supported in this build.\n");
-#else
-	if (client) // cannot change remotely
-	{
-		CONS_Printf(M_GetText("Only the server can use this.\n"));
-		return;
-	}
-
-	D_ClearPassword();
-	CONS_Printf(M_GetText("Passwords cleared.\n"));
+	CONS_Printf(M_GetText("Password set.\n"));
 #endif
 }
 
diff --git a/src/netcode/d_netcmd.h b/src/netcode/d_netcmd.h
index 0f2a1f92ba93c95e16d95afd0cf179cf625c0b5c..4849079d0ce622ae6388dfdec9984686c963b614 100644
--- a/src/netcode/d_netcmd.h
+++ b/src/netcode/d_netcmd.h
@@ -209,7 +209,6 @@ void ClearAdminPlayers(void);
 void RemoveAdminPlayer(INT32 playernum);
 void ItemFinder_OnChange(void);
 void D_SetPassword(const char *pw);
-void D_ClearPassword(void);
 
 // used for the player setup menu
 UINT8 CanChangeSkin(INT32 playernum);