diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/ai/fantasy_isle/HandysBlockCheckerEvent.java b/L2J_DataPack_BETA/dist/game/data/scripts/ai/fantasy_isle/HandysBlockCheckerEvent.java
index 9c2f0b50cf5c3d7d06f066b1dae0e952291e7704..de37a7b5780215a074d58608e719500a737d7fdd 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/ai/fantasy_isle/HandysBlockCheckerEvent.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/ai/fantasy_isle/HandysBlockCheckerEvent.java
@@ -41,6 +41,13 @@ public class HandysBlockCheckerEvent extends Quest
 	private static final int A_MANAGER_3 = 32523;
 	private static final int A_MANAGER_4 = 32524;
 	
+	public HandysBlockCheckerEvent()
+	{
+		super(-1, HandysBlockCheckerEvent.class.getSimpleName(), "Handy's Block Checker Event");
+		addFirstTalkId(A_MANAGER_1, A_MANAGER_2, A_MANAGER_3, A_MANAGER_4);
+		HandysBlockCheckerManager.getInstance().startUpParticipantsQueue();
+	}
+	
 	@Override
 	public String onFirstTalk(L2Npc npc, L2PcInstance player)
 	{
@@ -89,23 +96,16 @@ public class HandysBlockCheckerEvent extends Quest
 		return HandysBlockCheckerManager.getInstance().getHolder(arena).getAllPlayers().size() == 12;
 	}
 	
-	public HandysBlockCheckerEvent(int questId, String name, String descr)
-	{
-		super(questId, name, descr);
-		addFirstTalkId(A_MANAGER_1, A_MANAGER_2, A_MANAGER_3, A_MANAGER_4);
-	}
-	
 	public static void main(String[] args)
 	{
-		if (!Config.ENABLE_BLOCK_CHECKER_EVENT)
+		if (Config.ENABLE_BLOCK_CHECKER_EVENT)
 		{
-			_log.info("Handy's Block Checker Event is disabled");
+			new HandysBlockCheckerEvent();
+			_log.info("Handy's Block Checker Event is enabled");
 		}
 		else
 		{
-			new HandysBlockCheckerEvent(-1, HandysBlockCheckerEvent.class.getSimpleName(), "Handy's Block Checker Event");
-			HandysBlockCheckerManager.getInstance().startUpParticipantsQueue();
-			_log.info("Handy's Block Checker Event is enabled");
+			_log.info("Handy's Block Checker Event is disabled");
 		}
 	}
 }
\ No newline at end of file
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/ai/fantasy_isle/MC_Show.java b/L2J_DataPack_BETA/dist/game/data/scripts/ai/fantasy_isle/MC_Show.java
index 2c358982c5774c94b3ced3d987096d7a91f724ce..b6703bafd2142b884b435a7d1a8859df247eb6b6 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/ai/fantasy_isle/MC_Show.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/ai/fantasy_isle/MC_Show.java
@@ -178,8 +178,17 @@ public class MC_Show extends AbstractNpcAI
 	private static Map<String, ShoutInfo> talks = new FastMap<>();
 	private static Map<String, WalkInfo> walks = new FastMap<>();
 	
+	private MC_Show()
+	{
+		super(MC_Show.class.getSimpleName(), "ai/fantasy_isle");
+		addSpawnId(32433, 32431, 32432, 32442, 32443, 32444, 32445, 32446, 32424, 32425, 32426, 32427, 32428);
+		load();
+		scheduleTimer();
+	}
+	
 	private void load()
 	{
+		// TODO put this stuff in Routes.xml
 		talks.put("1", new ShoutInfo(MESSAGES[1], "2", 1000));
 		talks.put("2", new ShoutInfo(MESSAGES[2], "3", 6000));
 		talks.put("3", new ShoutInfo(MESSAGES[3], "4", 4000));
@@ -288,22 +297,9 @@ public class MC_Show extends AbstractNpcAI
 		walks.put("27", new WalkInfo(new L2CharPosition(-56702, -56340, -2008, 0), "29", 1800));
 	}
 	
-	private MC_Show(String name, String descr)
-	{
-		super(name, descr);
-		addSpawnId(32433, 32431, 32432, 32442, 32443, 32444, 32445, 32446, 32424, 32425, 32426, 32427, 32428);
-		load();
-		scheduleTimer();
-	}
-	
-	private int getGameTime()
-	{
-		return GameTimeController.getInstance().getGameTime();
-	}
-	
 	private void scheduleTimer()
 	{
-		int gameTime = getGameTime();
+		int gameTime = GameTimeController.getInstance().getGameTime();
 		int hours = (gameTime / 60) % 24;
 		int minutes = gameTime % 60;
 		int hourDiff, minDiff;
@@ -326,8 +322,9 @@ public class MC_Show extends AbstractNpcAI
 			SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
 			_log.info("Fantasy Isle: MC show script starting at " + format.format(System.currentTimeMillis() + diff) + " and is scheduled each next 4 hours.");
 		}
+		// TODO startQuestTimer("Start", 14400000L, null, null, true);
+		// missing option to provide different initial delay
 		ThreadPoolManager.getInstance().scheduleGeneralAtFixedRate(new StartMCShow(), diff, 14400000L);
-		
 	}
 	
 	private void autoChat(L2Npc npc, NpcStringId npcString, int type)
