diff --git a/src/p_mobj.c b/src/p_mobj.c
index 5bf4323c344ab149d604ee37ab7ccdbf74931929..48d5474e9f053ac3d9df042a55f2d23d5184bf80 100644
--- a/src/p_mobj.c
+++ b/src/p_mobj.c
@@ -10049,19 +10049,6 @@ mobj_t *P_SpawnMobj(fixed_t x, fixed_t y, fixed_t z, mobjtype_t type)
 			P_SetTarget(&mobj->tracer, P_SpawnMobjFromMobj(mobj, 0, 0, 0, MT_MINECARTENDSOLID));
 			mobj->tracer->angle = mobj->angle + ANGLE_90;
 			break;
-		case MT_BIGFERN:
-			{
-				UINT8 i;
-				for (i = 0; i < 8; i++)
-				{
-					UINT8 j = (i + 2) % 8;
-					fixed_t xoffs = (j % 4) ? FRACUNIT : 0;
-					fixed_t yoffs = (i % 4) ? FRACUNIT : 0;
-					mobj_t *leaf = P_SpawnMobjFromMobj(mobj, (j > 3) ? -xoffs : xoffs, (i > 3) ? -yoffs : yoffs, 0, MT_BIGFERNLEAF);
-					leaf->angle = (angle_t)i * ANGLE_45;
-				}
-				break;
-			}
 		case MT_TORCHFLOWER:
 			{
 				mobj_t *fire = P_SpawnMobjFromMobj(mobj, 0, 0, 46*FRACUNIT, MT_FLAME);
@@ -12101,6 +12088,21 @@ ML_EFFECT5 : Don't stop thinking when too far away
 			S_StartSound(mobj, sfx_s3kd3l);
 		}
 		break;
+	case MT_BIGFERN:
+	{
+		angle_t angle = FixedAngle((mthing->angle % 45) << FRACBITS);
+		UINT8 i;
+		for (i = 0; i < 8; i++)
+		{
+			UINT8 j = (i + 2) % 8;
+			fixed_t xoffs = (j % 4) ? FRACUNIT : 0;
+			fixed_t yoffs = (i % 4) ? FRACUNIT : 0;
+			mobj_t *leaf = P_SpawnMobjFromMobj(mobj, (j > 3) ? -xoffs : xoffs, (i > 3) ? -yoffs : yoffs, 0, MT_BIGFERNLEAF);
+			leaf->angle = angle;
+			angle += ANGLE_45;
+		}
+		break;
+	}
 	default:
 		break;
 	}