diff --git a/src/p_user.c b/src/p_user.c
index ea4d83938cfd274d901f1f62a9907e49c8aa821d..613fbe68d978147b1a5026c20239f2075501a9e6 100644
--- a/src/p_user.c
+++ b/src/p_user.c
@@ -3832,11 +3832,13 @@ static void P_DoJumpStuff(player_t *player, ticcmd_t *cmd)
 
 	if (cmd->buttons & BT_USE && !(player->pflags & PF_JUMPDOWN) && !player->exiting && !P_PlayerInPain(player))
 	{
-		if (onground || player->climbing || player->pflags & (PF_CARRIED|PF_ITEMHANG|PF_ROPEHANG))
-		{}
-		else if (player->pflags & PF_MACESPIN && player->mo->tracer)
-		{}
-		else if (!(player->pflags & PF_SLIDING) && ((gametype != GT_CTF) || (!player->gotflag)))
+		if (onground || player->climbing || player->pflags & (PF_CARRIED|PF_ITEMHANG|PF_ROPEHANG|PF_SLIDING)
+		|| (player->pflags & PF_MACESPIN && player->mo->tracer))
+			;
+		else if ((player->powers[pw_shield] & SH_NOSTACK) == SH_JUMP
+		&& !(player->pflags & PF_JUMPED))
+			P_DoJumpShield(player);
+		else if (gametype != GT_CTF || !player->gotflag)
 		{
 #ifdef HAVE_BLUA
 			if (!LUAh_JumpSpinSpecial(player))