@@ -523,6 +520,6 @@ public class MC_Show extends AbstractNpcAI
 	
 	public static void main(String[] args)
 	{
-		new MC_Show(MC_Show.class.getSimpleName(), "ai");
+		new MC_Show();
 	}
 }
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/BeastFarm.java b/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/BeastFarm.java
index 1f90330015708b5c3eb6fd50f0be97f24c54301d..c4b7f6814ea34ea798adaa27e0c120a3676de301 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/BeastFarm.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/BeastFarm.java
@@ -115,7 +115,7 @@ public class BeastFarm extends AbstractNpcAI
 	
 	private BeastFarm()
 	{
-		super(BeastFarm.class.getSimpleName(), "ai");
+		super(BeastFarm.class.getSimpleName(), "ai/group_template");
 		registerMobs(FEEDABLE_BEASTS, QuestEventType.ON_KILL, QuestEventType.ON_SKILL_SEE);
 		
 		GrowthCapableMob temp;
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/Chests.java b/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/Chests.java
index a36bcd1585fe345fc0ad5bcc81ddfb8decc9f19d..660050ba40cdc6ab036f35ee0e21aaf80b321a73 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/Chests.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/Chests.java
@@ -35,87 +35,31 @@ import com.l2jserver.gameserver.util.Util;
  */
 public class Chests extends AbstractNpcAI
 {
+	// NPCs
+	// @formatter:off
+	private static final int[] TREASURE_CHESTS =
+	{
+		18265, 18266, 18267, 18268, 18269, 18270, 18271, 18272, 18273, 18274,
+		18275, 18276, 18277, 18278, 18279, 18280, 18281, 18282, 18283, 18284,
+		18285, 18286, 18287, 18288, 18289, 18290, 18291, 18292, 18293, 18294,
+		18295, 18296, 18297, 18298, 21671, 21694, 21717, 21740, 21763, 21786,
+		21801, 21802, 21803, 21804, 21805, 21806, 21807, 21808, 21809, 21810,
+		21811, 21812, 21813, 21814, 21815, 21816, 21817, 21818, 21819, 21820,
+		21821, 21822
+	};
+	// @formatter:on
 	private static final int SKILL_DELUXE_KEY = 2229;
-	
 	// Base chance for BOX to be opened
 	private static final int BASE_CHANCE = 100;
-	
 	// Percent to decrease base chance when grade of DELUXE key not match
 	private static final int LEVEL_DECREASE = 40;
-	
 	// Chance for a chest to actually be a BOX (as opposed to being a mimic).
 	private static final int IS_BOX = 40;
 	
-	private static final int[] NPC_IDS =
-	{
-		18265,
-		18266,
-		18267,
-		18268,
-		18269,
-		18270,
-		18271,
-		18272,
-		18273,
-		18274,
-		18275,
-		18276,
-		18277,
-		18278,
-		18279,
-		18280,
-		18281,
-		18282,
-		18283,
-		18284,
-		18285,
-		18286,
-		18287,
-		18288,
-		18289,
-		18290,
-		18291,
-		18292,
-		18293,
-		18294,
-		18295,
-		18296,
-		18297,
-		18298,
-		21671,
-		21694,
-		21717,
-		21740,
-		21763,
-		21786,
-		21801,
-		21802,
-		21803,
-		21804,
-		21805,
-		21806,
-		21807,
-		21808,
-		21809,
-		21810,
-		21811,
-		21812,
-		21813,
-		21814,
-		21815,
-		21816,
-		21817,
-		21818,
-		21819,
-		21820,
-		21821,
-		21822
-	};
-	
-	private Chests(String name, String descr)
+	private Chests()
 	{
-		super(name, descr);
-		registerMobs(NPC_IDS, QuestEventType.ON_ATTACK, QuestEventType.ON_SKILL_SEE);
+		super(Chests.class.getSimpleName(), "ai/group_template");
+		registerMobs(TREASURE_CHESTS, QuestEventType.ON_ATTACK, QuestEventType.ON_SKILL_SEE);
 	}
 	
 	@Override
@@ -130,15 +74,7 @@ public class Chests extends AbstractNpcAI
 				return super.onSkillSee(npc, caster, skill, targets, isSummon);
 			}
 			L2ChestInstance chest = ((L2ChestInstance) npc);
-			int npcId = chest.getNpcId();
-			int skillId = skill.getId();
-			int skillLevel = skill.getLevel();
 			
-			// check if the chest and skills used are valid for this script. Exit if invalid.
-			if (!Util.contains(NPC_IDS, npcId))
-			{
-				return super.onSkillSee(npc, caster, skill, targets, isSummon);
-			}
 			// if this has already been interacted, no further ai decisions are needed
 			// if it's the first interaction, check if this is a box or mimic
 			if (!chest.isInteracted())
@@ -147,11 +83,11 @@ public class Chests extends AbstractNpcAI
 				if (getRandom(100) < IS_BOX)
 				{
 					// if it's a box, either it will be successfully opened by a proper key, or instantly disappear
-					if (skillId == SKILL_DELUXE_KEY)
+					if (skill.getId() == SKILL_DELUXE_KEY)
 					{
 						// check the chance to open the box
 						int keyLevelNeeded = chest.getLevel() / 10;
-						keyLevelNeeded -= skillLevel;
+						keyLevelNeeded -= skill.getLevel();
 						if (keyLevelNeeded < 0)
 						{
 							keyLevelNeeded *= -1;
@@ -188,13 +124,6 @@ public class Chests extends AbstractNpcAI
 		if (npc instanceof L2ChestInstance)
 		{
 			L2ChestInstance chest = ((L2ChestInstance) npc);
-			int npcId = chest.getNpcId();
-			// check if the chest and skills used are valid for this script. Exit if invalid.
-			if (!Util.contains(NPC_IDS, npcId))
-			{
-				return super.onAttack(npc, attacker, damage, isSummon);
-			}
-			
 			// if this was a mimic, set the target, start the skills and become agro
 			if (!chest.isInteracted())
 			{
@@ -219,6 +148,6 @@ public class Chests extends AbstractNpcAI
 	
 	public static void main(String[] args)
 	{
-		new Chests(Chests.class.getSimpleName(), "ai");
+		new Chests();
 	}
 }
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/Chimeras.java b/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/Chimeras.java
index 91fa2c5e4e71d4e8b96d05256904aeefc8ee1929..d55aeb52b4cb1e30d99efc36c825387825dbc681 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/Chimeras.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/Chimeras.java
@@ -60,9 +60,9 @@ public class Chimeras extends AbstractNpcAI
 	private static final int LIFE_FORCE = 9681;
 	private static final int CONTAINED_LIFE_FORCE = 9682;
 	
-	private Chimeras(int questId, String name, String descr)
+	private Chimeras()
 	{
-		super(name, descr);
+		super(Chimeras.class.getSimpleName(), "ai/group_template");
 		addSkillSeeId(NPCS);
 		addSpawnId(CELTUS);
 		addSkillSeeId(CELTUS);
@@ -140,6 +140,6 @@ public class Chimeras extends AbstractNpcAI
 	
 	public static void main(String[] args)
 	{
-		new Chimeras(-1, Chimeras.class.getSimpleName(), "ai");
+		new Chimeras();
 	}
 }
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/DenOfEvil.java b/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/DenOfEvil.java
index e476ead4fa84b2133ac1d1e25af5e23695e0abae..7e25ba4744a46a8f5466634d7624f5cb9a6a8a9f 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/DenOfEvil.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/DenOfEvil.java
@@ -40,7 +40,6 @@ import com.l2jserver.gameserver.util.Util;
 public class DenOfEvil extends AbstractNpcAI
 {
 	// private static final int _buffer_id = 32656;
-	
 	protected static final int[] EYE_IDS =
 	{
 		18812,
@@ -97,9 +96,9 @@ public class DenOfEvil extends AbstractNpcAI
 		new Location(62905, -106109, -2384, 51288)
 	};
 	
-	private DenOfEvil(String name, String descr)
+	private DenOfEvil()
 	{
-		super(name, descr);
+		super(DenOfEvil.class.getSimpleName(), "ai/group_template");
 		registerMobs(EYE_IDS, QuestEventType.ON_KILL, QuestEventType.ON_SPAWN);
 		spawnEyes();
 	}
@@ -114,49 +113,43 @@ public class DenOfEvil extends AbstractNpcAI
 	@Override
 	public String onSpawn(L2Npc npc)
 	{
-		if (Util.contains(EYE_IDS, npc.getNpcId()))
+		npc.disableCoreAI(true);
+		npc.setIsImmobilized(true);
+		L2EffectZone zone = ZoneManager.getInstance().getZone(npc, L2EffectZone.class);
+		if (zone == null)
 		{
-			npc.disableCoreAI(true);
-			npc.setIsImmobilized(true);
-			L2EffectZone zone = ZoneManager.getInstance().getZone(npc, L2EffectZone.class);
-			if (zone == null)
-			{
-				_log.warning("NPC " + npc + " spawned outside of L2EffectZone, check your zone coords! X:" + npc.getX() + " Y:" + npc.getY() + " Z:" + npc.getZ());
-				return null;
-			}
-			int skillId = getSkillIdByNpcId(npc.getNpcId());
-			int skillLevel = zone.getSkillLevel(skillId);
-			zone.addSkill(skillId, skillLevel + 1);
-			if (skillLevel == 3) // 3+1=4
-			{
-				ThreadPoolManager.getInstance().scheduleAi(new KashaDestruction(zone), 2 * 60 * 1000l);
-				zone.broadcastPacket(SystemMessage.getSystemMessage(SystemMessageId.KASHA_EYE_PITCHES_TOSSES_EXPLODE));
-			}
-			else if (skillLevel == 2)
-			{
-				zone.broadcastPacket(SystemMessage.getSystemMessage(SystemMessageId.I_CAN_FEEL_ENERGY_KASHA_EYE_GETTING_STRONGER_RAPIDLY));
-			}
+			_log.warning("NPC " + npc + " spawned outside of L2EffectZone, check your zone coords! X:" + npc.getX() + " Y:" + npc.getY() + " Z:" + npc.getZ());
+			return null;
 		}
-		return null;
+		int skillId = getSkillIdByNpcId(npc.getNpcId());
+		int skillLevel = zone.getSkillLevel(skillId);
+		zone.addSkill(skillId, skillLevel + 1);
+		if (skillLevel == 3) // 3+1=4
+		{
+			ThreadPoolManager.getInstance().scheduleAi(new KashaDestruction(zone), 2 * 60 * 1000l);
+			zone.broadcastPacket(SystemMessage.getSystemMessage(SystemMessageId.KASHA_EYE_PITCHES_TOSSES_EXPLODE));
+		}
+		else if (skillLevel == 2)
+		{
+			zone.broadcastPacket(SystemMessage.getSystemMessage(SystemMessageId.I_CAN_FEEL_ENERGY_KASHA_EYE_GETTING_STRONGER_RAPIDLY));
+		}
+		return super.onSpawn(npc);
 	}
 	
 	@Override
 	public String onKill(L2Npc npc, L2PcInstance killer, boolean isSummon)
 	{
-		if (Util.contains(EYE_IDS, npc.getNpcId()))
+		ThreadPoolManager.getInstance().scheduleAi(new RespawnNewEye(npc.getLocation()), 15000);
+		L2EffectZone zone = ZoneManager.getInstance().getZone(npc, L2EffectZone.class);
+		if (zone == null)
 		{
-			ThreadPoolManager.getInstance().scheduleAi(new RespawnNewEye(npc.getLocation()), 15000);
-			L2EffectZone zone = ZoneManager.getInstance().getZone(npc, L2EffectZone.class);
-			if (zone == null)
-			{
-				_log.warning("NPC " + npc + " killed outside of L2EffectZone, check your zone coords! X:" + npc.getX() + " Y:" + npc.getY() + " Z:" + npc.getZ());
-				return null;
-			}
-			int skillId = getSkillIdByNpcId(npc.getNpcId());
-			int skillLevel = zone.getSkillLevel(skillId);
-			zone.addSkill(skillId, skillLevel - 1);
+			_log.warning("NPC " + npc + " killed outside of L2EffectZone, check your zone coords! X:" + npc.getX() + " Y:" + npc.getY() + " Z:" + npc.getZ());
+			return null;
 		}
-		return null;
+		int skillId = getSkillIdByNpcId(npc.getNpcId());
+		int skillLevel = zone.getSkillLevel(skillId);
+		zone.addSkill(skillId, skillLevel - 1);
+		return super.onKill(npc, killer, isSummon);
 	}
 	
 	private void spawnEyes()
@@ -244,6 +237,6 @@ public class DenOfEvil extends AbstractNpcAI
 	
 	public static void main(String[] args)
 	{
-		new DenOfEvil(DenOfEvil.class.getSimpleName(), "ai");
+		new DenOfEvil();
 	}
 }
\ No newline at end of file
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/EnergySeeds.java b/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/EnergySeeds.java
index e6acc9633453f4ab187d5c0fb5b7fe63ba35fb53..54cc8206e9b91cdd6b426fa6e7f0ae5c604466a3 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/EnergySeeds.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/EnergySeeds.java
@@ -61,76 +61,33 @@ public class EnergySeeds extends AbstractNpcAI
 	protected static Map<L2Npc, Integer> _spawnedNpcs = new FastMap<L2Npc, Integer>().shared();
 	
 	private static final int TEMPORARY_TELEPORTER = 32602;
+	// @formatter:off
 	private static final int[] SEED_IDS =
 	{
-		18678,
-		18679,
-		18680,
-		18681,
-		18682,
-		18683
+		18678, 18679, 18680, 18681, 18682, 18683
 	};
 	
 	private static final int[][] ANNIHILATION_SUPRISE_MOB_IDS =
 	{
-		{
-			22746,
-			22747,
-			22748,
-			22749
-		},
-		{
-			22754,
-			22755,
-			22756
-		},
-		{
-			22760,
-			22761,
-			22762
-		}
+		{ 22746, 22747, 22748, 22749 },
+		{ 22754, 22755, 22756 },
+		{ 22760, 22761, 22762 }
 	};
 	
 	private static int[] SEED_OF_DESTRUCTION_DOORS =
 	{
-		12240003,
-		12240004,
-		12240005,
-		12240006,
-		12240007,
-		12240008,
-		12240009,
-		12240010,
-		12240011,
-		12240012,
-		12240013,
-		12240014,
-		12240015,
-		12240016,
-		12240017,
-		12240018,
-		12240019,
-		12240020,
-		12240021,
-		12240022,
-		12240023,
-		12240024,
-		12240025,
-		12240026,
-		12240027,
-		12240028,
-		12240029,
-		12240030,
+		12240003, 12240004, 12240005, 12240006, 12240007, 12240008, 12240009,
+		12240010, 12240011, 12240012, 12240013, 12240014, 12240015, 12240016,
+		12240017, 12240018, 12240019, 12240020, 12240021, 12240022, 12240023,
+		12240024, 12240025, 12240026, 12240027, 12240028, 12240029, 12240030,
 		12240031
 	};
-	
-	private static final int SOD_ZONE = 60009;
 	private static final int[] SOD_EXIT_POINT =
 	{
-		-248717,
-		250260,
-		4337
+		-248717, 250260, 4337
 	};
+	// @formatter:off
+	private static final int SOD_ZONE = 60009;
 	
 	private enum GraciaSeeds
 	{
@@ -141,6 +98,17 @@ public class EnergySeeds extends AbstractNpcAI
 		ANNIHILATION_COKRAKON
 	}
 	
+	private EnergySeeds()
+	{
+		super(EnergySeeds.class.getSimpleName(), "instances"); // ai/group_template?
+		registerMobs(SEED_IDS);
+		addFirstTalkId(SEED_IDS);
+		addFirstTalkId(TEMPORARY_TELEPORTER);
+		addEnterZoneId(SOD_ZONE);
+		addSpawnsToList();
+		startAI();
+	}
+	
 	protected boolean isSeedActive(GraciaSeeds seed)
 	{
 		switch (seed)
@@ -808,17 +776,6 @@ public class EnergySeeds extends AbstractNpcAI
 		}
 	}
 	
-	private EnergySeeds()
-	{
-		super(EnergySeeds.class.getSimpleName(), "instances");
-		registerMobs(SEED_IDS);
-		addFirstTalkId(SEED_IDS);
-		addFirstTalkId(TEMPORARY_TELEPORTER);
-		addEnterZoneId(SOD_ZONE);
-		addSpawnsToList();
-		startAI();
-	}
-	
 	public static void main(String[] args)
 	{
 		new EnergySeeds();
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/EvasGiftBoxes.java b/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/EvasGiftBoxes.java
index eed47cd00c62f16ee576950acdfc12ec391cb7cc..8c5f241a1de5afa939af825e68238af70b22698a 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/EvasGiftBoxes.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/EvasGiftBoxes.java
@@ -29,32 +29,21 @@ import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
  */
 public class EvasGiftBoxes extends AbstractNpcAI
 {
+	// Monster
 	private static final int GIFTBOX = 32342;
-	
+	// Skill
 	private static final int KISSOFEVA = 1073;
-	
-	// index 0: without kiss of eva
-	// index 1: with kiss of eva
-	// chance,itemId,...
+	// @formatter:off
 	private static final int[][] CHANCES =
 	{
-		{
-			2,
-			9692,
-			1,
-			9693
-		},
-		{
-			100,
-			9692,
-			50,
-			9693
-		}
+		// chance,itemId,...
+		{ 2, 9692, 1, 9693 }, // without kiss of eva
+		{ 100, 9692, 50, 9693 } // with kiss of eva
 	};
-	
-	private EvasGiftBoxes(String name, String descr)
+	// @formatter:on
+	private EvasGiftBoxes()
 	{
-		super(name, descr);
+		super(EvasGiftBoxes.class.getSimpleName(), "ai/group_template");
 		addKillId(GIFTBOX);
 		addSpawnId(GIFTBOX);
 	}
@@ -89,6 +78,6 @@ public class EvasGiftBoxes extends AbstractNpcAI
 	
 	public static void main(String[] args)
 	{
-		new EvasGiftBoxes(EvasGiftBoxes.class.getSimpleName(), "ai");
+		new EvasGiftBoxes();
 	}
 }
\ No newline at end of file
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/FairyTrees.java b/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/FairyTrees.java
index d79b0962432ee6ed401af4967add5477b12dd8b7..a2f458ec4d092e20e6dc015b41b73a1e04aee388 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/FairyTrees.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/FairyTrees.java
@@ -31,24 +31,23 @@ import com.l2jserver.gameserver.util.Util;
 import com.l2jserver.util.Rnd;
 
 /**
- * Fairy Trees AI
+ * Fairy Trees AI.
  * @author Charus
  */
 public class FairyTrees extends AbstractNpcAI
 {
+	// @formatter:off
 	private static final int[] MOBS =
 	{
-		27185,
-		27186,
-		27187,
-		27188
+		27185, 27186, 27187, 27188
 	};
+	// @formatter:on
 	
-	private FairyTrees(String name, String descr)
+	private FairyTrees()
 	{
-		super(name, descr);
+		super(FairyTrees.class.getSimpleName(), "ai/group_template");
 		registerMobs(MOBS, QuestEventType.ON_KILL);
-		addSpawnId(27189);
+		addSpawnId(27189); // TODO why is this here?
 	}
 	
 	@Override
@@ -79,6 +78,6 @@ public class FairyTrees extends AbstractNpcAI
 	
 	public static void main(String[] args)
 	{
-		new FairyTrees(FairyTrees.class.getSimpleName(), "ai");
+		new FairyTrees();
 	}
 }
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/FeedableBeasts.java b/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/FeedableBeasts.java
index fddbd6b10ca61535d7b7fde012ae6eed10df92ab..8029b917552021e501340575c9913b56eaca3e2b 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/FeedableBeasts.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/FeedableBeasts.java
@@ -48,90 +48,24 @@ public class FeedableBeasts extends AbstractNpcAI
 	private static final int CRYSTAL_SPICE = 6644;
 	private static final int SKILL_GOLDEN_SPICE = 2188;
 	private static final int SKILL_CRYSTAL_SPICE = 2189;
+	private static final int FOODSKILLDIFF = GOLDEN_SPICE - SKILL_GOLDEN_SPICE;
+	// @formatter:off
 	private static final int[] TAMED_BEASTS =
 	{
-		16013,
-		16014,
-		16015,
-		16016,
-		16017,
-		16018
+		16013, 16014, 16015, 16016, 16017, 16018
 	};
-	private static final int FOODSKILLDIFF = GOLDEN_SPICE - SKILL_GOLDEN_SPICE;
-	
 	// all mobs that can eat...
 	private static final int[] FEEDABLE_BEASTS =
 	{
-		21451,
-		21452,
-		21453,
-		21454,
-		21455,
-		21456,
-		21457,
-		21458,
-		21459,
-		21460,
-		21461,
-		21462,
-		21463,
-		21464,
-		21465,
-		21466,
-		21467,
-		21468,
-		21469,
-		21470,
-		21471,
-		21472,
-		21473,
-		21474,
-		21475,
-		21476,
-		21477,
-		21478,
-		21479,
-		21480,
-		21481,
-		21482,
-		21483,
-		21484,
-		21485,
-		21486,
-		21487,
-		21488,
-		21489,
-		21490,
-		21491,
-		21492,
-		21493,
-		21494,
-		21495,
-		21496,
-		21497,
-		21498,
-		21499,
-		21500,
-		21501,
-		21502,
-		21503,
-		21504,
-		21505,
-		21506,
-		21507,
-		21824,
-		21825,
-		21826,
-		21827,
-		21828,
-		21829,
-		16013,
-		16014,
-		16015,
-		16016,
-		16017,
-		16018
+		21451, 21452, 21453, 21454, 21455, 21456, 21457, 21458, 21459, 21460,
+		21461, 21462, 21463, 21464, 21465, 21466, 21467, 21468, 21469, 21470,
+		21471, 21472, 21473, 21474, 21475, 21476, 21477, 21478, 21479, 21480,
+		21481, 21482, 21483, 21484, 21485, 21486, 21487, 21488, 21489, 21490,
+		21491, 21492, 21493, 21494, 21495, 21496, 21497, 21498, 21499, 21500,
+		21501, 21502, 21503, 21504, 21505, 21506, 21507, 21824, 21825, 21826,
+		21827, 21828, 21829, 16013, 16014, 16015, 16016, 16017, 16018
 	};
+	// @formatter:on
 	
 	private static final Map<Integer, Integer> MAD_COW_POLYMORPH = new FastMap<>();
 	static
@@ -238,7 +172,7 @@ public class FeedableBeasts extends AbstractNpcAI
 	
 	private FeedableBeasts()
 	{
-		super(FeedableBeasts.class.getSimpleName(), "ai");
+		super(FeedableBeasts.class.getSimpleName(), "ai/group_template");
 		registerMobs(FEEDABLE_BEASTS, QuestEventType.ON_KILL, QuestEventType.ON_SKILL_SEE);
 		
 		// TODO: no grendels?
@@ -577,7 +511,7 @@ public class FeedableBeasts extends AbstractNpcAI
 		int npcId = npc.getNpcId();
 		int skillId = skill.getId();
 		// check if the npc and skills used are valid for this script. Exit if invalid.
-		if (!Util.contains(FEEDABLE_BEASTS, npcId) || ((skillId != SKILL_GOLDEN_SPICE) && (skillId != SKILL_CRYSTAL_SPICE)))
+		if ((skillId != SKILL_GOLDEN_SPICE) && (skillId != SKILL_CRYSTAL_SPICE))
 		{
 			return super.onSkillSee(npc, caster, skill, targets, isSummon);
 		}
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/FrozenLabyrinth.java b/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/FrozenLabyrinth.java
index bdc81283b72f20d1793960524d849b6f3641ac8d..15f34ecd4d523220cd6e4c19ff84f49f2f8ba2de 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/FrozenLabyrinth.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/FrozenLabyrinth.java
@@ -26,7 +26,7 @@ import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.skills.L2Skill;
 
 /**
- * Frozen Labyrinth AI
+ * Frozen Labyrinth AI.
  * @author malyelfik
  */
 public final class FrozenLabyrinth extends AbstractNpcAI
@@ -37,9 +37,9 @@ public final class FrozenLabyrinth extends AbstractNpcAI
 	private static final int LOST_BUFFALO = 22093;
 	private static final int FROST_BUFFALO = 22094;
 	
-	private FrozenLabyrinth(String name, String descr)
+	private FrozenLabyrinth()
 	{
-		super(name, descr);
+		super(FrozenLabyrinth.class.getSimpleName(), "ai/group_template");
 		addAttackId(PRONGHORN, FROST_BUFFALO);
 	}
 	
@@ -72,6 +72,6 @@ public final class FrozenLabyrinth extends AbstractNpcAI
 	
 	public static void main(String[] args)
 	{
-		new FrozenLabyrinth(FrozenLabyrinth.class.getSimpleName(), "ai/group_template");
+		new FrozenLabyrinth();
 	}
 }
\ No newline at end of file
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/GiantScouts.java b/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/GiantScouts.java
index 5db48a5eba653e3d4222c608ea217dd673208c88..8ca3a4c56f597dd15dd1cf94c01c69341dda2f68 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/GiantScouts.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/GiantScouts.java
@@ -40,16 +40,10 @@ import com.l2jserver.gameserver.network.serverpackets.CreatureSay;
  */
 public class GiantScouts extends AbstractNpcAI
 {
-	private static final int[] SCOUTS =
+	private GiantScouts()
 	{
-		22668,
-		22669
-	};
-	
-	private GiantScouts(String name, String descr)
-	{
-		super(name, descr);
-		addAggroRangeEnterId(SCOUTS);
+		super(GiantScouts.class.getSimpleName(), "ai/group_template");
+		addAggroRangeEnterId(22668, 22669); // scouts
 	}
 	
 	@Override
@@ -95,6 +89,6 @@ public class GiantScouts extends AbstractNpcAI
 	
 	public static void main(String[] args)
 	{
-		new GiantScouts(GiantScouts.class.getSimpleName(), "ai");
+		new GiantScouts();
 	}
 }
\ No newline at end of file
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/IsleOfPrayer.java b/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/IsleOfPrayer.java
index ca7787fee68f366c09b4cfaecb71d54ffe17545d..06860c2a66250eb83e02b26921028b6611b7cabd 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/IsleOfPrayer.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/IsleOfPrayer.java
@@ -54,7 +54,7 @@ public class IsleOfPrayer extends AbstractNpcAI
 	
 	private IsleOfPrayer()
 	{
-		super(IsleOfPrayer.class.getSimpleName(), "ai");
+		super(IsleOfPrayer.class.getSimpleName(), "ai/group_template");
 		addKillId(MUDDY_CORAL);
 	}
 	
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/MithrilMines.java b/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/MithrilMines.java
index b4765e32a049e0b429360efa1d8169ff479509a2..063572981cb0ef8f129860652401f5d0da72c22f 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/MithrilMines.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/MithrilMines.java
@@ -26,7 +26,7 @@ import com.l2jserver.gameserver.model.actor.L2Npc;
 import com.l2jserver.gameserver.model.actor.instance.L2MonsterInstance;
 
 /**
- * Mithril Mines AI
+ * Mithril Mines AI.
  * @author malyelfik
  */
 public final class MithrilMines extends AbstractNpcAI
@@ -45,9 +45,9 @@ public final class MithrilMines extends AbstractNpcAI
 		22686, // Servitor of Darkness
 	};
 	
-	private MithrilMines(String name, String descr)
+	private MithrilMines()
 	{
-		super(name, descr);
+		super(MithrilMines.class.getSimpleName(), "ai/group_template");
 		addSpawnId(GRAVE_ROBBER_SUMMONER, GRAVE_ROBBER_MAGICIAN);
 		
 		for (L2Spawn spawn : SpawnTable.getInstance().getSpawns(GRAVE_ROBBER_SUMMONER))
@@ -75,6 +75,6 @@ public final class MithrilMines extends AbstractNpcAI
 	
 	public static void main(String[] args)
 	{
-		new MithrilMines(MithrilMines.class.getSimpleName(), "ai/group_template");
+		new MithrilMines();
 	}
 }
\ No newline at end of file
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/Monastery.java b/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/Monastery.java
index 14f06be6b14cbd7a19f91aa32f5917324b4b6afc..8dd8c2b21836a935e2dafba873f73c9ab243dd56 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/Monastery.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/Monastery.java
@@ -75,9 +75,9 @@ public class Monastery extends AbstractNpcAI
 	
 	private static final SkillHolder DECREASE_SPEED = new SkillHolder(4589, 8);
 	
-	private Monastery(String name, String descr)
+	private Monastery()
 	{
-		super(name, descr);
+		super(Monastery.class.getSimpleName(), "ai/group_template");
 		addAggroRangeEnterId(SOLINA_CLAN);
 		addAggroRangeEnterId(CAPTAIN, KNIGHT);
 		addSpellFinishedId(SOLINA_CLAN);
@@ -100,29 +100,25 @@ public class Monastery extends AbstractNpcAI
 	@Override
 	public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
 	{
-		switch (event)
+		if (event.equals("training") && !npc.isInCombat() && (getRandom(100) < 25))
 		{
-			case "training":
-				if (!npc.isInCombat() && (getRandom(100) < 25))
+			for (L2Character character : npc.getKnownList().getKnownCharactersInRadius(300))
+			{
+				if (character.isNpc() && (((L2Npc) character).getNpcId() == SCARECROW))
 				{
-					for (L2Character character : npc.getKnownList().getKnownCharactersInRadius(300))
+					for (L2Skill skill : npc.getAllSkills())
 					{
-						if (!character.isPlayable() && (((L2Npc) character).getNpcId() == SCARECROW))
+						if (skill.isActive())
 						{
-							for (L2Skill skill : npc.getAllSkills())
-							{
-								if (skill.isActive())
-								{
-									npc.disableSkill(skill, 0);
-								}
-							}
-							npc.setRunning();
-							((L2Attackable) npc).addDamageHate(character, 0, 100);
-							npc.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, character, null);
-							break;
+							npc.disableSkill(skill, 0);
 						}
 					}
+					npc.setRunning();
+					((L2Attackable) npc).addDamageHate(character, 0, 100);
+					npc.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, character, null);
+					break;
 				}
+			}
 		}
 		return super.onAdvEvent(event, npc, player);
 	}
@@ -209,6 +205,6 @@ public class Monastery extends AbstractNpcAI
 	
 	public static void main(String[] args)
 	{
-		new Monastery(Monastery.class.getSimpleName(), "ai/group_template");
+		new Monastery();
 	}
 }
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/NonLethalableNpcs.java b/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/NonLethalableNpcs.java
index 333566a3f03d90cbabbf4f940b62d0b7178a11a7..caf0fd63090aa1cc3d6ce6e49ec2bf39b3c0a4ee 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/NonLethalableNpcs.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/NonLethalableNpcs.java
@@ -29,22 +29,15 @@ import com.l2jserver.gameserver.model.actor.L2Npc;
  */
 public class NonLethalableNpcs extends AbstractNpcAI
 {
-	private static final int[] NPCS =
-	{
-		35062, // Headquarters
-	};
+	private static final int HEADQUARTERS = 35062;
 	
-	public NonLethalableNpcs(String name, String descr)
+	public NonLethalableNpcs()
 	{
-		super(name, descr);
-		addSpawnId(NPCS);
-		
-		for (int npcId : NPCS)
+		super(NonLethalableNpcs.class.getSimpleName(), "ai/group_template");
+		addSpawnId(HEADQUARTERS);
+		for (L2Spawn spawn : SpawnTable.getInstance().getSpawns(HEADQUARTERS))
 		{
-			for (L2Spawn spawn : SpawnTable.getInstance().getSpawns(npcId))
-			{
-				onSpawn(spawn.getLastSpawn());
-			}
+			onSpawn(spawn.getLastSpawn());
 		}
 	}
 	
@@ -57,6 +50,6 @@ public class NonLethalableNpcs extends AbstractNpcAI
 	
 	public static void main(String[] args)
 	{
-		new NonLethalableNpcs(NonLethalableNpcs.class.getSimpleName(), "ai/group_template");
+		new NonLethalableNpcs();
 	}
 }
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/PavelArchaic.java b/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/PavelArchaic.java
index 0e14c502a2cfed6d6289337ec9277b0a1cfcb533..1f2367e6980d1c85eb8e7c87d351d286593a4066 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/PavelArchaic.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/PavelArchaic.java
@@ -30,22 +30,11 @@ import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
  */
 public class PavelArchaic extends AbstractNpcAI
 {
-	private static final int[] MOBS1 =
+	private PavelArchaic()
 	{
-		22801,
-		22804
-	};
-	
-	private static final int[] MOBS2 =
-	{
-		18917
-	};
-	
-	private PavelArchaic(String name, String descr)
-	{
-		super(name, descr);
-		registerMobs(MOBS1, QuestEventType.ON_KILL);
-		registerMobs(MOBS2, QuestEventType.ON_ATTACK);
+		super(PavelArchaic.class.getSimpleName(), "ai/group_template");
+		addKillId(22801, 22804);
+		addAttackId(18917);
 	}
 	
 	@Override
@@ -70,13 +59,13 @@ public class PavelArchaic extends AbstractNpcAI
 	@Override
 	public String onKill(L2Npc npc, L2PcInstance killer, boolean isSummon)
 	{
-		L2Attackable _golem = (L2Attackable) addSpawn(npc.getNpcId() + 1, npc.getLocation(), false, 0);
-		attackPlayer(_golem, killer);
+		L2Attackable golem = (L2Attackable) addSpawn(npc.getNpcId() + 1, npc.getLocation(), false, 0);
+		attackPlayer(golem, killer);
 		return super.onKill(npc, killer, isSummon);
 	}
 	
 	public static void main(String[] args)
 	{
-		new PavelArchaic(PavelArchaic.class.getSimpleName(), "ai");
+		new PavelArchaic();
 	}
 }
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/PlainsOfDion.java b/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/PlainsOfDion.java
index 8467191a33a4d7981e776d95ce60a4d0f92504ec..3dc7e9ae36c1ebbc2fc1b9ba326b484f7c413939 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/PlainsOfDion.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/PlainsOfDion.java
@@ -30,12 +30,12 @@ import com.l2jserver.gameserver.network.clientpackets.Say2;
 import com.l2jserver.gameserver.util.Util;
 
 /**
- * AI for mobs in Plains of Dion (near Floran Village)
+ * AI for mobs in Plains of Dion (near Floran Village).
  * @author Gladicek
  */
 public final class PlainsOfDion extends AbstractNpcAI
 {
-	private static final int MONSTERS[] =
+	private static final int DELU_LIZARDMEN[] =
 	{
 		21104, // Delu Lizardman Supplier
 		21105, // Delu Lizardman Special Agent
@@ -58,10 +58,10 @@ public final class PlainsOfDion extends AbstractNpcAI
 		NpcStringId.WHAT_ARE_YOU_LOOKING_AT
 	};
 	
-	private PlainsOfDion(String name, String descr)
+	private PlainsOfDion()
 	{
-		super(name, descr);
-		addAttackId(MONSTERS);
+		super(PlainsOfDion.class.getSimpleName(), "ai/group_template");
+		addAttackId(DELU_LIZARDMEN);
 	}
 	
 	@Override
@@ -81,7 +81,7 @@ public final class PlainsOfDion extends AbstractNpcAI
 			
 			for (L2Character obj : npc.getKnownList().getKnownCharactersInRadius(npc.getFactionRange()))
 			{
-				if (obj.isMonster() && Util.contains(MONSTERS, ((L2MonsterInstance) obj).getNpcId()) && !obj.isAttackingNow() && !obj.isDead() && GeoData.getInstance().canSeeTarget(npc, obj))
+				if (obj.isMonster() && Util.contains(DELU_LIZARDMEN, ((L2MonsterInstance) obj).getNpcId()) && !obj.isAttackingNow() && !obj.isDead() && GeoData.getInstance().canSeeTarget(npc, obj))
 				{
 					final L2MonsterInstance monster = (L2MonsterInstance) obj;
 					attackPlayer(monster, player);
@@ -95,6 +95,6 @@ public final class PlainsOfDion extends AbstractNpcAI
 	
 	public static void main(String[] args)
 	{
-		new PlainsOfDion(PlainsOfDion.class.getSimpleName(), "ai");
+		new PlainsOfDion();
 	}
 }
\ No newline at end of file
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/PlainsOfLizardman.java b/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/PlainsOfLizardman.java
index 700d3be1de2af9d7e50f9eab8810666315d0bc74..54207031910eaef6f259b393d98e23ae13963b8e 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/PlainsOfLizardman.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/PlainsOfLizardman.java
@@ -29,7 +29,7 @@ import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.holders.SkillHolder;
 
 /**
- * Plains of Lizardman AI
+ * Plains of Lizardmen AI.
  * @author Gnacik, malyelfik
  */
 public final class PlainsOfLizardman extends AbstractNpcAI
@@ -44,7 +44,7 @@ public final class PlainsOfLizardman extends AbstractNpcAI
 	private static final int TANTA_SCOUT = 22768;
 	private static final int TANTA_MAGICIAN = 22773;
 	private static final int TANTA_SUMMONER = 22774;
-	private static final int[] MOBS =
+	private static final int[] TANTA_LIZARDMEN =
 	{
 		22768, // Tanta Lizardman Scout
 		22769, // Tanta Lizardman Warrior
@@ -54,7 +54,6 @@ public final class PlainsOfLizardman extends AbstractNpcAI
 		22773, // Tanta Lizardman Magician
 		22774, // Tanta Lizardman Summoner
 	};
-	
 	// Skills
 	private static final SkillHolder STUN_EFFECT = new SkillHolder(6622, 1);
 	private static final SkillHolder DEMOTIVATION_HEX = new SkillHolder(6425, 1);
@@ -62,7 +61,6 @@ public final class PlainsOfLizardman extends AbstractNpcAI
 	private static final SkillHolder RAINBOW_FROG_SKILL = new SkillHolder(6429, 1);
 	private static final SkillHolder STICKY_MUSHROOM_SKILL = new SkillHolder(6428, 1);
 	private static final SkillHolder ENERGY_PLANT_SKILL = new SkillHolder(6430, 1);
-	
 	// Buffs
 	private static final SkillHolder[] BUFFS =
 	{
@@ -81,22 +79,19 @@ public final class PlainsOfLizardman extends AbstractNpcAI
 		new SkillHolder(6640, 1), // Energizing Aura
 		new SkillHolder(6674, 1), // Energy of Range Increment
 	};
-	
 	// Misc
+	// @formatter:off
 	private static final int[] BUFF_LIST =
 	{
-		6,
-		7,
-		8,
-		11,
-		13
+		6, 7, 8, 11, 13
 	};
+	// @formatter:on
 	
-	private PlainsOfLizardman(String name, String descr)
+	private PlainsOfLizardman()
 	{
-		super(name, descr);
+		super(PlainsOfLizardman.class.getSimpleName(), "ai/group_template");
 		addAttackId(FANTASY_MUSHROOM, RAINBOW_FROG, STICKY_MUSHROOM, ENERGY_PLANT, TANTA_SUMMONER);
-		addKillId(MOBS);
+		addKillId(TANTA_LIZARDMEN);
 	}
 	
 	@Override
@@ -246,6 +241,6 @@ public final class PlainsOfLizardman extends AbstractNpcAI
 	
 	public static void main(String[] args)
 	{
-		new PlainsOfLizardman(PlainsOfLizardman.class.getSimpleName(), "ai");
+		new PlainsOfLizardman();
 	}
 }
\ No newline at end of file
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/PolymorphingAngel.java b/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/PolymorphingAngel.java
index d79fdbee80b1d282f2907a7ace3bdf57a4b5baae..767abd9785a0dd82db0cd66549388953f75c6fee 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/PolymorphingAngel.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/PolymorphingAngel.java
@@ -42,9 +42,9 @@ public class PolymorphingAngel extends AbstractNpcAI
 		ANGELSPAWNS.put(21070, 21071);
 	}
 	
-	private PolymorphingAngel(String name, String descr)
+	private PolymorphingAngel()
 	{
-		super(name, descr);
+		super(PolymorphingAngel.class.getSimpleName(), "ai/group_template");
 		addKillId(ANGELSPAWNS.keySet());
 	}
 	
@@ -58,6 +58,6 @@ public class PolymorphingAngel extends AbstractNpcAI
 	
 	public static void main(String[] args)
 	{
-		new PolymorphingAngel(PolymorphingAngel.class.getSimpleName(), "ai");
+		new PolymorphingAngel();
 	}
 }
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/PolymorphingOnAttack.java b/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/PolymorphingOnAttack.java
index 8e515f005962747d571c5b677b25a454e4f2da6f..cf1e931bdbcb69b2ee00f98480dc19efdee35f45 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/PolymorphingOnAttack.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/PolymorphingOnAttack.java
@@ -57,7 +57,6 @@ public class PolymorphingOnAttack extends AbstractNpcAI
 		MOBSPAWNS.put(21533, Arrays.asList(21534, 100, 30, -1)); // Alliance of Splendor
 		MOBSPAWNS.put(21537, Arrays.asList(21538, 100, 30, -1)); // Fang of Splendor
 	}
