diff --git a/src/d_clisrv.c b/src/d_clisrv.c
index 7806fdc211aab4cef3f6a837950bb7676e2e1f4e..72f0dd2b10255a911d6dce545d46e186c4397259 100644
--- a/src/d_clisrv.c
+++ b/src/d_clisrv.c
@@ -2564,7 +2564,7 @@ void CL_RemovePlayer(INT32 playernum, INT32 reason)
 	if (playernum == displayplayer && !demoplayback)
 		displayplayer = consoleplayer; // don't look through someone's view who isn't there
 	else
-		G_ResetViews(0);
+		G_ResetViews();
 
 #ifdef HAVE_BLUA
 	LUA_InvalidatePlayer(&players[playernum]);
diff --git a/src/d_netcmd.c b/src/d_netcmd.c
index 5788eb65f59a73bf5ffeadf61210d0f0e03ffe7e..84741c054917b2e2027d6129dcf59c14044ff4d3 100644
--- a/src/d_netcmd.c
+++ b/src/d_netcmd.c
@@ -1987,7 +1987,7 @@ Command_View_f (void)
 
 		olddisplayplayer = (*displayplayerp);
 		(*displayplayerp) = playernum;
-		G_ResetViews(viewnum);
+		G_ResetView(viewnum);
 
 		/* The player we wanted was corrected to who it already was. */
 		if ((*displayplayerp) == olddisplayplayer)
diff --git a/src/g_game.c b/src/g_game.c
index 8fbcec0c6eb7406a1bd08b20f29720f54fd85076..ca003248a4d541963451c0231221c44d4632e599 100644
--- a/src/g_game.c
+++ b/src/g_game.c
@@ -1809,7 +1809,7 @@ boolean G_Responder(event_t *ev)
 		else
 		{
 			displayplayer++;
-			G_ResetViews(1);
+			G_ResetView(1);
 
 			// change statusbar also if playing back demo
 			if (singledemo)
@@ -1824,21 +1824,21 @@ boolean G_Responder(event_t *ev)
 		if (ev->data1 == gamecontrolbis[gc_viewpoint][0] || ev->data1 == gamecontrolbis[gc_viewpoint][1])
 		{
 			secondarydisplayplayer++;
-			G_ResetViews(2);
+			G_ResetView(2);
 
 			return true;
 		}
 		else if (ev->data1 == gamecontrol3[gc_viewpoint][0] || ev->data1 == gamecontrol3[gc_viewpoint][1])
 		{
 			thirddisplayplayer++;
-			G_ResetViews(3);
+			G_ResetView(3);
 
 			return true;
 		}
 		else if (ev->data1 == gamecontrol4[gc_viewpoint][0] || ev->data1 == gamecontrol4[gc_viewpoint][1])
 		{
 			fourthdisplayplayer++;
-			G_ResetViews(4);
+			G_ResetView(4);
 
 			return true;
 		}
@@ -2132,8 +2132,10 @@ G_GetDisplayplayerPtr (UINT8 viewnum)
 	return &displayplayer;
 }
 
-/* Reset only one view */
-static void
+/*
+Ensure a viewpoint is valid.
+*/
+void
 G_ResetView (UINT8 viewnum)
 {
 	INT32    *displayplayerp;
@@ -2173,30 +2175,23 @@ G_ResetView (UINT8 viewnum)
 			(*displayplayerp) = G_FindView((*displayplayerp));
 		}
 	}
+
+	if (viewnum == 1 && demoplayback)
+		consoleplayer = displayplayer;
 }
 
 //
 // G_ResetViews
 // Ensures all viewpoints are valid
 //
-void G_ResetViews(UINT8 viewnum)
+void G_ResetViews(void)
 {
-	UINT8 splits = splitscreen+1;
-
-	if (viewnum == 0)
-	{
-		while (viewnum++ < splits)
-		{
-			G_ResetView(viewnum);
-		}
-	}
-	else
+	UINT8 viewnum = splitscreen+1;
+	do
 	{
 		G_ResetView(viewnum);
 	}
-
-	if (demoplayback)
-		consoleplayer = displayplayer;
+	while (--viewnum > 0) ;
 }
 
 //
diff --git a/src/g_game.h b/src/g_game.h
index b64fcabb9794f52528980f94dbd1aaf97eada06c..a28a709e528409157f6efd8b8ba27f28e2afee94 100644
--- a/src/g_game.h
+++ b/src/g_game.h
@@ -228,7 +228,8 @@ boolean G_Responder(event_t *ev);
 
 INT32 * G_GetDisplayplayerPtr (UINT8 viewnum);
 
-void G_ResetViews(UINT8 viewnum);
+void G_ResetViews(void);
+void G_ResetView (UINT8 viewnum);
 
 void G_AddPlayer(INT32 playernum);