diff --git a/src/hardware/r_opengl/r_opengl.c b/src/hardware/r_opengl/r_opengl.c
index 726009612edcadf0dd26acfc0462ed07e05d30cb..d14324c300cc5b683c57c05f01e084e026aa0908 100644
--- a/src/hardware/r_opengl/r_opengl.c
+++ b/src/hardware/r_opengl/r_opengl.c
@@ -1913,8 +1913,8 @@ EXPORT void HWRAPI(DrawMD2i) (INT32 *gl_cmd_buffer, md2_frame_t *frame, UINT32 d
 	// Remove depth mask when the model is transparent so it doesn't cut thorugh sprites // SRB2CBTODO: For all stuff too?!
 	if (color[3] < 255)
 	{
-		glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); // alpha = level of transparency
-		glDepthMask(GL_FALSE);
+		pglBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); // alpha = level of transparency
+		pglDepthMask(GL_FALSE);
 	}
 
 	val = *gl_cmd_buffer++;
diff --git a/src/p_user.c b/src/p_user.c
index 45e6614289de75ee74ad06b32e393b185d6c281d..6270d78966bb44c8a3e3c8df5a91af5f8d988465 100644
--- a/src/p_user.c
+++ b/src/p_user.c
@@ -7783,24 +7783,24 @@ boolean P_MoveChaseCamera(player_t *player, camera_t *thiscam, boolean resetcall
 	angle_t angle = 0, focusangle = 0, focusaiming = 0;
 	fixed_t x, y, z, dist, checkdist, viewpointx, viewpointy, camspeed, camdist, camheight, pviewheight;
 	INT32 camrotate;
-	boolean camstill, forceon = false, cameranoclip;
+	boolean camstill, cameranoclip;
 	mobj_t *mo;
 	subsector_t *newsubsec;
 	fixed_t f1, f2;
 
 	cameranoclip = (player->pflags & (PF_NOCLIP|PF_NIGHTSMODE)) || (player->mo->flags & (MF_NOCLIP|MF_NOCLIPHEIGHT)); // Noclipping player camera noclips too!!
 
-	if (player->climbing || (player->pflags & PF_NIGHTSMODE) || player->playerstate == PST_DEAD)
-		forceon = true;
-
-	if (!forceon && player->spectator) // force cam off for spectators
-		return true;
+	if (!(player->climbing || (player->pflags & PF_NIGHTSMODE) || player->playerstate == PST_DEAD))
+	{
+		if (player->spectator) // force cam off for spectators
+			return true;
 
-	if (!forceon && !cv_chasecam.value && thiscam == &camera)
-		return true;
+		if (!cv_chasecam.value && thiscam == &camera)
+			return true;
 
-	if (!forceon && !cv_chasecam2.value && thiscam == &camera2)
-		return true;
+		if (!cv_chasecam2.value && thiscam == &camera2)
+			return true;
+	}
 
 	if (!thiscam->chase && !resetcalled)
 	{
@@ -9091,7 +9091,7 @@ void P_PlayerAfterThink(player_t *player)
 {
 	ticcmd_t *cmd;
 	INT32 oldweapon = player->currentweapon;
-	camera_t *thiscam;
+	camera_t *thiscam = NULL; // if not one of the displayed players, just don't bother
 
 #ifdef PARANOIA
 	if (!player->mo)
@@ -9105,7 +9105,7 @@ void P_PlayerAfterThink(player_t *player)
 
 	if (splitscreen && player == &players[secondarydisplayplayer])
 		thiscam = &camera2;
-	else
+	else if (player == &players[displayplayer])
 		thiscam = &camera;
 
 	if (player->playerstate == PST_DEAD)
@@ -9113,7 +9113,7 @@ void P_PlayerAfterThink(player_t *player)
 		// camera may still move when guy is dead
 		//if (!netgame)
 		{
-			if (((splitscreen && player == &players[secondarydisplayplayer]) || player == &players[displayplayer]) && thiscam->chase)
+			if (thiscam && thiscam->chase)
 				P_MoveChaseCamera(player, thiscam, false);
 		}
 		return;
@@ -9368,7 +9368,7 @@ void P_PlayerAfterThink(player_t *player)
 		}
 	}
 
-	if ((splitscreen && player == &players[secondarydisplayplayer]) || player == &players[displayplayer])
+	if (thiscam)
 	{
 		if (!thiscam->chase) // bob view only if looking through the player's eyes
 		{
diff --git a/src/r_main.c b/src/r_main.c
index ffd4d5d504c3b6c98e9c02894c41ec1ca0340d7c..1edcb815b5f5dbded625c5474bb5213a16f635bc 100644
--- a/src/r_main.c
+++ b/src/r_main.c
@@ -1026,34 +1026,31 @@ void R_SetupFrame(player_t *player, boolean skybox)
 {
 	INT32 dy = 0;
 	camera_t *thiscam;
-	boolean forcechase = false;
+	boolean chasecam = false;
 
 	if (splitscreen && player == &players[secondarydisplayplayer]
 		&& player != &players[consoleplayer])
 	{
 		thiscam = &camera2;
+		chasecam = (cv_chasecam2.value != 0);
 	}
 	else
+	{
 		thiscam = &camera;
+		chasecam = (cv_chasecam.value != 0);
+	}
 
 	if (player->climbing || (player->pflags & PF_NIGHTSMODE) || player->playerstate == PST_DEAD)
-		forcechase = true;
+		chasecam = true; // force chasecam on
+	else if (player->spectator) // no spectator chasecam
+		chasecam = false; // force chasecam off
 
-	if (!forcechase && player->spectator) // no spectator chasecam
-		thiscam->chase = false;
-	else if ((cv_chasecam.value || forcechase) && !player->spectator && thiscam == &camera && !thiscam->chase)
+	if (chasecam && !thiscam->chase)
 	{
-		P_ResetCamera(player, &camera);
+		P_ResetCamera(player, thiscam);
 		thiscam->chase = true;
 	}
-	else if ((cv_chasecam2.value || forcechase) && !player->spectator && thiscam == &camera2 && !thiscam->chase)
-	{
-		P_ResetCamera(player, &camera2);
-		thiscam->chase = true;
-	}
-	else if (!(cv_chasecam.value || forcechase) && thiscam == &camera)
-		thiscam->chase = false;
-	else if (!(cv_chasecam2.value || forcechase) && thiscam == &camera2)
+	else if (!chasecam)
 		thiscam->chase = false;
 
 	viewsky = !skybox;
@@ -1066,9 +1063,7 @@ void R_SetupFrame(player_t *player, boolean skybox)
 		aimingangle = player->awayviewaiming;
 		viewangle = viewmobj->angle;
 	}
-	else if (!player->spectator && (forcechase
-		|| (cv_chasecam.value && thiscam == &camera)
-		|| (cv_chasecam2.value && thiscam == &camera2)))
+	else if (!player->spectator && chasecam)
 	// use outside cam view
 	{
 		viewmobj = NULL;
@@ -1105,8 +1100,7 @@ void R_SetupFrame(player_t *player, boolean skybox)
 
 	viewplayer = player;
 
-	if ((forcechase || (cv_chasecam.value && thiscam == &camera) || (cv_chasecam2.value && thiscam == &camera2))
-		&& !player->awayviewtics && !player->spectator)
+	if (chasecam && !player->awayviewtics && !player->spectator)
 	{
 		viewx = thiscam->x;
 		viewy = thiscam->y;