-	
 	protected static final NpcStringId[][] MOBTEXTS =
 	{
 		new NpcStringId[]
@@ -80,9 +79,9 @@ public class PolymorphingOnAttack extends AbstractNpcAI
 		}
 	};
 	
-	private PolymorphingOnAttack(String name, String descr)
+	private PolymorphingOnAttack()
 	{
-		super(name, descr);
+		super(PolymorphingOnAttack.class.getSimpleName(), "ai/group_template");
 		registerMobs(MOBSPAWNS.keySet(), QuestEventType.ON_ATTACK);
 	}
 	
@@ -116,6 +115,6 @@ public class PolymorphingOnAttack extends AbstractNpcAI
 	
 	public static void main(String[] args)
 	{
-		new PolymorphingOnAttack(PolymorphingOnAttack.class.getSimpleName(), "ai");
+		new PolymorphingOnAttack();
 	}
 }
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/PrisonGuards.java b/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/PrisonGuards.java
index 237cc48a42cc064979cd22e0f41666e46122fc2f..17afef17c3d2bdc74e1f1d21773a3aed5abdaf65 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/PrisonGuards.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/PrisonGuards.java
@@ -56,23 +56,18 @@ public class PrisonGuards extends AbstractNpcAI
 		"4th"
 	};
 	
