diff --git a/src/main/java/com/l2jserver/datapack/handlers/targethandlers/Enemy.java b/src/main/java/com/l2jserver/datapack/handlers/targethandlers/Enemy.java
index cb04b4fcaf6b23ea4e5474a096d32a9dea26bee9..ed38876728e243745a98c0e065429adac0ca1290 100644
--- a/src/main/java/com/l2jserver/datapack/handlers/targethandlers/Enemy.java
+++ b/src/main/java/com/l2jserver/datapack/handlers/targethandlers/Enemy.java
@@ -54,8 +54,12 @@ public class Enemy implements ITargetTypeHandler {
 				}
 				
 				final L2PcInstance player = activeChar.getActingPlayer();
-				if ((player == null) || !player.checkIfPvP(target) && !player.getCurrentSkill().isCtrlPressed()) {
-					activeChar.sendPacket(INCORRECT_TARGET);
+				if (player == null) {
+					return EMPTY_TARGET_LIST;
+				}
+				
+				if (!player.checkIfPvP(target) && !player.getCurrentSkill().isCtrlPressed()) {
+					player.sendPacket(INCORRECT_TARGET);
 					return EMPTY_TARGET_LIST;
 				}
 				
diff --git a/src/main/java/com/l2jserver/datapack/hellbound/ai/zones/TowerOfNaia/TowerOfNaia.java b/src/main/java/com/l2jserver/datapack/hellbound/ai/zones/TowerOfNaia/TowerOfNaia.java
index 82dcf15c487351d6d5096ac7bb2741563168ea3c..859647cd9ecc94309a445d0a76c05ad793e0af5a 100644
--- a/src/main/java/com/l2jserver/datapack/hellbound/ai/zones/TowerOfNaia/TowerOfNaia.java
+++ b/src/main/java/com/l2jserver/datapack/hellbound/ai/zones/TowerOfNaia/TowerOfNaia.java
@@ -158,7 +158,7 @@ public final class TowerOfNaia extends AbstractNpcAI {
 	private final Set<L2Npc> _sporeSpawn = ConcurrentHashMap.newKeySet();
 	static {
 		// Format: entrance_door, exit_door
-		DOORS.put(18494, new int[] {
+		DOORS.put(ROOM_MANAGER_FIRST, new int[] {
 			18250001,
 			18250002
 		});
@@ -202,12 +202,12 @@ public final class TowerOfNaia extends AbstractNpcAI {
 			18250021,
 			18250022
 		});
-		DOORS.put(18505, new int[] {
+		DOORS.put(ROOM_MANAGER_LAST, new int[] {
 			18250023,
 			18250024
 		});
 		
-		ZONES.put(18494, 200020);
+		ZONES.put(ROOM_MANAGER_FIRST, 200020);
 		ZONES.put(18495, 200021);
 		ZONES.put(18496, 200022);
 		ZONES.put(18497, 200023);
@@ -218,9 +218,9 @@ public final class TowerOfNaia extends AbstractNpcAI {
 		ZONES.put(18502, 200028);
 		ZONES.put(18503, 200029);
 		ZONES.put(18504, 200030);
-		ZONES.put(18505, 200031);
+		ZONES.put(ROOM_MANAGER_LAST, 200031);
 		//@formatter:off
-		SPAWNS.put(18494, new int[][]
+		SPAWNS.put(ROOM_MANAGER_FIRST, new int[][]
 		{
 			{22393, -46371, 246400, -9120, 0},
 			{22394, -46435, 245830, -9120, 0},
@@ -309,7 +309,7 @@ public final class TowerOfNaia extends AbstractNpcAI {
 			{22413, -51500, 245781, -12568, 0},
 			{22413, -51941, 246045, -12568, 0},
 		});
-		SPAWNS.put(18505, new int[][]
+		SPAWNS.put(ROOM_MANAGER_LAST, new int[][]
 		{
 			{18490, -48238, 243347, -13376, 0},
 			{18490, -48462, 244022, -13376, 0},
@@ -362,15 +362,12 @@ public final class TowerOfNaia extends AbstractNpcAI {
 	@Override
 	public String onFirstTalk(L2Npc npc, L2PcInstance player) {
 		final int npcId = npc.getId();
-		
 		if (npcId == CONTROLLER) {
 			if (_lock == null) {
 				return "18492-02.htm";
 			}
 			return "18492-01.htm";
-		}
-		
-		else if ((npcId >= ROOM_MANAGER_FIRST) && (npcId <= ROOM_MANAGER_LAST)) {
+		} else if ((npcId >= ROOM_MANAGER_FIRST) && (npcId <= ROOM_MANAGER_LAST)) {
 			if (_activeRooms.containsKey(npcId) && !_activeRooms.get(npcId)) {
 				if (player.getParty() == null) {
 					player.sendPacket(SystemMessageId.CAN_OPERATE_MACHINE_WHEN_IN_PARTY);
diff --git a/src/test/java/com/l2jserver/datapack/handlers/targethandlers/EnemyOnlyTest.java b/src/test/java/com/l2jserver/datapack/handlers/targethandlers/EnemyOnlyTest.java
index bdf4f37ad475df65a9c94c1511651d91194f5f07..0e8bb65a3e0eb20de98e558a63ecb3ea7b0f007a 100644
--- a/src/test/java/com/l2jserver/datapack/handlers/targethandlers/EnemyOnlyTest.java
+++ b/src/test/java/com/l2jserver/datapack/handlers/targethandlers/EnemyOnlyTest.java
@@ -99,10 +99,23 @@ public class EnemyOnlyTest extends AbstractTest {
 		assertEquals(EMPTY_TARGET_LIST, actual);
 	}
 	
+	@Test
+	public void test_non_attackable_target_should_return_empty_target_list_with_invalid_target_message() {
+		expect(skill.getAffectScope()).andReturn(SINGLE);
+		expect(target.isDead()).andReturn(false);
+		expect(target.isNpc()).andReturn(true);
+		expect(target.isAttackable()).andReturn(false);
+		replay(skill, target);
+		
+		final var actual = enemyOnly.getTargetList(skill, activeChar, false, target);
+		assertEquals(EMPTY_TARGET_LIST, actual);
+	}
+	
 	@Test
 	public void test_attackable_target_should_return_target() {
 		expect(skill.getAffectScope()).andReturn(SINGLE);
 		expect(target.isDead()).andReturn(false);
+		expect(target.isNpc()).andReturn(true);
 		expect(target.isAttackable()).andReturn(true);
 		replay(skill, target);
 		
@@ -114,7 +127,7 @@ public class EnemyOnlyTest extends AbstractTest {
 	public void test_null_player_should_return_empty_target_list() {
 		expect(skill.getAffectScope()).andReturn(SINGLE);
 		expect(target.isDead()).andReturn(false);
-		expect(target.isAttackable()).andReturn(false);
+		expect(target.isNpc()).andReturn(false);
 		expect(activeChar.getActingPlayer()).andReturn(null);
 		replay(skill, target, activeChar);
 		
@@ -126,7 +139,7 @@ public class EnemyOnlyTest extends AbstractTest {
 	public void test_player_in_olympiad_should_return_target_if_target_is_on_the_other_side() {
 		expect(skill.getAffectScope()).andReturn(SINGLE);
 		expect(target.isDead()).andReturn(false);
-		expect(target.isAttackable()).andReturn(false);
+		expect(target.isNpc()).andReturn(false);
 		expect(activeChar.getActingPlayer()).andReturn(player);
 		expect(player.isInOlympiadMode()).andReturn(true);
 		expect(target.getActingPlayer()).andReturn(targetPlayer);
@@ -142,7 +155,7 @@ public class EnemyOnlyTest extends AbstractTest {
 	public void test_player_in_olympiad_should_return_empty_target_list_if_target_is_on_the_same_side() {
 		expect(skill.getAffectScope()).andReturn(SINGLE);
 		expect(target.isDead()).andReturn(false);
-		expect(target.isAttackable()).andReturn(false);
+		expect(target.isNpc()).andReturn(false);
 		expect(activeChar.getActingPlayer()).andReturn(player);
 		expect(player.isInOlympiadMode()).andReturn(true);
 		expect(target.getActingPlayer()).andReturn(targetPlayer);
@@ -160,7 +173,7 @@ public class EnemyOnlyTest extends AbstractTest {
 	public void test_player_in_duel_should_return_target_if_target_is_on_the_other_side() {
 		expect(skill.getAffectScope()).andReturn(SINGLE);
 		expect(target.isDead()).andReturn(false);
-		expect(target.isAttackable()).andReturn(false);
+		expect(target.isNpc()).andReturn(false);
 		expect(activeChar.getActingPlayer()).andReturn(player);
 		expect(player.isInOlympiadMode()).andReturn(false);
 		expect(player.isInDuelWith(target)).andReturn(true);
@@ -182,7 +195,7 @@ public class EnemyOnlyTest extends AbstractTest {
 	public void test_player_in_duel_should_return_empty_target_list_if_target_is_on_the_same_side() {
 		expect(skill.getAffectScope()).andReturn(SINGLE);
 		expect(target.isDead()).andReturn(false);
-		expect(target.isAttackable()).andReturn(false);
+		expect(target.isNpc()).andReturn(false);
 		expect(activeChar.getActingPlayer()).andReturn(player);
 		expect(player.isInOlympiadMode()).andReturn(false);
 		expect(player.isInDuelWith(target)).andReturn(true);
@@ -207,7 +220,7 @@ public class EnemyOnlyTest extends AbstractTest {
 	public void test_player_in_party_with_target_should_return_empty_target_list() {
 		expect(skill.getAffectScope()).andReturn(SINGLE);
 		expect(target.isDead()).andReturn(false);
-		expect(target.isAttackable()).andReturn(false);
+		expect(target.isNpc()).andReturn(false);
 		expect(activeChar.getActingPlayer()).andReturn(player);
 		expect(player.isInOlympiadMode()).andReturn(false);
 		expect(player.isInDuelWith(target)).andReturn(false);
@@ -224,7 +237,7 @@ public class EnemyOnlyTest extends AbstractTest {
 	public void test_player_in_pvp_zone_should_return_target() {
 		expect(skill.getAffectScope()).andReturn(SINGLE);
 		expect(target.isDead()).andReturn(false);
-		expect(target.isAttackable()).andReturn(false);
+		expect(target.isNpc()).andReturn(false);
 		expect(activeChar.getActingPlayer()).andReturn(player);
 		expect(player.isInOlympiadMode()).andReturn(false);
 		expect(player.isInDuelWith(target)).andReturn(false);
@@ -240,7 +253,7 @@ public class EnemyOnlyTest extends AbstractTest {
 	public void test_player_in_clan_with_target_should_return_empty_target_list() {
 		expect(skill.getAffectScope()).andReturn(SINGLE);
 		expect(target.isDead()).andReturn(false);
-		expect(target.isAttackable()).andReturn(false);
+		expect(target.isNpc()).andReturn(false);
 		expect(activeChar.getActingPlayer()).andReturn(player);
 		expect(player.isInOlympiadMode()).andReturn(false);
 		expect(player.isInDuelWith(target)).andReturn(false);
@@ -259,7 +272,7 @@ public class EnemyOnlyTest extends AbstractTest {
 	public void test_player_in_alliance_with_target_should_return_empty_target_list() {
 		expect(skill.getAffectScope()).andReturn(SINGLE);
 		expect(target.isDead()).andReturn(false);
-		expect(target.isAttackable()).andReturn(false);
+		expect(target.isNpc()).andReturn(false);
 		expect(activeChar.getActingPlayer()).andReturn(player);
 		expect(player.isInOlympiadMode()).andReturn(false);
 		expect(player.isInDuelWith(target)).andReturn(false);
@@ -279,7 +292,7 @@ public class EnemyOnlyTest extends AbstractTest {
 	public void test_player_in_command_channel_with_target_should_return_empty_target_list() {
 		expect(skill.getAffectScope()).andReturn(SINGLE);
 		expect(target.isDead()).andReturn(false);
-		expect(target.isAttackable()).andReturn(false);
+		expect(target.isNpc()).andReturn(false);
 		expect(activeChar.getActingPlayer()).andReturn(player);
 		expect(player.isInOlympiadMode()).andReturn(false);
 		expect(player.isInDuelWith(target)).andReturn(false);
@@ -300,7 +313,7 @@ public class EnemyOnlyTest extends AbstractTest {
 	public void test_player_cannot_pvp_target_should_return_empty_target_list() {
 		expect(skill.getAffectScope()).andReturn(SINGLE);
 		expect(target.isDead()).andReturn(false);
-		expect(target.isAttackable()).andReturn(false);
+		expect(target.isNpc()).andReturn(false);
 		expect(activeChar.getActingPlayer()).andReturn(player);
 		expect(player.isInOlympiadMode()).andReturn(false);
 		expect(player.isInDuelWith(target)).andReturn(false);
@@ -322,7 +335,7 @@ public class EnemyOnlyTest extends AbstractTest {
 	public void test_player_can_pvp_target_should_return_target() {
 		expect(skill.getAffectScope()).andReturn(SINGLE);
 		expect(target.isDead()).andReturn(false);
-		expect(target.isAttackable()).andReturn(false);
+		expect(target.isNpc()).andReturn(false);
 		expect(activeChar.getActingPlayer()).andReturn(player);
 		expect(player.isInOlympiadMode()).andReturn(false);
 		expect(player.isInDuelWith(target)).andReturn(false);
diff --git a/src/test/java/com/l2jserver/datapack/handlers/targethandlers/EnemyTest.java b/src/test/java/com/l2jserver/datapack/handlers/targethandlers/EnemyTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..5c01ac17654f24475350540b6ffd99696854cca3
--- /dev/null
+++ b/src/test/java/com/l2jserver/datapack/handlers/targethandlers/EnemyTest.java
@@ -0,0 +1,156 @@
+/*
+ * Copyright © 2004-2020 L2J DataPack
+ * 
+ * This file is part of L2J DataPack.
+ * 
+ * L2J DataPack is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ * 
+ * L2J DataPack is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+package com.l2jserver.datapack.handlers.targethandlers;
+
+import static com.l2jserver.gameserver.handler.ITargetTypeHandler.EMPTY_TARGET_LIST;
+import static com.l2jserver.gameserver.model.skills.targets.AffectScope.NONE;
+import static com.l2jserver.gameserver.model.skills.targets.AffectScope.SINGLE;
+import static com.l2jserver.gameserver.network.SystemMessageId.INCORRECT_TARGET;
+import static org.easymock.EasyMock.expect;
+import static org.easymock.EasyMock.expectLastCall;
+import static org.powermock.api.easymock.PowerMock.replay;
+import static org.testng.Assert.assertEquals;
+
+import org.powermock.api.easymock.annotation.Mock;
+import org.testng.annotations.Test;
+
+import com.l2jserver.datapack.test.AbstractTest;
+import com.l2jserver.gameserver.model.actor.L2Character;
+import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jserver.gameserver.model.holders.SkillUseHolder;
+import com.l2jserver.gameserver.model.skills.Skill;
+
+/**
+ * Enemy test.
+ * @author Zoey76
+ * @version 2.6.2.0
+ */
+public class EnemyTest extends AbstractTest {
+	
+	@Mock
+	private Skill skill;
+	@Mock
+	private SkillUseHolder skillUseHolder;
+	@Mock
+	private L2Character activeChar;
+	@Mock
+	private L2Character target;
+	@Mock
+	private L2PcInstance player;
+	
+	private final Enemy enemy = new Enemy();
+	
+	@Test
+	public void test_invalid_affect_scope_should_return_empty_target_list() {
+		expect(skill.getAffectScope()).andReturn(NONE);
+		replay(skill);
+		
+		final var actual = enemy.getTargetList(skill, activeChar, false, target);
+		assertEquals(EMPTY_TARGET_LIST, actual);
+	}
+	
+	@Test
+	public void test_null_target_should_return_empty_target_list() {
+		expect(skill.getAffectScope()).andReturn(SINGLE);
+		replay(skill);
+		
+		final var actual = enemy.getTargetList(skill, activeChar, false, null);
+		assertEquals(EMPTY_TARGET_LIST, actual);
+	}
+	
+	@Test
+	public void test_dead_target_should_return_empty_target_list_with_invalid_target_message() {
+		expect(skill.getAffectScope()).andReturn(SINGLE);
+		expect(target.isDead()).andReturn(true);
+		activeChar.sendPacket(INCORRECT_TARGET);
+		expectLastCall().once();
+		replay(skill, target, activeChar);
+		
+		final var actual = enemy.getTargetList(skill, activeChar, false, target);
+		assertEquals(EMPTY_TARGET_LIST, actual);
+	}
+	
+	@Test
+	public void test_attackable_target_should_return_target() {
+		expect(skill.getAffectScope()).andReturn(SINGLE);
+		expect(target.isDead()).andReturn(false);
+		expect(target.isAttackable()).andReturn(true);
+		replay(skill, target);
+		
+		final var actual = enemy.getTargetList(skill, activeChar, false, target);
+		assertEquals(target, actual[0]);
+	}
+	
+	@Test
+	public void test_null_player_should_return_empty_target_list() {
+		expect(skill.getAffectScope()).andReturn(SINGLE);
+		expect(target.isDead()).andReturn(false);
+		expect(target.isAttackable()).andReturn(false);
+		expect(activeChar.getActingPlayer()).andReturn(null);
+		replay(skill, target, activeChar);
+		
+		final var actual = enemy.getTargetList(skill, activeChar, false, target);
+		assertEquals(EMPTY_TARGET_LIST, actual);
+	}
+	
+	@Test
+	public void test_player_cannot_pvp_target_and_no_ctrl_should_return_empty_target_list() {
+		expect(skill.getAffectScope()).andReturn(SINGLE);
+		expect(target.isDead()).andReturn(false);
+		expect(target.isAttackable()).andReturn(false);
+		expect(activeChar.getActingPlayer()).andReturn(player);
+		expect(player.checkIfPvP(target)).andReturn(false);
+		expect(player.getCurrentSkill()).andReturn(skillUseHolder);
+		expect(skillUseHolder.isCtrlPressed()).andReturn(false);
+		player.sendPacket(INCORRECT_TARGET);
+		expectLastCall().once();
+		replay(skill, target, activeChar, player, skillUseHolder);
+		
+		final var actual = enemy.getTargetList(skill, activeChar, false, target);
+		assertEquals(EMPTY_TARGET_LIST, actual);
+	}
+	
+	@Test
+	public void test_player_cannot_pvp_target_and_ctrl_should_return_target() {
+		expect(skill.getAffectScope()).andReturn(SINGLE);
+		expect(target.isDead()).andReturn(false);
+		expect(target.isAttackable()).andReturn(false);
+		expect(activeChar.getActingPlayer()).andReturn(player);
+		expect(player.checkIfPvP(target)).andReturn(false);
+		expect(player.getCurrentSkill()).andReturn(skillUseHolder);
+		expect(skillUseHolder.isCtrlPressed()).andReturn(true);
+		replay(skill, target, activeChar, player, skillUseHolder);
+		
+		final var actual = enemy.getTargetList(skill, activeChar, false, target);
+		assertEquals(target, actual[0]);
+	}
+	
+	@Test
+	public void test_player_can_pvp_target_should_return_target() {
+		expect(skill.getAffectScope()).andReturn(SINGLE);
+		expect(target.isDead()).andReturn(false);
+		expect(target.isAttackable()).andReturn(false);
+		expect(activeChar.getActingPlayer()).andReturn(player);
+		expect(player.checkIfPvP(target)).andReturn(true);
+		replay(skill, target, activeChar, player);
+		
+		final var actual = enemy.getTargetList(skill, activeChar, false, target);
+		assertEquals(target, actual[0]);
+	}
+}