diff --git a/src/p_mobj.c b/src/p_mobj.c
index b9412ee776f8242fff9cfa23e5f2b155ea09e57d..fb8648013fbecd1527dbdc22d70cd806a7202984 100644
--- a/src/p_mobj.c
+++ b/src/p_mobj.c
@@ -6648,6 +6648,18 @@ void P_MobjThinker(mobj_t *mobj)
 		}
 	else switch (mobj->type)
 	{
+		case MT_FALLINGROCK:
+			// Despawn rocks here in case zmovement code can't do so (blame slopes)
+			if (!mobj->momx && !mobj->momy && !mobj->momz
+			&& ((mobj->eflags & MFE_VERTICALFLIP) ?
+				  mobj->z + mobj->height >= mobj->ceilingz
+				: mobj->z <= mobj->floorz))
+			{
+				P_RemoveMobj(mobj);
+				return;
+			}
+			P_MobjCheckWater(mobj);
+			break;
 		case MT_EMERALDSPAWN:
 			if (mobj->threshold)
 			{