diff --git a/src/android/i_system.c b/src/android/i_system.c
index 0eacc42820aa968e43d57bcf74acceb77b2c78c8..150cbd505c1d40b40c1e5ac69bc911ec8eb849df 100644
--- a/src/android/i_system.c
+++ b/src/android/i_system.c
@@ -158,10 +158,13 @@ void I_SetupMumble(void)
 {
 }
 
-void I_UpdateMumble(const MumblePos_t *MPos)
+#ifndef NOMUMBLE
+void I_UpdateMumble(const mobj_t *mobj, const listener_t listener)
 {
-  (void)MPos;
+	(void)mobj;
+	(void)listener;
 }
+#endif
 
 void I_OutputMsg(const char *fmt, ...)
 {
diff --git a/src/djgppdos/i_system.c b/src/djgppdos/i_system.c
index 4216527602f2e13e207ed7b2138515f387c3946c..854d68f4d5b98ac3e145468ef3eaac4949af69a6 100644
--- a/src/djgppdos/i_system.c
+++ b/src/djgppdos/i_system.c
@@ -175,10 +175,13 @@ void I_SetupMumble(void)
 {
 }
 
-void I_UpdateMumble(const MumblePos_t *MPos)
+#ifndef NOMUMBLE
+void I_UpdateMumble(const mobj_t *mobj, const listener_t listener)
 {
-	(void)MPos;
+	(void)mobj;
+	(void)listener;
 }
+#endif
 
 //
 //  Allocates the base zone memory,
diff --git a/src/nds/i_system.c b/src/nds/i_system.c
index ab30c7eb5dc73f5c198cd1fab37b9624380d331a..0ed58029c194c12ce43c977c54b4cc0a18250b58 100644
--- a/src/nds/i_system.c
+++ b/src/nds/i_system.c
@@ -149,10 +149,13 @@ void I_SetupMumble(void)
 {
 }
 
-void I_UpdateMumble(const MumblePos_t *MPos)
+#ifndef NOMUMBLE
+void I_UpdateMumble(const mobj_t *mobj, const listener_t listener)
 {
-	(void)MPos;
+	(void)mobj;
+	(void)listener;
 }
+#endif
 
 void I_OutputMsg(const char *error, ...)
 {
diff --git a/src/p_user.c b/src/p_user.c
index 8b793e810e82eb7f788f2acae3dd168e287be001..0c016dfc130e600bf515c491721fa40ca729d834 100644
--- a/src/p_user.c
+++ b/src/p_user.c
@@ -8392,9 +8392,24 @@ boolean P_MoveChaseCamera(player_t *player, camera_t *thiscam, boolean resetcall
 	}
 
 	// Make player translucent if camera is too close (only in single player).
-	if (!(multiplayer || netgame) && !splitscreen
-	&& P_AproxDistance(thiscam->x - player->mo->x, thiscam->y - player->mo->y) < FixedMul(48*FRACUNIT, mo->scale))
-		player->mo->flags2 |= MF2_SHADOW;
+	if (!(multiplayer || netgame) && !splitscreen)
+	{
+		fixed_t vx = 0, vy = 0;
+		if (player->awayviewtics) {
+			vx = player->awayviewmobj->x;
+			vy = player->awayviewmobj->y;
+		}
+		else
+		{
+			vx = thiscam->x;
+			vy = thiscam->y;
+		}
+
+		if (P_AproxDistance(vx - player->mo->x, vy - player->mo->y) < FixedMul(48*FRACUNIT, mo->scale))
+			player->mo->flags2 |= MF2_SHADOW;
+		else
+			player->mo->flags2 &= ~MF2_SHADOW;
+	}
 	else
 		player->mo->flags2 &= ~MF2_SHADOW;