diff --git a/src/d_main.c b/src/d_main.c
index 22a6762554663a182f473efc2c7354ef824feee6..5c6db2e299c03e88ac8d790caf260399e56aaaf4 100644
--- a/src/d_main.c
+++ b/src/d_main.c
@@ -981,6 +981,7 @@ void D_StartTitle(void)
 	emeralds = 0;
 	memset(&luabanks, 0, sizeof(luabanks));
 	lastmaploaded = 0;
+	pickedchar = R_SkinAvailable(cv_defaultskin.string);
 
 	// In case someone exits out at the same time they start a time attack run,
 	// reset modeattacking
@@ -1626,6 +1627,8 @@ void D_SRB2Main(void)
 		autostart = true;
 	}
 
+	pickedchar = R_SkinAvailable(cv_defaultskin.string);
+
 	// user settings come before "+" parameters.
 	if (dedicated)
 		COM_ImmedExecute(va("exec \"%s"PATHSEP"adedserv.cfg\"\n", srb2home));
diff --git a/src/d_netcmd.c b/src/d_netcmd.c
index 9ad0b0ab0832452d57ed3870cd09c442e569b84b..8fdb73af4be7b96a144e7d1ffd444e5c7d99ee0c 100644
--- a/src/d_netcmd.c
+++ b/src/d_netcmd.c
@@ -1230,17 +1230,13 @@ static void SetSkinLocal(INT32 skinnum)
 	{
 		// Starring Metal Sonic as themselves, obviously.
 		SetPlayerSkinByNum(consoleplayer, 5);
+		return;
 	}
-	else if (splitscreen)
-	{
-		INT32 foundskin = R_SkinAvailable(cv_skin.string);
-		if (foundskin != -1 && R_SkinUsable(consoleplayer, foundskin))
-			SetPlayerSkinByNum(consoleplayer, foundskin);
-		else
-			SetPlayerSkinByNum(consoleplayer, GetPlayerDefaultSkin(consoleplayer));
-	}
-	else
+
+	if (skinnum != -1 && R_SkinUsable(consoleplayer, skinnum))
 		SetPlayerSkinByNum(consoleplayer, skinnum);
+	else
+		SetPlayerSkinByNum(consoleplayer, GetPlayerDefaultSkin(consoleplayer));
 }
 
 static void SetColorLocal(void)
@@ -1294,7 +1290,11 @@ static void SendNameAndColor(void)
 		strcpy(player_names[consoleplayer], cv_playername.zstring);
 
 		SetColorLocal();
-		SetSkinLocal(pickedchar);
+
+		if (splitscreen)
+			SetSkinLocal(R_SkinAvailable(cv_skin.string));
+		else
+			SetSkinLocal(pickedchar);
 		return;
 	}