diff --git a/src/lua_playerlib.c b/src/lua_playerlib.c
index f7e14e78f96a89e490069da4fcadfffdfc59dd7c..f79b1e45e9361d0697852960f9d905f08c3286c9 100644
--- a/src/lua_playerlib.c
+++ b/src/lua_playerlib.c
@@ -710,6 +710,10 @@ static int player_set(lua_State *L)
 		if (!lua_isnil(L, 3))
 			mo = *((mobj_t **)luaL_checkudata(L, 3, META_MOBJ));
 		P_SetTarget(&plr->awayviewmobj, mo);
+		if (plr == &players[displayplayer])
+			P_ResetCamera(plr, &camera); // reset p1 camera on p1 getting an awayviewmobj
+		else if (splitscreen && plr == &players[secondarydisplayplayer])
+			P_ResetCamera(plr, &camera2);  // reset p2 camera on p2 getting an awayviewmobj
 	}
 	else if (fastcmp(field,"awayviewtics"))
 	{
diff --git a/src/p_spec.c b/src/p_spec.c
index aa04a723eb95be92cd6d323742300921c634be9a..8489a227f32be33817bf6f9f3de8ea85f103dd87 100644
--- a/src/p_spec.c
+++ b/src/p_spec.c
@@ -2669,6 +2669,11 @@ static void P_ProcessLineSpecial(line_t *line, mobj_t *mo, sector_t *callsec)
 				{
 					P_SetTarget(&mo->player->awayviewmobj, altview);
 					mo->player->awayviewtics = line->args[1];
+					
+					if (mo->player == &players[displayplayer])
+						P_ResetCamera(mo->player, &camera); // reset p1 camera on p1 getting an awayviewmobj
+					else if (splitscreen && mo->player == &players[secondarydisplayplayer])
+						P_ResetCamera(mo->player, &camera2);  // reset p2 camera on p2 getting an awayviewmobj
 				}
 
 				aim = udmf ? altview->spawnpoint->pitch : line->args[2];
diff --git a/src/p_user.c b/src/p_user.c
index 0f3282da5582f122c9f383ba9509ea28fa6d458a..42fd0c3104a57f25940107d0b23261eecaec459f 100644
--- a/src/p_user.c
+++ b/src/p_user.c
@@ -11507,15 +11507,24 @@ void P_PlayerThink(player_t *player)
 	if (player->awayviewmobj && P_MobjWasRemoved(player->awayviewmobj))
 	{
 		P_SetTarget(&player->awayviewmobj, NULL); // remove awayviewmobj asap if invalid
-		player->awayviewtics = 0; // reset to zero
+		player->awayviewtics = 1; // reset to one, the below code will immediately set it to zero
+	}
+	
+	if (player->awayviewtics && player->awayviewtics != -1)
+	{
+		player->awayviewtics--;
+		if (!(player->awayviewtics))
+		{
+			if (player == &players[displayplayer])
+				P_ResetCamera(player, &camera); // reset p1 camera on p1 running out of awayviewtics
+			else if (splitscreen && player == &players[secondarydisplayplayer])
+				P_ResetCamera(player, &camera2);  // reset p2 camera on p2 running out of awayviewtics
+		}
 	}
 
 	if (player->flashcount)
 		player->flashcount--;
 
-	if (player->awayviewtics && player->awayviewtics != -1)
-		player->awayviewtics--;
-
 	/// \note do this in the cheat code
 	if (player->pflags & PF_NOCLIP)
 		player->mo->flags |= MF_NOCLIP;