-	private final static int silence = 4098;
-	private final static int pertification = 4578;
-	private final static int eventTimer = 5239;
+	private final static int SKILL_SILENCE = 4098;
+	private final static int SKILL_PERTIFICATION = 4578;
+	private final static int SKILL_EVENT_TIMER = 5239;
 	
 	private boolean _firstAttacked = false;
 	
 	private final Map<L2Npc, Integer> _guards = new FastMap<>();
 	
-	private PrisonGuards(String name, String descr)
+	private PrisonGuards()
 	{
-		super(name, descr);
-		int[] mob =
-		{
-			GUARD1,
-			GUARD2
-		};
-		registerMobs(mob);
+		super(PrisonGuards.class.getSimpleName(), "ai/group_template");
+		registerMobs(GUARD1, GUARD2);
 		
 		// place 1
 		_guards.put(addSpawn(GUARD2, 160704, 184704, -3704, 49152, false, 0), 0);
@@ -106,7 +101,7 @@ public class PrisonGuards extends AbstractNpcAI
 	@Override
 	public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
 	{
-		if (event.equalsIgnoreCase("Respawn"))
+		if (event.equals("Respawn"))
 		{
 			L2Npc newGuard = addSpawn(npc.getNpcId(), npc.getSpawn().getLocx(), npc.getSpawn().getLocy(), npc.getSpawn().getLocz(), npc.getSpawn().getHeading(), false, 0);
 			newGuard.setIsNoRndWalk(true);
@@ -121,7 +116,7 @@ public class PrisonGuards extends AbstractNpcAI
 			_guards.remove(npc);
 			_guards.put(newGuard, place);
 		}
-		else if (event.equalsIgnoreCase("attackEnd") && (npc.getNpcId() == GUARD2))
+		else if (event.equals("attackEnd") && (npc.getNpcId() == GUARD2))
 		{
 			if ((npc.getX() != npc.getSpawn().getLocx()) || (npc.getY() != npc.getSpawn().getLocy()))
 			{
@@ -132,7 +127,7 @@ public class PrisonGuards extends AbstractNpcAI
 			npc.getAI().setIntention(CtrlIntention.AI_INTENTION_IDLE);
 		}
 		
-		return null;
+		return super.onAdvEvent(event, npc, player);
 	}
 	
 	@Override
@@ -142,11 +137,11 @@ public class PrisonGuards extends AbstractNpcAI
 		
 		if (npc.getNpcId() == GUARD2)
 		{
-			if (_firstAttacked && (caster.getFirstEffect(eventTimer) == null))
+			if (_firstAttacked && (caster.getFirstEffect(SKILL_EVENT_TIMER) == null))
 			{
-				if (caster.getFirstEffect(silence) == null)
+				if (caster.getFirstEffect(SKILL_SILENCE) == null)
 				{
-					castDebuff(npc, caster, silence, isSummon, false, true);
+					castDebuff(npc, caster, SKILL_SILENCE, isSummon, false, true);
 				}
 			}
 		}
@@ -161,7 +156,7 @@ public class PrisonGuards extends AbstractNpcAI
 		
 		if (npc.getNpcId() == GUARD2)
 		{
-			if (target.getFirstEffect(eventTimer) != null)
+			if (target.getFirstEffect(SKILL_EVENT_TIMER) != null)
 			{
 				cancelQuestTimer("attackEnd", null, null);
 				startQuestTimer("attackEnd", 180000, npc, null);
@@ -195,11 +190,11 @@ public class PrisonGuards extends AbstractNpcAI
 		
 		_firstAttacked = true;
 		
-		if (attacker.getFirstEffect(eventTimer) == null)
+		if (attacker.getFirstEffect(SKILL_EVENT_TIMER) == null)
 		{
-			if (attacker.getFirstEffect(pertification) == null)
+			if (attacker.getFirstEffect(SKILL_PERTIFICATION) == null)
 			{
-				castDebuff(npc, attacker, pertification, isSummon, true, false);
+				castDebuff(npc, attacker, SKILL_PERTIFICATION, isSummon, true, false);
 			}
 			
 			npc.setTarget(null);
@@ -263,6 +258,6 @@ public class PrisonGuards extends AbstractNpcAI
 	
 	public static void main(String[] args)
 	{
-		new PrisonGuards(PrisonGuards.class.getSimpleName(), "ai");
+		new PrisonGuards();
 	}
 }
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/RandomSpawn.java b/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/RandomSpawn.java
index 621c0bf13f868e8201958104757a227f3319035b..a09cc1d487ed57f78e45585658f1f8cf0333deb3 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/RandomSpawn.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/RandomSpawn.java
@@ -28,13 +28,12 @@ import com.l2jserver.gameserver.model.Location;
 import com.l2jserver.gameserver.model.actor.L2Npc;
 
 /**
- * Manages spawn of NPC's, having several random spawn points.
+ * Manages spawn of NPCs having several random spawn points.
  * @author GKR
  */
 public class RandomSpawn extends AbstractNpcAI
 {
 	private static Map<Integer, Location[]> SPAWN_POINTS = new FastMap<>();
-	
 	static
 	{
 		// Keltas
@@ -80,10 +79,9 @@ public class RandomSpawn extends AbstractNpcAI
 		});
 	}
 	
-	public RandomSpawn(String name, String descr)
+	public RandomSpawn()
 	{
-		super(name, descr);
-		
+		super(RandomSpawn.class.getSimpleName(), "ai/group_template");
 		for (int npcId : SPAWN_POINTS.keySet())
 		{
 			addSpawnId(npcId);
@@ -127,6 +125,6 @@ public class RandomSpawn extends AbstractNpcAI
 	
 	public static void main(String[] args)
 	{
-		new RandomSpawn(RandomSpawn.class.getSimpleName(), "ai");
+		new RandomSpawn();
 	}
 }
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/Remnants.java b/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/Remnants.java
index fcb8cb284924ed9a85b88342eb2a2042cbd63803..b738a0903cc4c7ece51c0a09a5197d3897b9117f 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/Remnants.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/Remnants.java
@@ -37,23 +37,17 @@ public class Remnants extends AbstractNpcAI
 		18464,
 		18465
 	};
-	
-	private static final int HOLY_WATER = 2358;
+	private static final int SKILL_HOLY_WATER = 2358;
 	
 	// TODO: Find retail strings.
 	// private static final String MSG = "The holy water affects Remnants Ghost. You have freed his soul.";
 	// private static final String MSG_DEREK = "The holy water affects Derek. You have freed his soul.";
-	
-	/**
-	 * Do not override onKill for Derek here. Let's make global Hellbound manipulations in Engine where it is possible.
-	 * @param name
-	 * @param descr
-	 */
-	private Remnants(String name, String descr)
+	private Remnants()
 	{
-		super(name, descr);
+		super(Remnants.class.getSimpleName(), "ai/group_template");
 		addSpawnId(NPCS);
 		addSkillSeeId(NPCS);
+		// Do not override onKill for Derek here. Let's make global Hellbound manipulations in Engine where it is possible.
 	}
 	
 	@Override
@@ -66,7 +60,7 @@ public class Remnants extends AbstractNpcAI
 	@Override
 	public final String onSkillSee(L2Npc npc, L2PcInstance caster, L2Skill skill, L2Object[] targets, boolean isSummon)
 	{
-		if (skill.getId() == HOLY_WATER)
+		if (skill.getId() == SKILL_HOLY_WATER)
 		{
 			if (!npc.isDead())
 			{
@@ -95,6 +89,6 @@ public class Remnants extends AbstractNpcAI
 	
 	public static void main(String[] args)
 	{
-		new Remnants(Remnants.class.getSimpleName(), "ai");
+		new Remnants();
 	}
 }
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/Sandstorms.java b/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/Sandstorms.java
index 2ed6a07400e21fbc51c5a8178921a11077f93ade..0b5eda193dd37d114d712136dbae6a10ad4a7b54 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/Sandstorms.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/Sandstorms.java
@@ -30,7 +30,11 @@ import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
  */
 public class Sandstorms extends AbstractNpcAI
 {
-	private static final int SANDSTORM = 32350;
+	public Sandstorms()
+	{
+		super(Sandstorms.class.getSimpleName(), "ai/group_template");
+		addAggroRangeEnterId(32350); // Sandstorm
+	}
 	
 	@Override
 	public String onAggroRangeEnter(L2Npc npc, L2PcInstance player, boolean isSummon)
@@ -40,14 +44,8 @@ public class Sandstorms extends AbstractNpcAI
 		return super.onAggroRangeEnter(npc, player, isSummon);
 	}
 	
-	public Sandstorms(String name, String descr)
-	{
-		super(name, descr);
-		addAggroRangeEnterId(SANDSTORM);
-	}
-	
 	public static void main(String[] args)
 	{
-		new Sandstorms(Sandstorms.class.getSimpleName(), "ai");
+		new Sandstorms();
 	}
 }
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/SearchingMaster.java b/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/SearchingMaster.java
index 9566d40a4906834cd048911064a1f5ab1f022555..0f4fe08083b18534321cdfd7bc1f6276dac8b8b7 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/SearchingMaster.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/SearchingMaster.java
@@ -31,42 +31,26 @@ import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
  */
 public class SearchingMaster extends AbstractNpcAI
 {
-	private static final int[] MOBS =
+	private SearchingMaster()
 	{
-		20965,
-		20966,
-		20967,
-		20968,
-		20969,
-		20970,
-		20971,
-		20972,
-		20973
-	};
-	
-	private SearchingMaster(String name, String descr)
-	{
-		super(name, descr);
-		addAttackId(MOBS);
+		super(SearchingMaster.class.getSimpleName(), "ai/group_template");
+		addAttackId(20965, 20966, 20967, 20968, 20969, 20970, 20971, 20972, 20973);
 	}
 	
 	@Override
 	public String onAttack(L2Npc npc, L2PcInstance player, int damage, boolean isSummon)
 	{
-		if (player == null)
+		if (player != null)
 		{
-			return null;
+			npc.setIsRunning(true);
+			((L2Attackable) npc).addDamageHate(player, 0, 999);
+			npc.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, player);
 		}
-		
-		npc.setIsRunning(true);
-		((L2Attackable) npc).addDamageHate(player, 0, 999);
-		npc.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, player);
-		
 		return super.onAttack(npc, player, damage, isSummon);
 	}
 	
 	public static void main(String[] args)
 	{
-		new SearchingMaster(SearchingMaster.class.getSimpleName(), "ai");
+		new SearchingMaster();
 	}
 }
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/SeeThroughSilentMove.java b/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/SeeThroughSilentMove.java
index b4cf5565ab1d5fe7eca5d40b02da8da1fc9673f3..f398de7921547d39178fed891da3810ddd040228 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/SeeThroughSilentMove.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/SeeThroughSilentMove.java
@@ -32,30 +32,20 @@ import com.l2jserver.gameserver.model.actor.L2Npc;
 public class SeeThroughSilentMove extends AbstractNpcAI
 {
 	//@formatter:off
-	private static final int[] MOBIDS =
+	private static final int[] MONSTERS =
 	{
-		18001, 18002, 22199,
-		22215, 22216, 22217,
-		22327, 22746, 22747,
-		22748, 22749, 22750,
-		22751, 22752, 22753,
-		22754, 22755, 22756,
-		22757, 22758, 22759,
-		22760, 22761, 22762,
-		22763, 22764, 22765,
-		22794, 22795, 22796,
-		22797, 22798, 22799,
-		22800, 22843, 22857,
-		25725, 25726, 25727,
-		29009, 29010, 29011,
-		29012, 29013
+		18001, 18002, 22199, 22215, 22216, 22217, 22327, 22746, 22747, 22748,
+		22749, 22750, 22751, 22752, 22753, 22754, 22755, 22756, 22757, 22758,
+		22759, 22760, 22761, 22762, 22763, 22764, 22765, 22794, 22795, 22796,
+		22797, 22798, 22799, 22800, 22843, 22857, 25725, 25726, 25727, 29009,
+		29010, 29011, 29012, 29013
 	};
 	//@formatter:on
 	
-	private SeeThroughSilentMove(String name, String descr)
+	private SeeThroughSilentMove()
 	{
-		super(name, descr);
-		for (int npcId : MOBIDS)
+		super(SeeThroughSilentMove.class.getSimpleName(), "ai/group_template");
+		for (int npcId : MONSTERS)
 		{
 			for (L2Spawn spawn : SpawnTable.getInstance().getSpawns(npcId))
 			{
@@ -66,7 +56,7 @@ public class SeeThroughSilentMove extends AbstractNpcAI
 				}
 			}
 		}
-		addSpawnId(MOBIDS);
+		addSpawnId(MONSTERS);
 	}
 	
 	@Override
@@ -81,6 +71,6 @@ public class SeeThroughSilentMove extends AbstractNpcAI
 	
 	public static void main(String[] args)
 	{
-		new SeeThroughSilentMove(SeeThroughSilentMove.class.getSimpleName(), "ai");
+		new SeeThroughSilentMove();
 	}
 }
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/SeedOfAnnihilation.java b/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/SeedOfAnnihilation.java
index 7ef9f73e4b0b65f6eebb7c124692992061a0395c..ce6f5ba8dcab4481d02e9b00a7fc89652ea184d2 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/SeedOfAnnihilation.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/SeedOfAnnihilation.java
@@ -79,9 +79,9 @@ public class SeedOfAnnihilation extends AbstractNpcAI
 		_teleportZones.put(60005, new Location(-179275, 186802, -10720));
 	}
 	
