diff --git a/src/hardware/hw_md2.c b/src/hardware/hw_md2.c
index 7ccf3788d..15f1eb488 100644
--- a/src/hardware/hw_md2.c
+++ b/src/hardware/hw_md2.c
@@ -1541,7 +1541,7 @@ boolean HWR_DrawModel(gl_vissprite_t *spr)
 #endif
 			if (!mod)
 				mod = 1;
-			frame = spr2frames->frames[frame%mod];
+			frame = spr2frames->frames[frame % mod];
 		}
 		else
 		{
diff --git a/src/p_mobj.c b/src/p_mobj.c
index a9a6b18b3..73fd5bfac 100644
--- a/src/p_mobj.c
+++ b/src/p_mobj.c
@@ -395,30 +395,24 @@ boolean P_SetPlayerMobjState(mobj_t *mobj, statenum_t state)
 			UINT16 frame = (mobj->frame & FF_FRAMEMASK)+1;
 			UINT8 numframes;
 			UINT16 spr2;
-			boolean is_super = P_IsStateSprite2Super(st);
 
 			if (skin)
 			{
-				// Add/Remove SPR2F_SUPER based on certain conditions
-				if (player->charflags & SF_NOSUPERSPRITES)
-					is_super = false;
-				else if (player->powers[pw_super])
-					is_super = true;
-
-				if (is_super)
-				{
-					if (mobj->eflags & MFE_FORCENOSUPER)
-						is_super = false;
-				}
-				else if (mobj->eflags & MFE_FORCESUPER)
-					is_super = true;
-
 				spr2 = P_GetStateSprite2(st);
 
-				if (is_super)
-					spr2 |= SPR2F_SUPER;
-				else
+				// Add/Remove SPR2F_SUPER based on certain conditions
+				if (player->charflags & SF_NOSUPERSPRITES)
 					spr2 &= ~SPR2F_SUPER;
+				else if (player->powers[pw_super])
+					spr2 |= SPR2F_SUPER;
+
+				if (spr2 & SPR2F_SUPER)
+				{
+					if (mobj->eflags & MFE_FORCENOSUPER)
+						spr2 &= ~SPR2F_SUPER;
+				}
+				else if (mobj->eflags & MFE_FORCESUPER)
+					spr2 |= SPR2F_SUPER;
 
 				// Get the sprite2 and frame number
 				spr2 = P_GetSkinSprite2(skin, spr2, mobj->player);
@@ -558,25 +552,19 @@ boolean P_SetMobjState(mobj_t *mobj, statenum_t state)
 			UINT16 frame = (mobj->frame & FF_FRAMEMASK)+1;
 			UINT8 numframes;
 			UINT16 spr2;
-			boolean is_super = P_IsStateSprite2Super(st);
 
 			if (skin)
 			{
-				// Add/Remove SPR2F_SUPER based on certain conditions
-				if (is_super)
-				{
-					if (mobj->eflags & MFE_FORCENOSUPER)
-						is_super = false;
-				}
-				else if (mobj->eflags & MFE_FORCESUPER)
-					is_super = true;
-
 				spr2 = P_GetStateSprite2(st);
 
-				if (is_super)
+				// Add/Remove SPR2F_SUPER based on certain conditions
+				if (spr2 & SPR2F_SUPER)
+				{
+					if (mobj->eflags & MFE_FORCENOSUPER)
+						spr2 &= ~SPR2F_SUPER;
+				}
+				else if (mobj->eflags & MFE_FORCESUPER)
 					spr2 |= SPR2F_SUPER;
-				else
-					spr2 &= ~SPR2F_SUPER;
 
 				// Get the sprite2 and frame number
 				spr2 = P_GetSkinSprite2(skin, spr2, NULL);
diff --git a/src/r_skins.c b/src/r_skins.c
index 783d1e697..e32e8b8fd 100644
--- a/src/r_skins.c
+++ b/src/r_skins.c
@@ -46,8 +46,9 @@ UINT16 P_GetStateSprite2(state_t *state)
 		return state->sprite2;
 	else
 	{
-		boolean is_super = state->frame & FF_SPR2SUPER;
-		UINT16 frame = state->frame & (FF_FRAMEMASK | ~FF_SPR2SUPER);
+		UINT32 frame = state->frame & FF_FRAMEMASK;
+		boolean is_super = frame & FF_SPR2SUPER;
+		frame &= ~FF_SPR2SUPER;
 		if (is_super)
 			frame |= SPR2F_SUPER;
 		return frame;
@@ -588,10 +589,10 @@ static UINT16 W_CheckForPatchSkinMarkerInPwad(UINT16 wadid, UINT16 startlump)
 	return INT16_MAX; // not found
 }
 
-static void R_LoadSkinSprites(UINT16 wadnum, UINT16 *lump, UINT16 *lastlump, skin_t *skin, UINT8 start_spr2)
+static void R_LoadSkinSprites(UINT16 wadnum, UINT16 *lump, UINT16 *lastlump, skin_t *skin, UINT16 start_spr2)
 {
 	UINT16 newlastlump;
-	UINT8 sprite2;
+	UINT16 sprite2;
 
 	*lump += 1; // start after S_SKIN
 	*lastlump = W_CheckNumForNamePwad("S_END",wadnum,*lump); // stop at S_END