diff --git a/src/p_mobj.c b/src/p_mobj.c
index 04655814cbf3c27dd44a7b9964fb4c079d66dbf1..fa59f7663f1afce6e341b63f015e716a541944f2 100644
--- a/src/p_mobj.c
+++ b/src/p_mobj.c
@@ -3322,9 +3322,13 @@ static void P_PlayerZMovement(mobj_t *mo)
 						}
 					}
 
-					if (mo->player->pflags & PF_JUMPED)
-						mo->player->pflags &= ~PF_SPINNING;
-					else if (!(mo->player->pflags & PF_USEDOWN))
+					if ((mo->player->charability2 == CA2_SPINDASH) && !(mo->player->pflags & PF_THOKKED) && (mo->player->cmd.buttons & BT_USE) && (FixedHypot(mo->momx, mo->momy) > (5*mo->scale)))
+					{
+						mo->player->pflags |= PF_SPINNING;
+						P_SetPlayerMobjState(mo, S_PLAY_SPIN);
+						S_StartSound(mo, sfx_spin);
+					}
+					else
 						mo->player->pflags &= ~PF_SPINNING;
 
 					if (!(mo->player->pflags & PF_GLIDING))
diff --git a/src/p_user.c b/src/p_user.c
index 662479a89e64f0578c3006779d1bd47ff50cbe35..7ea32612e8e0eed79a477ee317f97059c72b52f4 100644
--- a/src/p_user.c
+++ b/src/p_user.c
@@ -3843,7 +3843,7 @@ static void P_DoSpinAbility(player_t *player, ticcmd_t *cmd)
 					}
 				}
 
-				// If not moving up or down, and travelling faster than a speed of four while not holding
+				// If not moving up or down, and travelling faster than a speed of five while not holding
 				// down the spin button and not spinning.
 				// AKA Just go into a spin on the ground, you idiot. ;)
 				else if ((cmd->buttons & BT_USE || ((twodlevel || (player->mo->flags2 & MF2_TWOD)) && cmd->forwardmove < -20))