diff --git a/src/r_patch.c b/src/r_patch.c
index 80c0f846fb097416b90bfddc88cd1410097819fe..4304f3eab65f71e0e5a1568c1f10f752ccb88bc0 100644
--- a/src/r_patch.c
+++ b/src/r_patch.c
@@ -1212,14 +1212,23 @@ void R_CacheRotSprite(spritenum_t sprnum, UINT8 frame, spriteinfo_t *sprinfo, sp
 		INT32 width, height, leftoffset;
 		fixed_t ca, sa;
 		lumpnum_t lump = sprframe->lumppat[rot];
+		size_t lumplength;
 
 		if (lump == LUMPERROR)
 			return;
+
+		patch = (patch_t *)W_CacheLumpNum(lump, PU_STATIC);
+		lumplength = W_LumpLength(lump);
+
+#ifndef NO_PNG_LUMPS
+		if (R_IsLumpPNG((UINT8 *)patch, lumplength))
+			patch = R_PNGToPatch((UINT8 *)patch, lumplength, NULL);
+		else
+#endif
 		// Because there's something wrong with SPR_DFLM, I guess
 		if (!R_CheckIfPatch(lump))
 			return;
 
-		patch = (patch_t *)W_CacheLumpNum(lump, PU_STATIC);
 		width = patch->width;
 		height = patch->height;
 		leftoffset = patch->leftoffset;