diff --git a/src/p_mobj.c b/src/p_mobj.c
index 68fb1696f5076fda20577a8f6035808bf96ad3ab..aa795a153f779dbbc75785021a5b6191f6a9bcb0 100644
--- a/src/p_mobj.c
+++ b/src/p_mobj.c
@@ -2018,7 +2018,8 @@ static void P_AdjustMobjFloorZ_FFloors(mobj_t *mo, sector_t *sector, UINT8 motyp
 			mo->floorz = topheight;
 		}
 		if (bottomheight < mo->ceilingz && abs(delta1) >= abs(delta2)
-			&& !(rover->flags & FF_PLATFORM))
+			&& !(rover->flags & FF_PLATFORM)
+			&& ((mo->momz > 0) || (!(rover->flags & FF_REVERSEPLATFORM)))) // Only clip for FOFs that are intangible from the top if you're coming from below
 		{
 			mo->ceilingz = bottomheight;
 		}