diff --git a/src/d_clisrv.c b/src/d_clisrv.c
index fff35144bbeb570645b67b8090f488e0c1fea764..073d27606110b21f724da45489a3bd5105435d35 100644
--- a/src/d_clisrv.c
+++ b/src/d_clisrv.c
@@ -3986,7 +3986,7 @@ void D_QuitNetGame(void)
 			if (nodeingame[i])
 				HSendPacket(i, true, 0, 0);
 #ifdef MASTERSERVER
-		if (serverrunning && cv_advertise.value)
+		if (serverrunning && netgame && cv_advertise.value) // see mserv.c Online()
 			UnregisterServer();
 #endif
 	}
diff --git a/src/m_menu.c b/src/m_menu.c
index 0dc908fc5f73edb03c8b044bb47fa6fb67dd5c17..4db95870377c658d2df1d5e0b08002c903aa9c78 100644
--- a/src/m_menu.c
+++ b/src/m_menu.c
@@ -6356,7 +6356,7 @@ boolean firstDismissedRulesThisBoot = true;
 void M_PopupMasterServerRules(void)
 {
 #ifdef MASTERSERVER
-	if (cv_advertise.value && (serverrunning || currentMenu == &MP_ServerDef) && firstDismissedRulesThisBoot)
+	if (cv_advertise.value && ((serverrunning && netgame) || currentMenu == &MP_ServerDef) && firstDismissedRulesThisBoot)
 	{
 		char *rules = GetMasterServerRules();
 
diff --git a/src/mserv.c b/src/mserv.c
index cf0a5f0d050388af70dcc23e3e9cdfedc7453448..5c33cfe88e9351ea1e8d83b63623714143e9e7a3 100644
--- a/src/mserv.c
+++ b/src/mserv.c
@@ -470,7 +470,7 @@ char *GetMasterServerRules(void)
 static boolean
 Online (void)
 {
-	return ( serverrunning && cv_advertise.value );
+	return ( serverrunning && netgame && cv_advertise.value );
 }
 
 static inline void SendPingToMasterServer(void)
@@ -568,7 +568,7 @@ Advertise_OnChange(void)
 
 	if (cv_advertise.value)
 	{
-		if (serverrunning)
+		if (serverrunning && netgame)
 		{
 			Lock_state();
 			{