-	private SeedOfAnnihilation(String name, String descr)
+	private SeedOfAnnihilation()
 	{
-		super(name, descr);
+		super(SeedOfAnnihilation.class.getSimpleName(), "ai/group_template");
 		loadSeedRegionData();
 		for (int i : _teleportZones.keySet())
 		{
@@ -359,12 +359,6 @@ public class SeedOfAnnihilation extends AbstractNpcAI
 		return null;
 	}
 	
-	@Override
-	public String onKill(L2Npc npc, L2PcInstance killer, boolean isSummon)
-	{
-		return super.onKill(npc, killer, isSummon);
-	}
-	
 	@Override
 	public String onEnterZone(L2Character character, L2ZoneType zone)
 	{
@@ -396,6 +390,6 @@ public class SeedOfAnnihilation extends AbstractNpcAI
 	
 	public static void main(String[] args)
 	{
-		new SeedOfAnnihilation(SeedOfAnnihilation.class.getSimpleName(), "ai");
+		new SeedOfAnnihilation();
 	}
 }
\ No newline at end of file
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/Slaves.java b/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/Slaves.java
index 4805dad6410d622d641a9de2d2aae5209e464d99..11c9fbb5367e38694c9ade7ff891a6b6aca6c83e 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/Slaves.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/Slaves.java
@@ -44,16 +44,13 @@ public class Slaves extends AbstractNpcAI
 		22320,
 		22321
 	};
