diff --git a/src/p_inter.c b/src/p_inter.c
index 9412bad06d6bf08f72ce4d9e3ee3bdccb3ff35e3..dd3e0f9c27fc41657841c22e24d20391d9e94b74 100644
--- a/src/p_inter.c
+++ b/src/p_inter.c
@@ -3882,7 +3882,8 @@ void P_PlayerRingBurst(player_t *player, INT32 num_rings)
 			if (i & 1)
 				P_SetObjectMomZ(mo, ns, true);
 		}
-		if (player->mo->eflags & MFE_VERTICALFLIP) {
+		if (player->mo->eflags & MFE_VERTICALFLIP)
+		{
 			mo->momz *= -1;
 			mo->flags2 |= MF2_OBJECTFLIP;
 		}
@@ -4268,12 +4269,15 @@ void P_PlayerEmeraldBurst(player_t *player, boolean toss)
 
 			mo->momx = momx;
 			mo->momy = momy;
-			
-			if (player->mo->eflags & MFE_VERTICALFLIP)
-				mo->flags2 |= MF2_OBJECTFLIP;
 
 			P_SetObjectMomZ(mo, 3*FRACUNIT, false);
 
+			if (player->mo->eflags & MFE_VERTICALFLIP)
+			{
+				mo->momz = -mo->momz;
+				mo->flags2 |= MF2_OBJECTFLIP;
+			}
+
 			if (toss)
 				player->tossdelay = 2*TICRATE;
 		}
@@ -4300,7 +4304,8 @@ void P_PlayerFlagBurst(player_t *player, boolean toss)
 
 	flag = P_SpawnMobj(player->mo->x, player->mo->y, player->mo->z, type);
 
-	if (player->mo->eflags & MFE_VERTICALFLIP) {
+	if (player->mo->eflags & MFE_VERTICALFLIP)
+	{
 		flag->z += player->mo->height - flag->height;
 		flag->flags2 |= MF2_OBJECTFLIP;
 	}