diff --git a/src/p_slopes.c b/src/p_slopes.c
index 1d53bfcf48dddeb56829cff82ac5536de82eb417..745be2eac4afa39c2ddaf4c383e84de77640ad3e 100644
--- a/src/p_slopes.c
+++ b/src/p_slopes.c
@@ -852,6 +852,7 @@ fixed_t P_GetLightZAt(const lightlist_t *light, fixed_t x, fixed_t y)
 	return light->slope ? P_GetSlopeZAt(light->slope, x, y) : light->height;
 }
 
+
 //
 // P_QuantizeMomentumToSlope
 //
@@ -886,8 +887,6 @@ void P_ReverseQuantizeMomentumToSlope(vector3_t *momentum, pslope_t *slope)
 	FV3_Rotate(momentum, &axis, InvAngle(slope->zangle) >> ANGLETOFINESHIFT);
 }
 
-// Returns the angle of the slope plane.
-// If line is provided, a new calculation is performed as if the slope were on the top or bottom of a solid midtexture.
 angle_t P_GetStandingSlopeZAngle(pslope_t *slope, line_t *line)
 {
 	angle_t zangle = slope->zangle;
@@ -901,23 +900,28 @@ angle_t P_GetStandingSlopeZAngle(pslope_t *slope, line_t *line)
 	return zangle;
 }
 
-// Returns the angle of the projected normal of slope plane.
-// If line is provided, this simply returns the line's angle.
 angle_t P_GetStandingSlopeDirection(pslope_t *slope, line_t *line)
 {
 	angle_t xydirection = slope->xydirection;
 
 	if (line)
 	{
-		xydirection = line->angle;
+		xydirection = R_PointToAngle2(line->v1->x, line->v1->y, line->v2->x, line->v2->y);
 	}
 
 	return xydirection;
 }
 
-// When given a vector, rotates it and aligns it to either a slope, or a flat surface relative to the slope.
-// If line is provided, this calculation is performed as if the slope were on the top or bottom of a solid midtexture.
-// See also: P_QuantizeMomentumToSlope
+angle_t P_GetObjectStandingSlopeZAngle(mobj_t *mo)
+{
+	return P_GetStandingSlopeZAngle(mo->standingslope, mo->standingline);
+}
+
+angle_t P_GetObjectStandingSlopeDirection(mobj_t *mo)
+{
+	return P_GetStandingSlopeDirection(mo->standingslope, mo->standingline);
+}
+
 static void QuantizeMomentumToSlope(pslope_t *slope, line_t *line, vector3_t *momentum, boolean reverse)
 {
 	if (!slope || slope->flags & SL_NOPHYSICS)
@@ -959,18 +963,6 @@ void P_ReverseQuantizeObjectMomentumToSlope(mobj_t *mo, vector3_t *momentum)
 	QuantizeMomentumToSlope(mo->standingslope, mo->standingline, momentum, true);
 }
 
-// Wrapper for P_GetStandingSlopeZAngle.
-angle_t P_GetObjectStandingSlopeZAngle(mobj_t *mo)
-{
-	return P_GetStandingSlopeZAngle(mo->standingslope, mo->standingline);
-}
-
-// Wrapper for P_GetObjectStandingSlopeDirection.
-angle_t P_GetObjectStandingSlopeDirection(mobj_t *mo)
-{
-	return P_GetStandingSlopeDirection(mo->standingslope, mo->standingline);
-}
-
 //
 // P_SlopeLaunch
 //
@@ -1050,6 +1042,7 @@ fixed_t P_GetWallTransferMomZ(mobj_t *mo, pslope_t *slope, line_t *line)
 // Function to help handle landing on slopes
 void P_HandleSlopeLanding(mobj_t *thing, pslope_t *slope, line_t *line)
 {
+	vector3_t mom; // Ditto.
 	if (slope->flags & SL_NOPHYSICS || (slope->normal.x == 0 && slope->normal.y == 0)) { // No physics, no need to make anything complicated.
 		if (P_MobjFlip(thing)*(thing->momz) < 0) // falling, land on slope
 		{
@@ -1062,7 +1055,6 @@ void P_HandleSlopeLanding(mobj_t *thing, pslope_t *slope, line_t *line)
 		return;
 	}
 
-	vector3_t mom;
 	mom.x = thing->momx;
 	mom.y = thing->momy;
 	mom.z = thing->momz*2;