diff --git a/src/d_netcmd.c b/src/d_netcmd.c
index 8552e51aef702150b4dc74d044646b2b3e9f8430..21008cbcf6ca900c46306cff915c7132b656333c 100644
--- a/src/d_netcmd.c
+++ b/src/d_netcmd.c
@@ -4002,7 +4002,7 @@ static void Command_Archivetest_f(void)
   */
 static void ForceSkin_OnChange(void)
 {
-	if ((server || adminplayer == consoleplayer) && (cv_forceskin.value < -1 || cv_forceskin.value >= numskins || !R_SkinUnlock(cv_forceskin.value)))
+	if ((server || adminplayer == consoleplayer) && (cv_forceskin.value < -1 || cv_forceskin.value >= numskins || !(dedicated || R_SkinUnlock(cv_forceskin.value)))) // Dedicated servers have everything when it comes to forceskin because they have no gamedata.
 	{
 		if (cv_forceskin.value == -2)
 			CV_SetValue(&cv_forceskin, numskins-1);
diff --git a/src/r_things.c b/src/r_things.c
index ba76dc5cee8bb0f12832c1e131e3adf52cc72f8c..4198ce99ba3a211f70a2fc2d1cbf922c236c875b 100644
--- a/src/r_things.c
+++ b/src/r_things.c
@@ -2434,6 +2434,8 @@ void SetPlayerSkinByNum(INT32 playernum, INT32 skinnum)
 			P_SetScale(player->mo, player->mo->scale);
 		return;
 	}
+	else if !R_SkinUnlock(skinnum) // Sneaky sneaky.
+		skinnum = -1;
 
 	if (P_IsLocalPlayer(player))
 		CONS_Alert(CONS_WARNING, M_GetText("Skin %d not found\n"), skinnum);