diff --git a/src/p_enemy.c b/src/p_enemy.c
index 2a8ab5bb90a67daef5a6338672cb225d70276832..ee244d3cc024d1006844f4770ff43bc500a81be7 100644
--- a/src/p_enemy.c
+++ b/src/p_enemy.c
@@ -363,12 +363,12 @@ boolean P_CheckMissileRange(mobj_t *actor)
 	if (!actor->target)
 		return false;
 
-	if (!P_CheckSight(actor, actor->target))
-		return false;
-
 	if (actor->reactiontime)
 		return false; // do not attack yet
 
+	if (!P_CheckSight(actor, actor->target))
+		return false;
+
 	// OPTIMIZE: get this from a global checksight
 	dist = P_AproxDistance(actor->x-actor->target->x, actor->y-actor->target->y) - FixedMul(64*FRACUNIT, actor->scale);
 
@@ -652,6 +652,9 @@ boolean P_LookForPlayers(mobj_t *actor, boolean allaround, boolean tracer, fixed
 
 		player = &players[actor->lastlook];
 
+		if ((netgame || multiplayer) && player->spectator)
+			continue;
+
 		if (player->health <= 0)
 			continue; // dead
 
@@ -661,12 +664,6 @@ boolean P_LookForPlayers(mobj_t *actor, boolean allaround, boolean tracer, fixed
 		if (!player->mo || P_MobjWasRemoved(player->mo))
 			continue;
 
-		if (!P_CheckSight(actor, player->mo))
-			continue; // out of sight
-
-		if ((netgame || multiplayer) && player->spectator)
-			continue;
-
 		if (dist > 0
 			&& P_AproxDistance(P_AproxDistance(player->mo->x - actor->x, player->mo->y - actor->y), player->mo->z - actor->z) > dist)
 			continue; // Too far away
@@ -683,6 +680,9 @@ boolean P_LookForPlayers(mobj_t *actor, boolean allaround, boolean tracer, fixed
 			}
 		}
 
+		if (!P_CheckSight(actor, player->mo))
+			continue; // out of sight
+
 		if (tracer)
 			P_SetTarget(&actor->tracer, player->mo);
 		else