diff --git a/src/p_enemy.cpp b/src/p_enemy.cpp
index 0961e8671..dd5ab581b 100644
--- a/src/p_enemy.cpp
+++ b/src/p_enemy.cpp
@@ -550,9 +550,14 @@ bool P_Move (AActor *actor)
 			{
 				actor->z = savedz;
 			}
-			else if (actor->floorsector->SecActTarget != NULL)
+			else
 			{ // The monster just hit the floor, so trigger any actions.
-				actor->floorsector->SecActTarget->TriggerAction(actor, SECSPAC_HitFloor);
+				if (actor->floorsector->SecActTarget != NULL &&
+					actor->floorz == actor->floorsector->floorplane.ZatPoint(actor->x, actor->y))
+				{
+					actor->floorsector->SecActTarget->TriggerAction(actor, SECSPAC_HitFloor);
+				}
+				P_CheckFor3DFloorHit(actor);
 			}
 		}
 	}