diff --git a/src/d_netcmd.c b/src/d_netcmd.c
index df01838fc9f076e49512c0bca2c12ed366d4f838..38b7feadf05d0c37ebec5ff00fe6480b2b9981e6 100644
--- a/src/d_netcmd.c
+++ b/src/d_netcmd.c
@@ -479,6 +479,7 @@ boolean circuitmap = true; // SRB2kart
 INT32 adminplayers[MAXPLAYERS];
 
 boolean alreadyresetdownloads;
+boolean alreadydunced;
 
 /// \warning Keep this up-to-date if you add/remove/rename net text commands
 const char *netxcmdnames[MAXNETXCMD - 1] =
diff --git a/src/doomstat.h b/src/doomstat.h
index a322c48c039ee515a0296d80399e03820a4f9d99..4f742d7abaa218fa0cbadd42659b4cc32f5bd4d2 100644
--- a/src/doomstat.h
+++ b/src/doomstat.h
@@ -554,6 +554,7 @@ extern INT32 serverplayer;
 extern INT32 adminplayers[MAXPLAYERS];
 
 extern boolean alreadyresetdownloads;
+extern boolean alreadydunced;
 
 /// \note put these in d_clisrv outright?
 
diff --git a/src/g_game.c b/src/g_game.c
index f10558fde1c015eeb64b45cbf3868907ea8c8d37..1ac418bfbdf35d4eba3918d7739130f9550939c0 100644
--- a/src/g_game.c
+++ b/src/g_game.c
@@ -4665,7 +4665,10 @@ void G_InitNew(UINT8 pencoremode, const char *mapname, boolean resetplayer, bool
 	imcontinuing = false;
 
 	if (server)
+	{
 		alreadyresetdownloads = false;
+		alreadydunced         = false;
+	}
 
 	if (!skipprecutscene && mapheaderinfo[gamemap-1]->precutscenenum && !modeattacking) // Start a custom cutscene.
 		F_StartCustomCutscene(mapheaderinfo[gamemap-1]->precutscenenum-1, true, resetplayer);
diff --git a/src/hu_stuff.c b/src/hu_stuff.c
index 215fa983fb6a288d9ab923e38980aa205d2f46bd..96947ce447169eedca605eb7b29751fc0e59f1c5 100644
--- a/src/hu_stuff.c
+++ b/src/hu_stuff.c
@@ -1008,9 +1008,13 @@ static void Got_Saycmd(UINT8 **p, INT32 playernum)
 						{
 							if (no == 0)
 							{
-								D_CSay(va(
-											"%s\\is an idiot and is dumb",
-											player_names[playernum]));
+								if (! alreadydunced)
+								{
+									D_CSay(va(
+												"%s\\is an idiot and is dumb",
+												player_names[playernum]));
+									alreadydunced = true;/* this could get annoying */
+								}
 							}
 							else
 								D_StartVote(VOTE_KICK, no, playernum);