diff --git a/src/p_slopes.c b/src/p_slopes.c
index d6080c15d5ff66597b1f9729aa07e3cee6f8dceb..f89dd3c96dfff65d32ed71fbef996270315b5202 100644
--- a/src/p_slopes.c
+++ b/src/p_slopes.c
@@ -717,7 +717,7 @@ void P_HandleSlopeLanding(mobj_t *thing, pslope_t *slope)
 
 	if (slope->flags & SL_NOPHYSICS) { // No physics, no need to make anything complicated.
 		if (P_MobjFlip(thing)*(thing->momz) < 0) { // falling, land on slope
-			thing->momz = -P_MobjFlip(thing);
+			//thing->momz = -P_MobjFlip(thing);
 			thing->standingslope = slope;
 		}
 		return;
@@ -732,7 +732,7 @@ void P_HandleSlopeLanding(mobj_t *thing, pslope_t *slope)
 	if (P_MobjFlip(thing)*mom.z < 0) { // falling, land on slope
 		thing->momx = mom.x;
 		thing->momy = mom.y;
-		thing->momz = -P_MobjFlip(thing);
+		//thing->momz = -P_MobjFlip(thing);
 
 		thing->standingslope = slope;
 	}
diff --git a/src/p_user.c b/src/p_user.c
index 0a338a6e71756f4f0e931fc5297a14b3eb6b8ae4..0861398d671a00fdfd777fc3bc04ddb4c1804dd5 100644
--- a/src/p_user.c
+++ b/src/p_user.c
@@ -4730,6 +4730,7 @@ void P_DoAbilityBounce(player_t *player, boolean changemomz)
 		return;
 	if (changemomz)
 	{
+		fixed_t minmomz;
 		prevmomz = player->mo->momz;
 		if (P_MobjFlip(player->mo)*prevmomz < 0)
 			prevmomz = 0;
@@ -4737,7 +4738,8 @@ void P_DoAbilityBounce(player_t *player, boolean changemomz)
 			prevmomz /= 2;
 		P_DoJump(player, false);
 		player->pflags &= ~(PF_STARTJUMP|PF_JUMPED);
-		player->mo->momz = (FixedMul(player->mo->momz, 3*FRACUNIT/2) + prevmomz)/2;
+		minmomz = FixedMul(player->mo->momz, 3*FRACUNIT/2);
+		player->mo->momz = max(minmomz, (minmomz + prevmomz)/2);
 	}
 	S_StartSound(player->mo, sfx_boingf);
 	P_SetPlayerMobjState(player->mo, S_PLAY_BOUNCE_LANDING);