diff --git a/src/d_main.c b/src/d_main.c
index 80907a013d9c6586c3b0d7cb828404e8d5214d67..274e4ceb366511fe9b9e9d77a792b51f4f51bbba 100644
--- a/src/d_main.c
+++ b/src/d_main.c
@@ -1614,6 +1614,9 @@ void D_SRB2Main(void)
 	if (D_CheckNetGame())
 		autostart = true;
 
+	if (!dedicated)
+		pickedchar = R_SkinAvailable(cv_defaultskin.string);
+
 	// check for a driver that wants intermission stats
 	// start the apropriate game based on parms
 	if (M_CheckParm("-metal"))
@@ -1627,8 +1630,6 @@ 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/g_demo.c b/src/g_demo.c
index cb168dfd97ceed20b9eedd193f5406dd2fc7c361..632947291674d54690ea9fa2191860f755f3719d 100644
--- a/src/g_demo.c
+++ b/src/g_demo.c
@@ -1492,8 +1492,12 @@ void G_BeginRecording(void)
 	demo_p += 16;
 
 	// Skin
-	for (i = 0; i < 16 && cv_skin.string[i]; i++)
-		name[i] = cv_skin.string[i];
+	const char *skinname = cv_skin.string;
+	if (pickedchar >= 0 && pickedchar < numskins)
+		skinname = skins[pickedchar].name;
+
+	for (i = 0; i < 16 && skinname[i]; i++)
+		name[i] = skinname[i];
 	for (; i < 16; i++)
 		name[i] = '\0';
 	M_Memcpy(demo_p,name,16);
diff --git a/src/m_menu.c b/src/m_menu.c
index 629f53d2460f70b00da78e0d1a31a6ce71892373..e2866f32b936b374e040ce515f0450b448a46d78 100644
--- a/src/m_menu.c
+++ b/src/m_menu.c
@@ -10372,6 +10372,8 @@ static void M_ChooseNightsAttack(INT32 choice)
 	sprintf(gpath,"replay"PATHSEP"%s"PATHSEP"%s", timeattackfolder, G_BuildMapName(cv_nextmap.value));
 	snprintf(nameofdemo, sizeof nameofdemo, "%s-%s-last", gpath, skins[cv_chooseskin.value-1].name);
 
+	pickedchar = cv_chooseskin.value-1;
+
 	if (!cv_autorecord.value)
 		remove(va("%s"PATHSEP"%s.lmp", srb2home, nameofdemo));
 	else
@@ -10401,6 +10403,8 @@ static void M_ChooseTimeAttack(INT32 choice)
 	sprintf(gpath,"replay"PATHSEP"%s"PATHSEP"%s", timeattackfolder, G_BuildMapName(cv_nextmap.value));
 	snprintf(nameofdemo, sizeof nameofdemo, "%s-%s-last", gpath, skins[cv_chooseskin.value-1].name);
 
+	pickedchar = cv_chooseskin.value-1;
+
 	if (!cv_autorecord.value)
 		remove(va("%s"PATHSEP"%s.lmp", srb2home, nameofdemo));
 	else