diff --git a/src/p_local.h b/src/p_local.h
index a4062ff6f6e5d4892bfe96c338c27669f1a4b17b..cef7e736fd25b4b9c367a7f7eb423bac5d78d337 100644
--- a/src/p_local.h
+++ b/src/p_local.h
@@ -86,6 +86,7 @@ typedef struct camera_s
 	// Camera demobjerization
 	// Info for drawing: position.
 	fixed_t x, y, z;
+	boolean reset;
 
 	//More drawing info: to determine current sprite.
 	angle_t angle; // orientation
diff --git a/src/p_user.c b/src/p_user.c
index 5cbc69264379f13fdd71e0c0ab16e25b11eb4b8b..82e5fa3f794247005d5b58a141fc1a3042315bf7 100644
--- a/src/p_user.c
+++ b/src/p_user.c
@@ -7392,6 +7392,7 @@ void P_ResetCamera(player_t *player, camera_t *thiscam)
 	thiscam->x = x;
 	thiscam->y = y;
 	thiscam->z = z;
+	thiscam->reset = true;
 
 	if (!(thiscam == &camera[0] && (cv_cam_still.value || cv_analog.value))
 		&& !(thiscam == &camera[1] && (cv_cam2_still.value || cv_analog2.value))
diff --git a/src/r_main.c b/src/r_main.c
index 0766056051ca5571263be2400b37ef55aae6b3f5..e55481512a8b6f4d4ecbb757ba74529b83c43adf 100644
--- a/src/r_main.c
+++ b/src/r_main.c
@@ -1045,24 +1045,44 @@ void R_SetupFrame(player_t *player, boolean skybox)
 		thiscam = &camera[3];
 		chasecam = (cv_chasecam4.value != 0);
 		R_SetViewContext(VIEWCONTEXT_PLAYER4);
+		if (thiscam->reset)
+		{
+			R_ResetViewInterpolation(4);
+			thiscam->reset = false;
+		}
 	}
 	else if (splitscreen > 1 && player == &players[displayplayers[2]])
 	{
 		thiscam = &camera[2];
 		chasecam = (cv_chasecam3.value != 0);
 		R_SetViewContext(VIEWCONTEXT_PLAYER3);
+		if (thiscam->reset)
+		{
+			R_ResetViewInterpolation(3);
+			thiscam->reset = false;
+		}
 	}
 	else if (splitscreen && player == &players[displayplayers[1]])
 	{
 		thiscam = &camera[1];
 		chasecam = (cv_chasecam2.value != 0);
 		R_SetViewContext(VIEWCONTEXT_PLAYER2);
+		if (thiscam->reset)
+		{
+			R_ResetViewInterpolation(2);
+			thiscam->reset = false;
+		}
 	}
 	else
 	{
 		thiscam = &camera[0];
 		chasecam = (cv_chasecam.value != 0);
 		R_SetViewContext(VIEWCONTEXT_PLAYER1);
+		if (thiscam->reset)
+		{
+			R_ResetViewInterpolation(1);
+			thiscam->reset = false;
+		}
 	}
 
 	if (player->spectator) // no spectator chasecam