diff --git a/src/p_mobj.c b/src/p_mobj.c
index 1c963e2b5ae0377d8cc3633c0eb1fb1ebcc9bae2..ee0fd03bb9241282915780965e9e7941e0288d03 100644
--- a/src/p_mobj.c
+++ b/src/p_mobj.c
@@ -2033,9 +2033,10 @@ void P_XYMovement(mobj_t *mo)
 						FIXED_TO_FLOAT(AngleFixed(newangle)),
 						FIXED_TO_FLOAT(AngleFixed(oldangle-newangle))
 						);*/
-		}/* else if (predictedz-mo->z > abs(slopemom.z/2)) { // Now check if we were supposed to stick to this slope - This may no longer be needed and causes constant 'floor landing' when standing at the top of slopes.
+		} else if (predictedz-mo->z > abs(slopemom.z/2) && mo->z <= mo->floorz) { // Now check if we were supposed to stick to this slope - mo->z <= mo->floorz means 'only do this if we did a stairstep up'
+			//CONS_Printf("%d-%d > %d\n", (predictedz), (mo->z), (slopemom.z/2));
 			P_SlopeLaunch(mo);
-		}*/
+		}
 	} else if (moved && mo->standingslope && predictedz) {
 		angle_t moveangle = R_PointToAngle2(0, 0, mo->momx, mo->momy);
 		angle_t newangle = FixedMul((signed)mo->standingslope->zangle, FINECOSINE((moveangle - mo->standingslope->xydirection) >> ANGLETOFINESHIFT));