diff --git a/src/p_map.c b/src/p_map.c
index e603aaa7592761a47927db135f834e6ac72830a0..be008339fe3d357d9b5acd22ca2989a22f38f963 100644
--- a/src/p_map.c
+++ b/src/p_map.c
@@ -261,6 +261,7 @@ static void P_DoFanAndGasJet(mobj_t *spring, mobj_t *object)
 
 			if (p && !p->powers[pw_tailsfly]) // doesn't reset anim for Tails' flight
 			{
+				object->momz = FixedMul(object->momz, FixedSqrt(FixedDiv(FRACUNIT, NEWTICRATERATIO << FRACBITS)));
 				P_ResetPlayer(p);
 				if (p->panim != PA_FALL)
 					P_SetPlayerMobjState(object, S_PLAY_FALL);
@@ -276,6 +277,7 @@ static void P_DoFanAndGasJet(mobj_t *spring, mobj_t *object)
 
 			if (p)
 			{
+				object->momz = FixedMul(object->momz, FixedSqrt(FixedDiv(FRACUNIT, NEWTICRATERATIO << FRACBITS)));
 				P_ResetPlayer(p);
 				if (p->panim != PA_FALL)
 					P_SetPlayerMobjState(object, S_PLAY_FALL);
diff --git a/src/p_mobj.c b/src/p_mobj.c
index 2d1a5ed5eca09da4f18748a25be240ed08d3dcaa..1f001913c0722b93d4a119147219414a1eb9a218 100644
--- a/src/p_mobj.c
+++ b/src/p_mobj.c
@@ -1476,6 +1476,8 @@ void P_CheckGravity(mobj_t *mo, boolean affect)
 				mo->eflags ^= MFE_VERTICALFLIP;
 			}
 		}
+
+		gravityadd /= NEWTICRATERATIO;
 	}
 	else
 	{