diff --git a/src/p_map.c b/src/p_map.c
index e78dd1e84..767370587 100644
--- a/src/p_map.c
+++ b/src/p_map.c
@@ -2820,7 +2820,7 @@ boolean P_SceneryTryMove(mobj_t *thing, fixed_t x, fixed_t y)
 static boolean P_ThingHeightClip(mobj_t *thing)
 {
 	boolean floormoved;
-	fixed_t oldfloorz = thing->floorz;
+	fixed_t oldfloorz = thing->floorz, oldz = thing->z;
 	ffloor_t *oldfloorrover = thing->floorrover;
 	ffloor_t *oldceilingrover = thing->ceilingrover;
 	boolean onfloor = P_IsObjectOnGround(thing);//(thing->z <= thing->floorz);
@@ -2879,6 +2879,12 @@ static boolean P_ThingHeightClip(mobj_t *thing)
 			thing->z = thing->ceilingz - thing->height;
 	}
 
+	if (thing->z != oldz)
+	{
+		if (thing->player)
+			P_PlayerHitFloor(thing->player, false);
+	}
+
 	// debug: be sure it falls to the floor
 	thing->eflags &= ~MFE_ONGROUND;
 
diff --git a/src/p_user.c b/src/p_user.c
index 9c4e5b6b9..1e293d24c 100644
--- a/src/p_user.c
+++ b/src/p_user.c
@@ -2069,6 +2069,7 @@ boolean P_PlayerHitFloor(player_t *player, boolean dorollstuff)
 						P_ReturnThrustY(missile, throwang, mu)); // side to side component
 					P_Thrust(missile, player->drawangle, mu2); // forward component
 					P_SetObjectMomZ(missile, (4 + ((i&1)<<1))*FRACUNIT, true);
+					missile->momz += player->mo->pmomz;
 					missile->fuse = TICRATE/2;
 					missile->extravalue2 = ev;
 
@@ -4418,6 +4419,10 @@ static void P_DoSpinAbility(player_t *player, ticcmd_t *cmd)
 					{
 						player->mo->z += P_MobjFlip(player->mo);
 						P_SetObjectMomZ(player->mo, player->mindash, false);
+						if (P_MobjFlip(player->mo)*player->mo->pmomz > 0)
+							player->mo->momz += player->mo->pmomz; // Add the platform's momentum to your jump.
+						else
+							player->mo->pmomz = 0;
 						if (player->mo->eflags & MFE_UNDERWATER)
 							player->mo->momz >>= 1;
 #if 0