diff --git a/src/p_map.c b/src/p_map.c
index c8ae4089f22b8fe4fa557e41f03765a65fc1ff18..0b4987c49b6af53c000c16647b793f0756866c7e 100644
--- a/src/p_map.c
+++ b/src/p_map.c
@@ -211,7 +211,7 @@ boolean P_DoSpring(mobj_t *spring, mobj_t *object)
 			P_SetPlayerMobjState(object, S_PLAY_FALL);
 		else // horizontal spring
 		{
-			if (pflags & (PF_JUMPED|PF_SPINNING) && object->player->panim == PA_ROLL)
+			if (pflags & (PF_JUMPED|PF_SPINNING) && (object->player->panim == PA_ROLL || object->player->panim == PA_JUMP || object->player->panim == PA_FALL))
 				object->player->pflags = pflags;
 			else
 				P_SetPlayerMobjState(object, S_PLAY_WALK);