diff --git a/src/p_inter.c b/src/p_inter.c
index c230ce178ad5b388ca123cde1352e8771b80f8c5..9412bad06d6bf08f72ce4d9e3ee3bdccb3ff35e3 100644
--- a/src/p_inter.c
+++ b/src/p_inter.c
@@ -3882,8 +3882,10 @@ 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;
+		}
 	}
 
 	player->losstime += 10*TICRATE;
@@ -4107,6 +4109,8 @@ void P_PlayerWeaponPanelOrAmmoBurst(player_t *player)
 		P_SetObjectMomZ(mo, 4*FRACUNIT, false); \
 		if (i & 1) \
 			P_SetObjectMomZ(mo, 4*FRACUNIT, true); \
+		if (player->mo->eflags & MFE_VERTICALFLIP) \
+			mo->flags2 |= MF2_OBJECTFLIP; \
 		++i; \
 	} \
 	else if (player->powers[power] > 0) \
@@ -4126,6 +4130,8 @@ void P_PlayerWeaponPanelOrAmmoBurst(player_t *player)
 		P_SetObjectMomZ(mo, 3*FRACUNIT, false); \
 		if (i & 1) \
 			P_SetObjectMomZ(mo, 3*FRACUNIT, true); \
+		if (player->mo->eflags & MFE_VERTICALFLIP) \
+			mo->flags2 |= MF2_OBJECTFLIP; \
 		player->powers[power] = 0; \
 		++i; \
 	}
@@ -4262,12 +4268,12 @@ 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;
-
 			if (toss)
 				player->tossdelay = 2*TICRATE;
 		}
@@ -4294,8 +4300,10 @@ 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;
+	}
 
 	if (toss)
 		P_InstaThrust(flag, player->mo->angle, FixedMul(6*FRACUNIT, player->mo->scale));
diff --git a/src/p_mobj.c b/src/p_mobj.c
index a4f2147e56f7862eebee753ea1fe9f9ab807a4e6..549d603272bd73c23e0c7e43c82e5dcad353447d 100644
--- a/src/p_mobj.c
+++ b/src/p_mobj.c
@@ -1522,36 +1522,6 @@ fixed_t P_GetMobjGravity(mobj_t *mo)
 		{
 			switch (mo->type)
 			{
-				case MT_FLINGRING:
-				case MT_FLINGCOIN:
-				case MT_FLINGBLUESPHERE:
-				case MT_FLINGNIGHTSCHIP:
-				case MT_FLINGEMERALD:
-				case MT_BOUNCERING:
-				case MT_RAILRING:
-				case MT_INFINITYRING:
-				case MT_AUTOMATICRING:
-				case MT_EXPLOSIONRING:
-				case MT_SCATTERRING:
-				case MT_GRENADERING:
-				case MT_BOUNCEPICKUP:
-				case MT_RAILPICKUP:
-				case MT_AUTOPICKUP:
-				case MT_EXPLODEPICKUP:
-				case MT_SCATTERPICKUP:
-				case MT_GRENADEPICKUP:
-				case MT_REDFLAG:
-				case MT_BLUEFLAG:
-					if (mo->target)
-					{
-						// Flung items copy the gravity of their tosser.
-						if ((mo->target->eflags & MFE_VERTICALFLIP) && !(mo->eflags & MFE_VERTICALFLIP))
-						{
-							gravityadd = -gravityadd;
-							mo->eflags |= MFE_VERTICALFLIP;
-						}
-					}
-					break;
 				case MT_WATERDROP:
 				case MT_CYBRAKDEMON:
 					gravityadd >>= 1;