diff --git a/src/d_clisrv.c b/src/d_clisrv.c
index 696e5d0dc5a65186ae196ee1d13f2fd1744a5c22..ed183b1c3bd723547790cebd9855f71fef5c4f32 100644
--- a/src/d_clisrv.c
+++ b/src/d_clisrv.c
@@ -481,11 +481,7 @@ static boolean CL_SendJoin(void)
 		return true;
 	}
 	if (server) // no need to ask yourself if you can join!
-	{
-		cl_mode = cl_connected;
-		M_StartControlPanel();
-		M_SetupNetgameChoosePlayer();
-	}
+		return true;
 	else
 		Net_SendJoin();
 	return true;
diff --git a/src/d_enet.c b/src/d_enet.c
index a54af38589669df89b43d0b34232557587593e50..4b3b5ad57e866f55420d65a15f8a0b3f27d3b121 100644
--- a/src/d_enet.c
+++ b/src/d_enet.c
@@ -95,8 +95,6 @@ static void ClientHandlePacket(UINT8 node, DataWrap data)
 		INT16 mapnum = data->ReadINT16(data);
 		gametype = data->ReadINT16(data);
 		G_InitNew(false, G_BuildMapName(mapnum), true, true);
-		M_StartControlPanel();
-		M_SetupNetgameChoosePlayer();
 		break;
 	}
 	default:
diff --git a/src/d_netcmd.c b/src/d_netcmd.c
index 3d2c60f7ea6502c144d3eda346840ede1982fa77..1e37799593b923b05394b3baf89ab37b425967af 100644
--- a/src/d_netcmd.c
+++ b/src/d_netcmd.c
@@ -1774,6 +1774,12 @@ static void Got_Mapcmd(UINT8 **cp, INT32 playernum)
 	if (demorecording) // Okay, level loaded, character spawned and skinned,
 		G_BeginRecording(); // I AM NOW READY TO RECORD.
 	demo_start = true;
+
+	if (netgame && !addedtogame)
+	{
+		M_StartControlPanel();
+		M_SetupNetgameChoosePlayer();
+	}
 }
 
 static void Command_Pause(void)
diff --git a/src/m_menu.c b/src/m_menu.c
index 904a8c8dc6cdcf19d2fc72d06a4f653bbe81964d..f9f97b1dd7fea095815823f6a38cc8b4d3bd4fcc 100644
--- a/src/m_menu.c
+++ b/src/m_menu.c
@@ -5032,7 +5032,6 @@ void M_SetupNetgameChoosePlayer(void)
 		return;
 	}
 
-	S_StopMusic();
 	S_ChangeMusic(mus_chrsel, true);
 
 	M_SetupNextMenu(&MP_PlayerDef);