diff --git a/src/p_mobj.c b/src/p_mobj.c
index 549d603272bd73c23e0c7e43c82e5dcad353447d..b841bae541d5e649eee736674068e29e1dcaada0 100644
--- a/src/p_mobj.c
+++ b/src/p_mobj.c
@@ -1440,7 +1440,7 @@ fixed_t P_GetMobjGravity(mobj_t *mo)
 
 	wasflip = (mo->eflags & MFE_VERTICALFLIP) != 0;
 
-	if (mo->type != MT_SPINFIRE)
+	if (mo->type != MT_SPINFIRE) // Prevent fire trails from disappearing in reverse gravity
 		mo->eflags &= ~MFE_VERTICALFLIP;
 
 	if (mo->subsector->sector->ffloors) // Check for 3D floor gravity too.
diff --git a/src/p_user.c b/src/p_user.c
index ddbf48206ea15de3ed8573e12d6dcfa3c36c67fe..0263fa1ab5c1806bbd25528c01bda2c597671827 100644
--- a/src/p_user.c
+++ b/src/p_user.c
@@ -7690,7 +7690,8 @@ void P_ElementalFire(player_t *player, boolean cropcircle)
 			flame->fuse = TICRATE*7; // takes about an extra second to hit the ground
 			flame->destscale = player->mo->scale;
 			P_SetScale(flame, player->mo->scale);
-			flame->flags2 = (flame->flags2 & ~MF2_OBJECTFLIP)|(player->mo->flags2 & MF2_OBJECTFLIP);
+			if (!(player->mo->flags2 & MF2_OBJECTFLIP) != !(player->powers[pw_gravityboots])) // take gravity boots into account
+				flame->flags2 |= MF2_OBJECTFLIP;
 			flame->eflags = (flame->eflags & ~MFE_VERTICALFLIP)|(player->mo->eflags & MFE_VERTICALFLIP);
 			P_InstaThrust(flame, flame->angle, FixedMul(3*FRACUNIT, flame->scale));
 			P_SetObjectMomZ(flame, 3*FRACUNIT, false);