diff --git a/src/g_game.c b/src/g_game.c
index c6d749feeffec50aae2d01ef75f8708433e7f54f..5b39857500eb70ade36a9c0683ad2840d4719eda 100644
--- a/src/g_game.c
+++ b/src/g_game.c
@@ -1978,9 +1978,9 @@ static boolean ViewpointSwitchResponder(event_t *ev)
 	// spy mode
 	do
 	{
-		displayplayer++;
-		if (displayplayer == MAXPLAYERS)
-			displayplayer = 0;
+		// Wrap in both directions
+		displayplayer += shiftdown ? -1 : 1;
+		displayplayer = (displayplayer + MAXPLAYERS) % MAXPLAYERS;
 
 		if (!playeringame[displayplayer])
 			continue;