diff --git a/src/m_menu.c b/src/m_menu.c
index a64c3c70f7e934d62d514b7ed06a4dcd0246cda4..c09538f1a55a3bd9018f6c844647d5e1403bc955 100644
--- a/src/m_menu.c
+++ b/src/m_menu.c
@@ -7977,6 +7977,21 @@ static void M_SetupChoosePlayer(INT32 choice)
 
 	M_ChangeMenuMusic("_chsel", true);
 
+	/* the menus suck -James */
+	if (currentMenu == &SP_LoadDef)/* from save states */
+	{
+		SP_PlayerDef.menuid =
+			MN_SP_MAIN +
+			( MN_SP_LOAD   <<  6 ) +
+			( MN_SP_PLAYER << 12 );
+	}
+	else/* from Secret level select */
+	{
+		SP_PlayerDef.menuid =
+			MN_SR_MAIN +
+			( MN_SR_PLAYER <<  6 );
+	}
+
 	SP_PlayerDef.prevMenu = currentMenu;
 	M_SetupNextMenu(&SP_PlayerDef);
 	if (!allowed)
diff --git a/src/m_menu.h b/src/m_menu.h
index ba545771e6fdb17732b427f938ed90f33e74ac36..14b3e0902a2f011b567a7a1d811c8af796a0e226 100644
--- a/src/m_menu.h
+++ b/src/m_menu.h
@@ -104,6 +104,7 @@ typedef enum
 	MN_SR_LEVELSELECT,
 	MN_SR_UNLOCKCHECKLIST,
 	MN_SR_EMBLEMHINT,
+	MN_SR_PLAYER,
 
 	// Addons (Part of MISC, but let's make it our own)
 	MN_AD_MAIN,