-	
 	private static final L2CharPosition MOVE_TO = new L2CharPosition(-25451, 252291, -3252, 3500);
-	
 	private static final int TRUST_REWARD = 10;
 	
-	private Slaves(String name, String descr)
+	private Slaves()
 	{
-		super(name, descr);
-		addSpawnId(MASTERS);
-		addKillId(MASTERS);
+		super(Slaves.class.getSimpleName(), "ai/group_template");
+		registerMobs(MASTERS, QuestEventType.ON_SPAWN, QuestEventType.ON_KILL);
 	}
 	
 	@Override
@@ -101,6 +98,6 @@ public class Slaves extends AbstractNpcAI
 	
 	public static void main(String[] args)
 	{
-		new Slaves(Slaves.class.getSimpleName(), "ai");
+		new Slaves();
 	}
 }
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/StakatoNest.java b/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/StakatoNest.java
index fdc032c929c0709cfbee552919ec4220c3bcfbc9..4e7ae43725e797d899e894dcf5890a3a1a34d5be 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/StakatoNest.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/StakatoNest.java
@@ -40,46 +40,20 @@ import com.l2jserver.gameserver.util.Util;
  */
 public class StakatoNest extends AbstractNpcAI
 {
+	// @formatter:off
 	// List of all mobs just for register
 	private static final int[] STAKATO_MOBS =
 	{
-		18793,
-		18794,
-		18795,
-		18796,
-		18797,
-		18798,
-		22617,
-		22618,
-		22619,
-		22620,
-		22621,
-		22622,
-		22623,
-		22624,
-		22625,
-		22626,
-		22627,
-		22628,
-		22629,
-		22630,
-		22631,
-		22632,
-		22633,
-		25667
+		18793, 18794, 18795, 18796, 18797, 18798, 22617, 22618, 22619, 22620,
+		22621, 22622, 22623, 22624, 22625, 22626, 22627, 22628, 22629, 22630,
+		22631, 22632, 22633, 25667
 	};
-	
 	// Coocons
 	private static final int[] COCOONS =
 	{
-		18793,
-		18794,
-		18795,
-		18796,
-		18797,
-		18798
+		18793, 18794, 18795, 18796, 18797, 18798
 	};
-	
+	// @formatter:on
 	// Cannibalistic Stakato Leader
 	private static final int STAKATO_LEADER = 22625;
 	
@@ -110,9 +84,9 @@ public class StakatoNest extends AbstractNpcAI
 	// Large Stakato Cocoon
 	private static final int LARGE_COCOON = 14834;
 	
-	private StakatoNest(String name, String descr)
+	private StakatoNest()
 	{
-		super(name, descr);
+		super(StakatoNest.class.getSimpleName(), "ai/group_template");
 		registerMobs(STAKATO_MOBS);
 	}
 	
@@ -147,56 +121,61 @@ public class StakatoNest extends AbstractNpcAI
 	@Override
 	public String onKill(L2Npc npc, L2PcInstance killer, boolean isSummon)
 	{
-		L2MonsterInstance _minion = checkMinion(npc);
-		
-		if ((npc.getNpcId() == STAKATO_NURSE) && (_minion != null))
-		{
-			Broadcast.toSelfAndKnownPlayers(npc, new MagicSkillUse(npc, 2046, 1, 1000, 0));
-			for (int i = 0; i < 3; i++)
-			{
-				L2Npc _spawned = addSpawn(STAKATO_CAPTAIN, _minion, true);
-				attackPlayer(killer, _spawned);
-			}
-		}
-		else if (npc.getNpcId() == STAKATO_BABY)
-		{
-			L2MonsterInstance leader = ((L2MonsterInstance) npc).getLeader();
-			if ((leader != null) && !leader.isDead())
-			{
-				startQuestTimer("nurse_change", 5000, leader, killer);
-			}
-		}
-		else if ((npc.getNpcId() == STAKATO_MALE) && (_minion != null))
+		L2MonsterInstance monster;
+		switch (npc.getNpcId())
 		{
-			Broadcast.toSelfAndKnownPlayers(npc, new MagicSkillUse(npc, 2046, 1, 1000, 0));
-			for (int i = 0; i < 3; i++)
-			{
-				L2Npc _spawned = addSpawn(STAKATO_GUARD, _minion, true);
-				attackPlayer(killer, _spawned);
-			}
-		}
-		else if (npc.getNpcId() == STAKATO_FEMALE)
-		{
-			L2MonsterInstance leader = ((L2MonsterInstance) npc).getLeader();
-			if ((leader != null) && !leader.isDead())
-			{
-				startQuestTimer("male_change", 5000, leader, killer);
-			}
-		}
-		else if (npc.getNpcId() == STAKATO_CHIEF)
-		{
-			if (killer.isInParty())
-			{
-				List<L2PcInstance> party = killer.getParty().getMembers();
-				for (L2PcInstance member : party)
+			case STAKATO_NURSE:
+				monster = checkMinion(npc);
+				if (monster != null)
 				{
-					giveCocoon(member, npc);
+					Broadcast.toSelfAndKnownPlayers(npc, new MagicSkillUse(npc, 2046, 1, 1000, 0));
+					for (int i = 0; i < 3; i++)
+					{
+						L2Npc _spawned = addSpawn(STAKATO_CAPTAIN, monster, true);
+						attackPlayer(killer, _spawned);
+					}
 				}
-			}
-			else
-			{
-				giveCocoon(killer, npc);
-			}
+				break;
+			case STAKATO_BABY:
+				monster = ((L2MonsterInstance) npc).getLeader();
+				if ((monster != null) && !monster.isDead())
+				{
+					startQuestTimer("nurse_change", 5000, monster, killer);
+				}
+				break;
+			case STAKATO_MALE:
+				monster = checkMinion(npc);
+				if (monster != null)
+				{
+					Broadcast.toSelfAndKnownPlayers(npc, new MagicSkillUse(npc, 2046, 1, 1000, 0));
+					for (int i = 0; i < 3; i++)
+					{
+						L2Npc _spawned = addSpawn(STAKATO_GUARD, monster, true);
+						attackPlayer(killer, _spawned);
+					}
+				}
+				break;
+			case STAKATO_FEMALE:
+				monster = ((L2MonsterInstance) npc).getLeader();
+				if ((monster != null) && !monster.isDead())
+				{
+					startQuestTimer("male_change", 5000, monster, killer);
+				}
+				break;
+			case STAKATO_CHIEF:
+				if (killer.isInParty())
+				{
+					List<L2PcInstance> party = killer.getParty().getMembers();
+					for (L2PcInstance member : party)
+					{
+						giveCocoon(member, npc);
+					}
+				}
+				else
+				{
+					giveCocoon(killer, npc);
+				}
+				break;
 		}
 		return super.onKill(npc, killer, isSummon);
 	}
@@ -216,30 +195,29 @@ public class StakatoNest extends AbstractNpcAI
 	@Override
 	public final String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
 	{
-		if ((npc == null) || (player == null))
-		{
-			return null;
-		}
-		if (npc.isDead())
+		if ((npc == null) || (player == null) || npc.isDead())
 		{
 			return null;
 		}
 		
-		if (event.equalsIgnoreCase("nurse_change"))
+		int npcId = 0;
+		switch (event)
 		{
-			npc.getSpawn().decreaseCount(npc);
-			npc.deleteMe();
-			L2Npc _spawned = addSpawn(STAKATO_NURSE_2, npc.getX(), npc.getY(), npc.getZ(), npc.getHeading(), false, 0, true);
-			attackPlayer(player, _spawned);
+			case "nurse_change":
+				npcId = STAKATO_NURSE_2;
+				break;
+			case "male_change":
+				npcId = STAKATO_MALE_2;
+				break;
 		}
-		else if (event.equalsIgnoreCase("male_change"))
+		if (npcId > 0)
 		{
 			npc.getSpawn().decreaseCount(npc);
 			npc.deleteMe();
-			L2Npc _spawned = addSpawn(STAKATO_MALE_2, npc.getX(), npc.getY(), npc.getZ(), npc.getHeading(), false, 0, true);
+			L2Npc _spawned = addSpawn(npcId, npc.getX(), npc.getY(), npc.getZ(), npc.getHeading(), false, 0, true);
 			attackPlayer(player, _spawned);
 		}
-		return null;
+		return super.onAdvEvent(event, npc, player);
 	}
 	
 	private static L2MonsterInstance checkMinion(L2Npc npc)
@@ -269,18 +247,11 @@ public class StakatoNest extends AbstractNpcAI
 	
 	private static void giveCocoon(L2PcInstance player, L2Npc npc)
 	{
-		if (getRandom(100) > 80)
-		{
-			player.addItem("StakatoCocoon", LARGE_COCOON, 1, npc, true);
-		}
-		else
-		{
-			player.addItem("StakatoCocoon", SMALL_COCOON, 1, npc, true);
-		}
+		player.addItem("StakatoCocoon", ((getRandom(100) > 80) ? LARGE_COCOON : SMALL_COCOON), 1, npc, true);
 	}
 	
 	public static void main(String[] args)
 	{
-		new StakatoNest(StakatoNest.class.getSimpleName(), "ai");
+		new StakatoNest();
 	}
 }
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/StarStones.java b/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/StarStones.java
index 3686bec2307d1ee31cc7c3e5a1c7351aa72bac11..772b8b6273fc78b408466243c59da8886d7c550c 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/StarStones.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/StarStones.java
@@ -32,25 +32,19 @@ import com.l2jserver.gameserver.network.SystemMessageId;
  */
 public class StarStones extends AbstractNpcAI
 {
+	// @formatter:off
 	private static final int[] MOBS =
 	{
-		18684,
-		18685,
-		18686,
-		18687,
-		18688,
-		18689,
-		18690,
-		18691,
-		18692
+		18684, 18685, 18686, 18687, 18688, 18689, 18690, 18691, 18692
 	};
+	// @formatter:on
 	
-	private static final int RATE = 1;
+	private static final int COLLECTION_RATE = 1;
 	
-	private StarStones(String name, String descr)
+	private StarStones()
 	{
-		super(name, descr);
-		registerMobs(MOBS, QuestEventType.ON_SKILL_SEE);
+		super(StarStones.class.getSimpleName(), "ai/group_template");
+		addSkillSeeId(MOBS);
 	}
 	
 	@Override
@@ -87,12 +81,12 @@ public class StarStones extends AbstractNpcAI
 			if (getRandom(100) < 33)
 			{
 				caster.sendPacket(SystemMessageId.THE_COLLECTION_HAS_SUCCEEDED);
-				caster.addItem("StarStone", itemId, getRandom(RATE + 1, 2 * RATE), null, true);
+				caster.addItem("StarStone", itemId, getRandom(COLLECTION_RATE + 1, 2 * COLLECTION_RATE), null, true);
 			}
 			else if (((skill.getLevel() == 1) && (getRandom(100) < 15)) || ((skill.getLevel() == 2) && (getRandom(100) < 50)) || ((skill.getLevel() == 3) && (getRandom(100) < 75)))
 			{
 				caster.sendPacket(SystemMessageId.THE_COLLECTION_HAS_SUCCEEDED);
-				caster.addItem("StarStone", itemId, getRandom(1, RATE), null, true);
+				caster.addItem("StarStone", itemId, getRandom(1, COLLECTION_RATE), null, true);
 			}
 			else
 			{
@@ -105,6 +99,6 @@ public class StarStones extends AbstractNpcAI
 	
 	public static void main(String[] args)
 	{
-		new StarStones(StarStones.class.getSimpleName(), "ai");
+		new StarStones();
 	}
 }
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/SummonMinions.java b/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/SummonMinions.java
index 8c25fbc25e3c8db6b35cb33699eba0d9c1de29a7..268364545c11fdcfe5d2084655ad6e81ec11a19f 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/SummonMinions.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/SummonMinions.java
@@ -46,7 +46,6 @@ public class SummonMinions extends AbstractNpcAI
 	private static Set<Integer> myTrackingSet = new FastSet<Integer>().shared(); // Used to track instances of npcs
 	private final FastMap<Integer, FastList<L2PcInstance>> _attackersList = new FastMap<Integer, FastList<L2PcInstance>>().shared();
 	private static final Map<Integer, List<Integer>> MINIONS = new HashMap<>();
-	
 	static
 	{
 		// Timak Orc Troop
@@ -86,7 +85,6 @@ public class SummonMinions extends AbstractNpcAI
 		// Tanta Lizardman Summoner
 		MINIONS.put(22774, Arrays.asList(22768, 22768));
 	}
-	
 	// Timak Orc Troop Messages
 	private static final NpcStringId[] ATTACK_LEADER_MSG =
 	{
@@ -96,9 +94,9 @@ public class SummonMinions extends AbstractNpcAI
 		NpcStringId.COME_OUT_YOU_CHILDREN_OF_DARKNESS
 	};
 	
-	private SummonMinions(String name, String descr)
+	private SummonMinions()
 	{
-		super(name, descr);
+		super(SummonMinions.class.getSimpleName(), "ai/group_template");
 		registerMobs(MINIONS.keySet(), QuestEventType.ON_ATTACK, QuestEventType.ON_KILL);
 	}
 	
@@ -120,7 +118,6 @@ public class SummonMinions extends AbstractNpcAI
 				case 22030: // mobs that summon minions only on certain hp
 				case 22032:
 				case 22038:
-				{
 					if (npc.getCurrentHp() < (npc.getMaxHp() / 2.0))
 					{
 						HasSpawned = 0;
@@ -136,7 +133,6 @@ public class SummonMinions extends AbstractNpcAI
 						}
 					}
 					break;
-				}
 				case 22257:
 				case 22258:
 				case 22259:
