diff --git a/src/p_map.c b/src/p_map.c
index ba0cc82babe12364a108654a6de49bb902cb5cbd..329224d0bd353c8a345f5483ffd5142695b9f0e3 100644
--- a/src/p_map.c
+++ b/src/p_map.c
@@ -2715,6 +2715,16 @@ boolean P_TryMove(mobj_t *thing, fixed_t x, fixed_t y, boolean allowdropoff)
 				&& P_MobjFlip(thing)*thing->momz > FixedMul(FRACUNIT, thing->scale))
 					maxstep = 0;
 			}
+			else if (thing->flags & MF_PUSHABLE)
+			{
+				// If using type Section1:13, double the maxstep.
+				if (GETSECSPECIAL(R_PointInSubsector(x, y)->sector->special, 1) == 13)
+					maxstep <<= 1;
+
+				// If using type Section1:14, no maxstep.
+				if (GETSECSPECIAL(R_PointInSubsector(x, y)->sector->special, 1) == 14)
+					maxstep = 0;
+			}
 
 			if (thing->type == MT_SKIM)
 				maxstep = 0;