@@ -147,7 +143,6 @@ public class SummonMinions extends AbstractNpcAI
 				case 22264:
 				case 22265:
 				case 22266:
-				{
 					if (isSummon)
 					{
 						attacker = attacker.getSummon().getOwner();
@@ -193,9 +188,7 @@ public class SummonMinions extends AbstractNpcAI
 						}
 					}
 					break;
-				}
 				default: // mobs without special conditions
-				{
 					HasSpawned = 0;
 					if (npcId != 20767)
 					{
@@ -216,7 +209,6 @@ public class SummonMinions extends AbstractNpcAI
 						}
 					}
 					break;
-				}
 			}
 		}
 		return super.onAttack(npc, attacker, damage, isSummon);
@@ -238,6 +230,6 @@ public class SummonMinions extends AbstractNpcAI
 	
 	public static void main(String[] args)
 	{
-		new SummonMinions(SummonMinions.class.getSimpleName(), "ai");
+		new SummonMinions();
 	}
 }
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/VarkaKetra.java b/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/VarkaKetra.java
index 30461d6702584a7b8d847280d66e72e84b2f6a3b..4e2a6c2f30f8e503d09c77568ead27e53942cbcc 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/VarkaKetra.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/VarkaKetra.java
@@ -138,9 +138,9 @@ public class VarkaKetra extends AbstractNpcAI
 		Q00616_MagicalPowerOfFirePart2.class.getSimpleName()
 	};
 	
-	private VarkaKetra(String name, String descr)
+	private VarkaKetra()
 	{
-		super(name, descr);
+		super(VarkaKetra.class.getSimpleName(), "ai/group_template");
 		addAggroRangeEnterId(KETRA);
 		addAggroRangeEnterId(VARKA);
 		addKillId(KETRA);
@@ -216,6 +216,6 @@ public class VarkaKetra extends AbstractNpcAI
 	
 	public static void main(String[] args)
 	{
-		new VarkaKetra(VarkaKetra.class.getSimpleName(), "ai/group_template");
+		new VarkaKetra();
 	}
 }
\ No newline at end of file
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/WarriorFishingBlock.java b/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/WarriorFishingBlock.java
index a78994149665cb5abbf4aceb2f447b4d47b462aa..da09d9f19566e2687247b93853167ffced33c81c 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/WarriorFishingBlock.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/WarriorFishingBlock.java
@@ -69,9 +69,9 @@ public class WarriorFishingBlock extends AbstractNpcAI
 	private static final int CHANCE_TO_SHOUT_ON_ATTACK = 33;
 	private static final int DESPAWN_TIME = 50000; // 50 seconds
 	
-	public WarriorFishingBlock(String name, String descr)
+	public WarriorFishingBlock()
 	{
-		super(name, descr);
+		super(WarriorFishingBlock.class.getSimpleName(), "ai/group_template");
 		addAttackId(MONSTERS);
 		addKillId(MONSTERS);
 		addSpawnId(MONSTERS);
@@ -133,6 +133,6 @@ public class WarriorFishingBlock extends AbstractNpcAI
 	
 	public static void main(String[] args)
 	{
-		new WarriorFishingBlock(WarriorFishingBlock.class.getSimpleName(), "ai/group_template");
+		new WarriorFishingBlock();
 	}
 }