From 9cd43b1cd46b5f2d9c9b5ec29fe58a2d3bdc9585 Mon Sep 17 00:00:00 2001
From: Zoey76 <zoey_76@msn.com>
Date: Sun, 16 Dec 2012 14:56:16 +0000
Subject: [PATCH] BETA: Quests update: 	* Replaced assignment of questItemIds
 with registerQuestItems in all Java quests. 	* Replaced L2Skill with
 SkillHolder. 	* Updated Instances to use new InstaceWorld class. 	*
 Renamed some lower/mixed case static final variables with upper case names. 
 * Updated some quests with new methods for conditions, etc. 	* Replacing
 playSound(String) with playSound(QuestSound) 	* Fixed some minor typos.

'''Note:''' Quest contributors please review this changeset and adjust your contributions to match this changes.
---
 .../scripts/ai/group_template/BeastFarm.java  |   2 +-
 .../ai/group_template/EnergySeeds.java        |  12 +-
 .../handlers/bypasshandlers/QuestLink.java    |   2 +-
 .../handlers/skillhandlers/NornilsPower.java  |   8 +-
 .../usercommandhandlers/InstanceZone.java     |   6 +-
 .../CrystalCaverns/CrystalCaverns.java        | 227 +++++++++---------
 .../DarkCloudMansion/DarkCloudMansion.java    | 174 +++++++-------
 .../DemonPrinceFloor/DemonPrinceFloor.java    |  46 ++--
 .../FinalEmperialTomb/FinalEmperialTomb.java  | 123 +++++-----
 .../HellboundTown/HellboundTown.java          |  26 +-
 .../HideoutOfTheDawn/HideoutOfTheDawn.java    | 102 +++-----
 .../scripts/instances/Kamaloka/Kamaloka.java  |  67 ++----
 .../NornilsGarden/NornilsGarden.java          |  43 ++--
 .../Pailaka/PailakaDevilsLegacy.java          |  68 +++---
 .../Pailaka/PailakaSongOfIceAndFire.java      |  92 ++++---
 .../instances/RankuFloor/RankuFloor.java      |  49 ++--
 .../instances/SecretArea/SecretArea.java      |  41 ++--
 .../instances/SeedOfDestruction/Stage1.java   |  85 ++++---
 .../SeedOfInfinity/HallOfSuffering.java       |  61 ++---
 .../Q00011_SecretMeetingWithKetraOrcs.java    |  27 +--
 .../Q00012_SecretMeetingWithVarkaSilenos.java |  15 +-
 .../Q00013_ParcelDelivery.java                |  21 +-
 .../Q00014_WhereaboutsOfTheArchaeologist.java |  11 +-
 .../Q00015_SweetWhispers.java                 |  22 +-
 .../Q00016_TheComingDarkness.java             |  23 +-
 .../Q00017_LightAndDarkness.java              |  14 +-
 .../Q00018_MeetingWithTheGoldenRam.java       |   7 +-
 .../Q00019_GoToThePastureland.java            |  44 ++--
 .../Q00020_BringUpWithLove.java               |   7 +-
 .../Q00027_ChestCaughtWithABaitOfWind.java    |  12 +-
 .../Q00028_ChestCaughtWithABaitOfIcyAir.java  |  14 +-
 .../Q00029_ChestCaughtWithABaitOfEarth.java   |  14 +-
 .../Q00030_ChestCaughtWithABaitOfFire.java    |  14 +-
 .../Q00042_HelpTheUncle.java                  |  11 +-
 .../Q00043_HelpTheSister.java                 |  12 +-
 .../Q00044_HelpTheSon/Q00044_HelpTheSon.java  |  15 +-
 .../Q00050_LanoscosSpecialBait.java           |   8 +-
 .../Q00051_OFullesSpecialBait.java            |   8 +-
 .../Q00052_WilliesSpecialBait.java            |  12 +-
 .../Q00053_LinnaeusSpecialBait.java           |  10 +-
 .../Q00125_TheNameOfEvil1.java                |   4 +-
 .../Q00132_MatrasCuriosity.java               |  23 +-
 .../Q00137_TempleChampionPart1.java           |   9 +-
 .../Q00138_TempleChampionPart2.java           |  14 +-
 .../Q00146_TheZeroHour.java                   |  49 ++--
 ...Q00147_PathtoBecominganEliteMercenary.java |   4 +-
 ...0148_PathtoBecominganExaltedMercenary.java |   4 +-
 .../Q00153_DeliverGoods.java                  | 116 ++++-----
 .../Q00179_IntoTheLargeCavern.java            |  10 +-
 .../Q00182_NewRecruits.java                   |  10 +-
 .../Q00193_SevenSignsDyingMessage.java        |   2 +-
 .../Q00194_SevenSignsMammonsContract.java     |   2 +-
 .../Q00197_SevenSignsTheSacredBookOfSeal.java |   2 +-
 .../Q00198_SevenSignsEmbryo.java              |   2 +-
 .../Q00240_ImTheOnlyOneYouCanTrust.java       |  10 +-
 .../Q00241_PossessorOfAPreciousSoul1.java     |  14 +-
 .../Q00242_PossessorOfAPreciousSoul2.java     |  15 +-
 .../Q00246_PossessorOfAPreciousSoul3.java     |  18 +-
 .../Q00247_PossessorOfAPreciousSoul4.java     |   6 +-
 .../Q00249_PoisonedPlainsOfTheLizardmen.java  |   7 +-
 .../Q00250_WatchWhatYouEat.java               |  55 ++---
 .../Q00251_NoSecrets/Q00251_NoSecrets.java    |   4 +-
 .../Q00252_ItSmellsDelicious.java             |  17 +-
 .../Q00270_TheOneWhoEndsSilence.java          |  12 +-
 .../Q00278_HomeSecurity.java                  |  22 +-
 .../Q00279_TargetOfOpportunity.java           |   2 +-
 .../Q00289_NoMoreSoupForYou.java              |  20 +-
 .../Q00290_ThreatRemoval.java                 |   2 +-
 .../Q00309_ForAGoodCause.java                 |  24 +-
 .../Q00350_EnhanceYourWeapon.java             |   4 +-
 ...00376_ExplorationOfTheGiantsCavePart1.java |  27 +--
 ...00377_ExplorationOfTheGiantsCavePart2.java |  26 +-
 .../Q00401_PathToWarrior.java                 |  18 +-
 .../Q00423_TakeYourBestShot.java              |  10 +-
 .../Q00432_BirthdayPartySong.java             |   2 +-
 .../Q00452_FindingtheLostSoldiers.java        |   5 +-
 .../Q00453_NotStrongEnoughAlone.java          |   9 +-
 .../Q00508_AClansReputation.java              |   4 +-
 .../Q00509_AClansFame/Q00509_AClansFame.java  |   4 +-
 .../Q00510_AClansPrestige.java                |   4 +-
 .../Q00511_AwlUnderFoot.java                  |  40 ++-
 .../Q00551_OlympiadStarter.java               |  19 +-
 .../Q00552_OlympiadVeteran.java               |  12 +-
 .../Q00553_OlympiadUndefeated.java            |  19 +-
 .../Q00601_WatchingEyes.java                  |   2 +-
 .../Q00602_ShadowOfLight.java                 |   2 +-
 .../Q00637_ThroughOnceMore.java               |   8 +-
 .../Q00641_AttackSailren.java                 |   2 +-
 .../Q00642_APowerfulPrimevalCreature.java     |   4 +-
 .../Q00690_JudesRequest.java                  |  13 +-
 .../Q00691_MatrasSuspiciousRequest.java       |   9 +-
 .../Q00692_HowtoOpposeEvil.java               |   7 +-
 .../Q00702_ATrapForRevenge.java               |  15 +-
 .../Q10267_JourneyToGracia.java               |   6 +-
 .../Q10268_ToTheSeedOfInfinity.java           |   6 +-
 .../Q10269_ToTheSeedOfDestruction.java        |   6 +-
 .../Q10271_TheEnvelopingDarkness.java         |  11 +-
 .../Q10272_LightFragment.java                 |   8 +-
 .../Q10273_GoodDayToFly.java                  |  25 +-
 .../Q10274_CollectingInTheAir.java            |  13 +-
 .../Q10275_ContainingTheAttributePower.java   |  26 +-
 .../Q10276_MutatedKaneusGludio.java           |  11 +-
 .../Q10277_MutatedKaneusDion.java             |   4 +-
 .../Q10278_MutatedKaneusHeine.java            |  12 +-
 .../Q10279_MutatedKaneusOren.java             |   4 +-
 .../Q10280_MutatedKaneusSchuttgart.java       |  12 +-
 .../Q10281_MutatedKaneusRune.java             |   9 +-
 .../Q10282_ToTheSeedOfAnnihilation.java       |   4 +-
 .../Q10283_RequestOfIceMerchant.java          |  10 +-
 .../Q10288_SecretMission.java                 |   6 +-
 .../Q10289_FadeToBlack.java                   |   9 +-
 .../Q10290_LandDragonConqueror.java           |   6 +-
 .../Q10291_FireDragonDestroyer.java           |   6 +-
 .../quests/SagasScripts/SagaOfTheDuelist.java |  14 +-
 .../quests/SagasScripts/SagasSuperClass.java  |  55 ++---
 .../TerritoryWarSuperClass.java               |  33 +--
 .../DarkElvenChange1/DarkElvenChange1.java    |   2 +-
 .../DarkElvenChange2/DarkElvenChange2.java    |   2 +-
 118 files changed, 1015 insertions(+), 1584 deletions(-)

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 538ded52c8..eadbcdf981 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
@@ -297,7 +297,7 @@ public class BeastFarm extends AbstractNpcAI
 			nextNpc.setRunning();
 			
 			QuestState st = player.getQuestState(Q00020_BringUpWithLove.class.getSimpleName());
-			if ((st != null) && (st.getInt("cond") == 1) && !st.hasQuestItems(7185) && (getRandom(10) == 1))
+			if ((st != null) && st.isCond(1) && !st.hasQuestItems(7185) && (getRandom(10) == 1))
 			{
 				// if player has quest 20 going, give quest item
 				// it's easier to hardcode it in here than to try and repeat this stuff in the quest
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 e6984d1331..5ef08a3d58 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
@@ -361,19 +361,19 @@ public class EnergySeeds extends AbstractNpcAI
 		switch (seedType)
 		{
 			case INFINITY:
-				if ((st != null) && (st.getInt("cond") == 3))
+				if ((st != null) && st.isCond(3))
 				{
 					handleQuestDrop(st, 13798);
 				}
 				break;
 			case DESTRUCTION:
-				if ((st != null) && (st.getInt("cond") == 3))
+				if ((st != null) && st.isCond(3))
 				{
 					handleQuestDrop(st, 13867);
 				}
 				break;
 			case ANNIHILATION_BISTAKON:
-				if ((st != null) && (st.getInt("cond") == 3))
+				if ((st != null) && st.isCond(3))
 				{
 					handleQuestDrop(st, 15535);
 				}
@@ -386,7 +386,7 @@ public class EnergySeeds extends AbstractNpcAI
 				}
 				break;
 			case ANNIHILATION_REPTILIKON:
-				if ((st != null) && (st.getInt("cond") == 3))
+				if ((st != null) && st.isCond(3))
 				{
 					handleQuestDrop(st, 15535);
 				}
@@ -399,7 +399,7 @@ public class EnergySeeds extends AbstractNpcAI
 				}
 				break;
 			case ANNIHILATION_COKRAKON:
-				if ((st != null) && (st.getInt("cond") == 3))
+				if ((st != null) && st.isCond(3))
 				{
 					handleQuestDrop(st, 15535);
 				}
@@ -450,7 +450,7 @@ public class EnergySeeds extends AbstractNpcAI
 		if (numItems > 0)
 		{
 			st.giveItems(itemId, numItems);
-			st.playSound("ItemSound.quest_itemget");
+			st.playSound(QuestSound.ITEMSOUND_QUEST_ITEMGET);
 		}
 	}
 	
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/bypasshandlers/QuestLink.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/bypasshandlers/QuestLink.java
index 7315e85749..fd55c098b1 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/bypasshandlers/QuestLink.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/bypasshandlers/QuestLink.java
@@ -94,7 +94,7 @@ public class QuestLink implements IBypassHandler
 			{
 				state = q.isCustomQuest() ? "" : "01";
 			}
-			else if (qs.isStarted() && (qs.getInt("cond") > 0))
+			else if (qs.isStarted())
 			{
 				state = q.isCustomQuest() ? " (In Progress)" : "02";
 			}
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/skillhandlers/NornilsPower.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/skillhandlers/NornilsPower.java
index cce7937166..fe79c42c5c 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/skillhandlers/NornilsPower.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/skillhandlers/NornilsPower.java
@@ -16,10 +16,10 @@ package handlers.skillhandlers;
 
 import com.l2jserver.gameserver.handler.ISkillHandler;
 import com.l2jserver.gameserver.instancemanager.InstanceManager;
-import com.l2jserver.gameserver.instancemanager.InstanceManager.InstanceWorld;
 import com.l2jserver.gameserver.model.L2Object;
 import com.l2jserver.gameserver.model.actor.L2Character;
 import com.l2jserver.gameserver.model.actor.instance.L2DoorInstance;
+import com.l2jserver.gameserver.model.instancezone.InstanceWorld;
 import com.l2jserver.gameserver.model.skills.L2Skill;
 import com.l2jserver.gameserver.model.skills.L2SkillType;
 import com.l2jserver.gameserver.network.SystemMessageId;
@@ -37,18 +37,18 @@ public class NornilsPower implements ISkillHandler
 	{
 		if (!activeChar.isPlayer())
 			return;
+		
 		InstanceWorld world = null;
-
 		final int instanceId = activeChar.getInstanceId();
 		if (instanceId > 0)
 			world = InstanceManager.getInstance().getPlayerWorld(activeChar.getActingPlayer());
 		
-		if (world != null && world.instanceId == instanceId && world.templateId == 11)
+		if (world != null && world.getInstanceId() == instanceId && world.getTemplateId() == 11)
 		{
 			if(activeChar.isInsideRadius(-107393, 83677, 100, true))
 			{
 				activeChar.destroyItemByItemId("NornilsPower", 9713, 1, activeChar, true);
-				L2DoorInstance door = InstanceManager.getInstance().getInstance(world.instanceId).getDoor(16200010);
+				L2DoorInstance door = InstanceManager.getInstance().getInstance(world.getInstanceId()).getDoor(16200010);
 				if (door != null)
 				{
 					door.setMeshIndex(1);
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/usercommandhandlers/InstanceZone.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/usercommandhandlers/InstanceZone.java
index 88a3248ff2..3dd949931c 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/usercommandhandlers/InstanceZone.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/usercommandhandlers/InstanceZone.java
@@ -18,8 +18,8 @@ import java.util.Map;
 
 import com.l2jserver.gameserver.handler.IUserCommandHandler;
 import com.l2jserver.gameserver.instancemanager.InstanceManager;
-import com.l2jserver.gameserver.instancemanager.InstanceManager.InstanceWorld;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jserver.gameserver.model.instancezone.InstanceWorld;
 import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
 
@@ -49,10 +49,10 @@ public class InstanceZone implements IUserCommandHandler
 		}
 		
 		final InstanceWorld world = InstanceManager.getInstance().getPlayerWorld(activeChar);
-		if ((world != null) && (world.templateId >= 0))
+		if ((world != null) && (world.getTemplateId() >= 0))
 		{
 			SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.INSTANT_ZONE_CURRENTLY_INUSE_S1);
-			sm.addInstanceName(world.templateId);
+			sm.addInstanceName(world.getTemplateId());
 			activeChar.sendPacket(sm);
 		}
 		
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/instances/CrystalCaverns/CrystalCaverns.java b/L2J_DataPack_BETA/dist/game/data/scripts/instances/CrystalCaverns/CrystalCaverns.java
index 7e76a43726..741d559dab 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/instances/CrystalCaverns/CrystalCaverns.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/instances/CrystalCaverns/CrystalCaverns.java
@@ -25,7 +25,6 @@ import com.l2jserver.gameserver.GeoData;
 import com.l2jserver.gameserver.ai.CtrlIntention;
 import com.l2jserver.gameserver.datatables.SkillTable;
 import com.l2jserver.gameserver.instancemanager.InstanceManager;
-import com.l2jserver.gameserver.instancemanager.InstanceManager.InstanceWorld;
 import com.l2jserver.gameserver.model.L2CharPosition;
 import com.l2jserver.gameserver.model.L2Object;
 import com.l2jserver.gameserver.model.L2Party;
@@ -40,6 +39,7 @@ import com.l2jserver.gameserver.model.actor.instance.L2DoorInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2MonsterInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.entity.Instance;
+import com.l2jserver.gameserver.model.instancezone.InstanceWorld;
 import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
 import com.l2jserver.gameserver.model.quest.Quest;
 import com.l2jserver.gameserver.model.quest.QuestState;
@@ -60,6 +60,7 @@ import com.l2jserver.gameserver.network.serverpackets.ValidateLocation;
 import com.l2jserver.gameserver.util.Util;
 
 /**
+ * Crystal Caverns instance zone.<br>
  * TODO:
  * 1. Kechi's Henchmans spawn animation is missing.
  * 2. NPC related Traps are not supported by core, so Darnels and Lahm door trap is not working.
@@ -72,7 +73,6 @@ import com.l2jserver.gameserver.util.Util;
  */
 public class CrystalCaverns extends Quest
 {
-	
 	protected static class CrystalGolem
 	{
 		public         L2ItemInstance foodItem = null;
@@ -538,9 +538,9 @@ public class CrystalCaverns extends Quest
 				player.sendPacket(SystemMessageId.ALREADY_ENTERED_ANOTHER_INSTANCE_CANT_ENTER);
 				return 0;
 			}
-			teleto.instanceId = world.instanceId;
+			teleto.instanceId = world.getInstanceId();
 			teleportplayer(player, teleto);
-			return world.instanceId;
+			return world.getInstanceId();
 		}
 		
 		// New instance
@@ -549,8 +549,8 @@ public class CrystalCaverns extends Quest
 		L2Party party = player.getParty();
 		int instanceId = InstanceManager.getInstance().createDynamicInstance(template);
 		world = new CCWorld(System.currentTimeMillis() + 5400000);
-		world.instanceId = instanceId;
-		world.templateId = INSTANCEID;
+		world.setInstanceId(instanceId);
+		world.setTemplateId(INSTANCEID);
 		InstanceManager.getInstance().addWorld(world);
 		_log.info("Crystal Caverns started " + template + " Instance: " + instanceId + " created by player: " + player.getName());
 		runOracle((CCWorld) world);
@@ -562,7 +562,7 @@ public class CrystalCaverns extends Quest
 			player.sendMessage("Welcome to Crystal Caverns.");
 			InstanceManager.getInstance().setInstanceTime(player.getObjectId(), INSTANCEID, ((System.currentTimeMillis() + INSTANCEPENALTY)));
 			teleportplayer(player, teleto);
-			world.allowed.add(player.getObjectId());
+			world.isAllowed(player.getObjectId());
 		}
 		else
 		{
@@ -571,7 +571,7 @@ public class CrystalCaverns extends Quest
 				partyMember.sendMessage("Welcome to Crystal Caverns.");
 				InstanceManager.getInstance().setInstanceTime(partyMember.getObjectId(), INSTANCEID, ((System.currentTimeMillis() + INSTANCEPENALTY)));
 				teleportplayer(partyMember, teleto);
-				world.allowed.add(partyMember.getObjectId());
+				world.addAllowed(partyMember.getObjectId());
 			}
 		}
 		return instanceId;
@@ -606,58 +606,58 @@ public class CrystalCaverns extends Quest
 	
 	protected void runOracle(CCWorld world)
 	{
-		world.status = 0;
+		world.setStatus(0);
 		
-		world.oracle.add(addSpawn(ORACLE_GUIDE_1, 143172, 148894, -11975, 0, false, 0, false, world.instanceId));
+		world.oracle.add(addSpawn(ORACLE_GUIDE_1, 143172, 148894, -11975, 0, false, 0, false, world.getInstanceId()));
 	}
 	
 	protected void runEmerald(CCWorld world)
 	{
-		world.status = 1;
+		world.setStatus(1);
 		runFirst(world);
-		openDoor(DOOR1, world.instanceId);
+		openDoor(DOOR1, world.getInstanceId());
 	}
 	
 	protected void runCoral(CCWorld world)
 	{
-		world.status = 1;
+		world.setStatus(1);
 		runHall(world);
-		openDoor(DOOR2, world.instanceId);
-		openDoor(DOOR5, world.instanceId);
+		openDoor(DOOR2, world.getInstanceId());
+		openDoor(DOOR5, world.getInstanceId());
 	}
 	
 	protected void runHall(CCWorld world)
 	{
-		world.status = 2;
+		world.setStatus(2);
 		
 		for (int[] spawn : SPAWNS)
 		{
-			L2Npc mob = addSpawn(CGMOBS[getRandom(CGMOBS.length)], spawn[0], spawn[1], spawn[2], spawn[3], false, 0, false, world.instanceId);
+			L2Npc mob = addSpawn(CGMOBS[getRandom(CGMOBS.length)], spawn[0], spawn[1], spawn[2], spawn[3], false, 0, false, world.getInstanceId());
 			world.npcList1.put(mob, false);
 		}
 	}
 	
 	protected void runFirst(CCWorld world)
 	{
-		world.status = 2;
+		world.setStatus(2);
 		
-		world.keyKeepers.add(addSpawn(GK1, 148206, 149486, -12140, 32308, false, 0, false, world.instanceId));
-		world.keyKeepers.add(addSpawn(GK2, 148203, 151093, -12140, 31100, false, 0, false, world.instanceId));
+		world.keyKeepers.add(addSpawn(GK1, 148206, 149486, -12140, 32308, false, 0, false, world.getInstanceId()));
+		world.keyKeepers.add(addSpawn(GK2, 148203, 151093, -12140, 31100, false, 0, false, world.getInstanceId()));
 		
 		for (int[] spawn : FIRST_SPAWNS)
 		{
-			addSpawn(spawn[0], spawn[1], spawn[2], spawn[3], spawn[4], false, 0, false, world.instanceId);
+			addSpawn(spawn[0], spawn[1], spawn[2], spawn[3], spawn[4], false, 0, false, world.getInstanceId());
 		}
 	}
 	
 	protected void runEmeraldSquare(CCWorld world)
 	{
-		world.status = 3;
+		world.setStatus(3);
 		
 		Map<L2Npc, Boolean> spawnList = new FastMap<>();
 		for (int[] spawn : EMERALD_SPAWNS)
 		{
-			L2Npc mob = addSpawn(spawn[0], spawn[1], spawn[2], spawn[3], spawn[4], false, 0, false, world.instanceId);
+			L2Npc mob = addSpawn(spawn[0], spawn[1], spawn[2], spawn[3], spawn[4], false, 0, false, world.getInstanceId());
 			spawnList.put(mob, false);
 		}
 		world.npcList2.put(0, spawnList);
@@ -668,33 +668,33 @@ public class CrystalCaverns extends Quest
 		Map<L2Npc, Boolean> spawned = new FastMap<>();
 		for (int[] spawn : spawnList)
 		{
-			L2Npc mob = addSpawn(spawn[0], spawn[1], spawn[2], spawn[3], spawn[4], false, 0, false, world.instanceId);
+			L2Npc mob = addSpawn(spawn[0], spawn[1], spawn[2], spawn[3], spawn[4], false, 0, false, world.getInstanceId());
 			spawned.put(mob, false);
 		}
 		if (room == 1) // spawn Lahm
-			addSpawn(32359, 142110, 139896, -11888, 8033, false, 0, false, world.instanceId);
+			addSpawn(32359, 142110, 139896, -11888, 8033, false, 0, false, world.getInstanceId());
 		world.npcList2.put(room, spawned);
 		world.roomsStatus[room - 1] = 1;
 	}
 	
 	protected void runDarnel(CCWorld world)
 	{
-		world.status = 9;
+		world.setStatus(9);
 		
-		addSpawn(DARNEL, 152759, 145949, -12588, 21592, false, 0, false, world.instanceId);
+		addSpawn(DARNEL, 152759, 145949, -12588, 21592, false, 0, false, world.getInstanceId());
 		// TODO: missing traps
-		openDoor(24220005, world.instanceId);
-		openDoor(24220006, world.instanceId);
+		openDoor(24220005, world.getInstanceId());
+		openDoor(24220006, world.getInstanceId());
 	}
 	
 	protected void runSteamRooms(CCWorld world, int[][] spawnList, int status)
 	{
-		world.status = status;
+		world.setStatus(status);
 		
 		Map<L2Npc, Boolean> spawned = new FastMap<>();
 		for (int[] spawn : spawnList)
 		{
-			L2Npc mob = addSpawn(spawn[0], spawn[1], spawn[2], spawn[3], spawn[4], false, 0, false, world.instanceId);
+			L2Npc mob = addSpawn(spawn[0], spawn[1], spawn[2], spawn[3], spawn[4], false, 0, false, world.getInstanceId());
 			spawned.put(mob, false);
 		}
 		world.npcList2.put(0, spawned);
@@ -705,7 +705,7 @@ public class CrystalCaverns extends Quest
 		world.oracles.clear();
 		for (int[] oracle : oracleOrder)
 		{
-			world.oracles.put(addSpawn(oracle[0], oracle[1], oracle[2], oracle[3], oracle[4], false, 0, false, world.instanceId), null);
+			world.oracles.put(addSpawn(oracle[0], oracle[1], oracle[2], oracle[3], oracle[4], false, 0, false, world.getInstanceId()), null);
 		}
 	}
 	
@@ -720,10 +720,10 @@ public class CrystalCaverns extends Quest
 	}
 	
 	/*
-	 * protected void runBaylorRoom(CCWorld world) { world.status = 30; addSpawn(29101,152758,143479,-12706,52961,false,0,false,world.instanceId,0);//up power addSpawn(29101,151951,142078,-12706,65203,false,0,false,world.instanceId,0);//up power
-	 * addSpawn(29101,154396,140667,-12706,22197,false,0,false,world.instanceId,0);//up power addSpawn(29102,152162,141249,-12706,5511,false,0,false,world.instanceId,0);//down power addSpawn(29102,153571,140458,-12706,16699,false,0,false,world.instanceId,0);//down power
-	 * addSpawn(29102,154976,141265,-12706,26908,false,0,false,world.instanceId,0);//down power addSpawn(29102,155203,142071,-12706,31560,false,0,false,world.instanceId,0);//down power addSpawn(29102,154380,143468,-12708,43943,false,0,false,world.instanceId,0);//down power
-	 * addSpawn(32271,153573,142069,-9722,11175,false,0,false,world.instanceId); world.Baylor = addSpawn(BAYLOR,153557,142089,-12735,11175,false,0,false,world.instanceId,0); }
+	 * protected void runBaylorRoom(CCWorld world) { world.status = 30; addSpawn(29101,152758,143479,-12706,52961,false,0,false,world.getInstanceId(),0);//up power addSpawn(29101,151951,142078,-12706,65203,false,0,false,world.getInstanceId(),0);//up power
+	 * addSpawn(29101,154396,140667,-12706,22197,false,0,false,world.getInstanceId(),0);//up power addSpawn(29102,152162,141249,-12706,5511,false,0,false,world.getInstanceId(),0);//down power addSpawn(29102,153571,140458,-12706,16699,false,0,false,world.getInstanceId(),0);//down power
+	 * addSpawn(29102,154976,141265,-12706,26908,false,0,false,world.getInstanceId(),0);//down power addSpawn(29102,155203,142071,-12706,31560,false,0,false,world.getInstanceId(),0);//down power addSpawn(29102,154380,143468,-12708,43943,false,0,false,world.getInstanceId(),0);//down power
+	 * addSpawn(32271,153573,142069,-9722,11175,false,0,false,world.getInstanceId()); world.Baylor = addSpawn(BAYLOR,153557,142089,-12735,11175,false,0,false,world.getInstanceId(),0); }
 	 */
 	
 	@Override
@@ -735,7 +735,7 @@ public class CrystalCaverns extends Quest
 			if (tmpworld instanceof CCWorld)
 			{
 				CCWorld world = (CCWorld) tmpworld;
-				if (world.status == 0 && world.oracle.contains(npc))
+				if (world.getStatus() == 0 && world.oracle.contains(npc))
 				{
 					String htmltext = "32281.htm";
 					return htmltext;
@@ -885,7 +885,7 @@ public class CrystalCaverns extends Quest
 			if (tmpworld instanceof CCWorld)
 			{
 				CCWorld world = (CCWorld) tmpworld;
-				if (world.status != 4 && attacker != null)
+				if (world.getStatus() != 4 && attacker != null)
 				{
 					// Lucky cheater, the code only kicks his/her ass out of the dungeon
 					teleCoord tele = new teleCoord();
@@ -893,7 +893,7 @@ public class CrystalCaverns extends Quest
 					tele.y = 172327;
 					tele.z = -945;
 					exitInstance(attacker, tele);
-					world.allowed.remove(world.allowed.indexOf(attacker.getObjectId()));
+					world.removeAllowed(attacker.getObjectId());
 				}
 				else if (world.tears != npc)
 					return "";
@@ -967,7 +967,7 @@ public class CrystalCaverns extends Quest
 		{
 			CCWorld world = (CCWorld) tmpworld;
 			teleCoord teleto = new teleCoord();
-			teleto.instanceId = world.instanceId;
+			teleto.instanceId = world.getInstanceId();
 			if (event.equalsIgnoreCase("TeleportOut"))
 			{
 				teleCoord tele = new teleCoord();
@@ -982,7 +982,7 @@ public class CrystalCaverns extends Quest
 				tele.x = 153689;
 				tele.y = 142226;
 				tele.z = -9750;
-				tele.instanceId = world.instanceId;
+				tele.instanceId = world.getInstanceId();
 				teleportplayer(player, tele);
 			}
 			else if (event.equalsIgnoreCase("Timer2") || event.equalsIgnoreCase("Timer3") || event.equalsIgnoreCase("Timer4") || event.equalsIgnoreCase("Timer5"))
@@ -990,7 +990,7 @@ public class CrystalCaverns extends Quest
 				teleto.x = 144653;
 				teleto.y = 152606;
 				teleto.z = -12126;
-				if (player.getInstanceId() == world.instanceId)
+				if (player.getInstanceId() == world.getInstanceId())
 				{
 					teleportplayer(player, teleto);
 					player.stopSkillEffects(5239);
@@ -1000,7 +1000,7 @@ public class CrystalCaverns extends Quest
 			}
 			else if (event.equalsIgnoreCase("Timer21") || event.equalsIgnoreCase("Timer31") || event.equalsIgnoreCase("Timer41") || event.equalsIgnoreCase("Timer51"))
 			{
-				InstanceManager.getInstance().getInstance(world.instanceId).removeNpcs();
+				InstanceManager.getInstance().getInstance(world.getInstanceId()).removeNpcs();
 				world.npcList2.clear();
 				runSteamRooms(world, STEAM1_SPAWNS, 22);
 				startQuestTimer("Timer21", 300000, npc, null);
@@ -1021,15 +1021,15 @@ public class CrystalCaverns extends Quest
 			else if (event.equalsIgnoreCase("spawnGuards"))
 			{
 				world.kechisHenchmanSpawn++;
-				world.guards.add(addSpawn(KECHIGUARD, 153622, 149699, -12131, 56890, false, 0, false, world.instanceId));
-				world.guards.add(addSpawn(KECHIGUARD, 153609, 149622, -12131, 64023, false, 0, false, world.instanceId));
-				world.guards.add(addSpawn(KECHIGUARD, 153606, 149428, -12131, 64541, false, 0, false, world.instanceId));
-				world.guards.add(addSpawn(KECHIGUARD, 153601, 149534, -12131, 64901, false, 0, false, world.instanceId));
-				world.guards.add(addSpawn(KECHIGUARD, 153620, 149354, -12131, 1164, false, 0, false, world.instanceId));
-				world.guards.add(addSpawn(KECHIGUARD, 153637, 149776, -12131, 61733, false, 0, false, world.instanceId));
-				world.guards.add(addSpawn(KECHIGUARD, 153638, 149292, -12131, 64071, false, 0, false, world.instanceId));
-				world.guards.add(addSpawn(KECHIGUARD, 153647, 149857, -12131, 59402, false, 0, false, world.instanceId));
-				world.guards.add(addSpawn(KECHIGUARD, 153661, 149227, -12131, 65275, false, 0, false, world.instanceId));
+				world.guards.add(addSpawn(KECHIGUARD, 153622, 149699, -12131, 56890, false, 0, false, world.getInstanceId()));
+				world.guards.add(addSpawn(KECHIGUARD, 153609, 149622, -12131, 64023, false, 0, false, world.getInstanceId()));
+				world.guards.add(addSpawn(KECHIGUARD, 153606, 149428, -12131, 64541, false, 0, false, world.getInstanceId()));
+				world.guards.add(addSpawn(KECHIGUARD, 153601, 149534, -12131, 64901, false, 0, false, world.getInstanceId()));
+				world.guards.add(addSpawn(KECHIGUARD, 153620, 149354, -12131, 1164, false, 0, false, world.getInstanceId()));
+				world.guards.add(addSpawn(KECHIGUARD, 153637, 149776, -12131, 61733, false, 0, false, world.getInstanceId()));
+				world.guards.add(addSpawn(KECHIGUARD, 153638, 149292, -12131, 64071, false, 0, false, world.getInstanceId()));
+				world.guards.add(addSpawn(KECHIGUARD, 153647, 149857, -12131, 59402, false, 0, false, world.getInstanceId()));
+				world.guards.add(addSpawn(KECHIGUARD, 153661, 149227, -12131, 65275, false, 0, false, world.getInstanceId()));
 				if (world.kechisHenchmanSpawn <= 5)
 					startQuestTimer("spawnGuards", SPAWN[world.kechisHenchmanSpawn], npc, null);
 				else
@@ -1049,9 +1049,9 @@ public class CrystalCaverns extends Quest
 			}
 			else if (event.equalsIgnoreCase("spawn_oracle"))
 			{
-				addSpawn(32271, 153572, 142075, -9728, 10800, false, 0, false, world.instanceId);
-				addSpawn((getRandom(10) < 5 ? 29116 : 29117), npc.getX(), npc.getY(), npc.getZ(), npc.getHeading(), false, 0, false, world.instanceId); // Baylor's Chest
-				addSpawn(ORACLE_GUIDE_4, 153572, 142075, -12738, 10800, false, 0, false, world.instanceId);
+				addSpawn(32271, 153572, 142075, -9728, 10800, false, 0, false, world.getInstanceId());
+				addSpawn((getRandom(10) < 5 ? 29116 : 29117), npc.getX(), npc.getY(), npc.getZ(), npc.getHeading(), false, 0, false, world.getInstanceId()); // Baylor's Chest
+				addSpawn(ORACLE_GUIDE_4, 153572, 142075, -12738, 10800, false, 0, false, world.getInstanceId());
 				this.cancelQuestTimer("baylor_despawn", npc, null);
 				this.cancelQuestTimers("baylor_skill");
 			}
@@ -1085,7 +1085,7 @@ public class CrystalCaverns extends Quest
 					int radius = 300;
 					int x = (int) (radius * Math.cos(i * 0.618));
 					int y = (int) (radius * Math.sin(i * 0.618));
-					L2Npc mob = addSpawn(29104, 153571 + x, 142075 + y, -12737, 0, false, 0, false, world.instanceId);
+					L2Npc mob = addSpawn(29104, 153571 + x, 142075 + y, -12737, 0, false, 0, false, world.getInstanceId());
 					mob.getAI().setIntention(CtrlIntention.AI_INTENTION_IDLE);
 					world._animationMobs.add(mob);
 				}
@@ -1131,7 +1131,7 @@ public class CrystalCaverns extends Quest
 					int[] spawnLoc = ALARMSPAWN[getRandom(ALARMSPAWN.length)];
 					npc.addSkill(SkillTable.getInstance().getInfo(5244, 1));
 					npc.addSkill(SkillTable.getInstance().getInfo(5245, 1));
-					world._alarm = addSpawn(ALARMID, spawnLoc[0], spawnLoc[1], spawnLoc[2], 10800, false, 0, false, world.instanceId);
+					world._alarm = addSpawn(ALARMID, spawnLoc[0], spawnLoc[1], spawnLoc[2], 10800, false, 0, false, world.getInstanceId());
 					world._alarm.disableCoreAI(true);
 					world._alarm.setIsImmobilized(true);
 					world._alarm.broadcastPacket(new CreatureSay(world._alarm.getObjectId(), 1, world._alarm.getName(), NpcStringId.AN_ALARM_HAS_BEEN_SET_OFF_EVERYBODY_WILL_BE_IN_DANGER_IF_THEY_ARE_NOT_TAKEN_CARE_OF_IMMEDIATELY));
@@ -1180,9 +1180,9 @@ public class CrystalCaverns extends Quest
 			}
 			else if (event.equalsIgnoreCase("Baylor"))
 			{
-				world._baylor = addSpawn(29099, 153572, 142075, -12738, 10800, false, 0, false, world.instanceId);
+				world._baylor = addSpawn(29099, 153572, 142075, -12738, 10800, false, 0, false, world.getInstanceId());
 				world._baylor.setIsParalyzed(true);
-				world._camera = addSpawn(29120, 153273, 141400, -12738, 10800, false, 0, false, world.instanceId);
+				world._camera = addSpawn(29120, 153273, 141400, -12738, 10800, false, 0, false, world.getInstanceId());
 				world._camera.broadcastPacket(new SpecialCamera(world._camera.getObjectId(), 700, -45, 160, 500, 15200, 0, 0, 1, 0));
 				startQuestTimer("baylorMinions", 2000, world._baylor, null);
 			}
@@ -1192,7 +1192,7 @@ public class CrystalCaverns extends Quest
 			{
 				if (!world.crystalGolems.containsKey(npc))
 					world.crystalGolems.put(npc, new CrystalGolem());
-				if (world.status != 3 || !world.crystalGolems.containsKey(npc) || world.crystalGolems.get(npc).foodItem != null || world.crystalGolems.get(npc).isAtDestination)
+				if (world.getStatus() != 3 || !world.crystalGolems.containsKey(npc) || world.crystalGolems.get(npc).foodItem != null || world.crystalGolems.get(npc).isAtDestination)
 					return "";
 				CrystalGolem cryGolem = world.crystalGolems.get(npc);
 				List<L2Object> crystals = new FastList<>();
@@ -1266,8 +1266,8 @@ public class CrystalCaverns extends Quest
 						world.correctGolems++;
 						if (world.correctGolems >= 2)
 						{
-							openDoor(24220026, world.instanceId);
-							world.status = 4;
+							openDoor(24220026, world.getInstanceId());
+							world.setStatus(4);
 						}
 					}
 					else
@@ -1338,28 +1338,28 @@ public class CrystalCaverns extends Quest
 		if (tmpworld instanceof CCWorld)
 		{
 			CCWorld world = (CCWorld) tmpworld;
-			if (world.status == 2 && world.npcList1.containsKey(npc))
+			if (world.getStatus() == 2 && world.npcList1.containsKey(npc))
 			{
 				world.npcList1.put(npc, true);
 				for (boolean isDead : world.npcList1.values())
 					if (!isDead)
 						return "";
-				world.status = 3;
-				world.tears = addSpawn(TEARS, 144298, 154420, -11854, 32767, false, 0, false, world.instanceId); // Tears
+				world.setStatus(3);
+				world.tears = addSpawn(TEARS, 144298, 154420, -11854, 32767, false, 0, false, world.getInstanceId()); // Tears
 				CrystalGolem crygolem1 = new CrystalGolem();
 				CrystalGolem crygolem2 = new CrystalGolem();
-				world.crystalGolems.put(addSpawn(CRYSTAL_GOLEM, 140547, 151670, -11813, 32767, false, 0, false, world.instanceId), crygolem1);
-				world.crystalGolems.put(addSpawn(CRYSTAL_GOLEM, 141941, 151684, -11813, 63371, false, 0, false, world.instanceId), crygolem2);
+				world.crystalGolems.put(addSpawn(CRYSTAL_GOLEM, 140547, 151670, -11813, 32767, false, 0, false, world.getInstanceId()), crygolem1);
+				world.crystalGolems.put(addSpawn(CRYSTAL_GOLEM, 141941, 151684, -11813, 63371, false, 0, false, world.getInstanceId()), crygolem2);
 				for (L2Npc crygolem : world.crystalGolems.keySet())
 					startQuestTimer("autoFood", 2000, crygolem, null);
 			}
-			else if (world.status == 4 && npc.getNpcId() == TEARS)
+			else if (world.getStatus() == 4 && npc.getNpcId() == TEARS)
 			{
-				InstanceManager.getInstance().getInstance(world.instanceId).setDuration(300000);
-				addSpawn(32280, 144312, 154420, -11855, 0, false, 0, false, world.instanceId);
+				InstanceManager.getInstance().getInstance(world.getInstanceId()).setDuration(300000);
+				addSpawn(32280, 144312, 154420, -11855, 0, false, 0, false, world.getInstanceId());
 				giveRewards(player, npc.getInstanceId(), BOSS_CRYSTAL_3, false);
 			}
-			else if (world.status == 2 && world.keyKeepers.contains(npc))
+			else if (world.getStatus() == 2 && world.keyKeepers.contains(npc))
 			{
 				if (npc.getNpcId() == GK1)
 				{
@@ -1374,7 +1374,7 @@ public class CrystalCaverns extends Quest
 					if (party != null)
 						for (L2PcInstance partyMember : party.getMembers())
 						{
-							if (partyMember.getInstanceId() == world.instanceId)
+							if (partyMember.getInstanceId() == world.getInstanceId())
 							{
 								SkillTable.getInstance().getInfo(5239, 1).getEffects(partyMember, partyMember);
 								startQuestTimer("Timer2", 300000, npc, partyMember);
@@ -1391,50 +1391,50 @@ public class CrystalCaverns extends Quest
 					if (gk != npc)
 						gk.decayMe();
 			}
-			else if (world.status == 3)
+			else if (world.getStatus() == 3)
 			{
 				if (checkKillProgress(0, npc, world))
 				{
-					world.status = 4;
-					addSpawn(TOURMALINE, 148202, 144791, -12235, 0, false, 0, false, world.instanceId);
+					world.setStatus(4);
+					addSpawn(TOURMALINE, 148202, 144791, -12235, 0, false, 0, false, world.getInstanceId());
 				}
 				else
 					return "";
 			}
-			else if (world.status == 4)
+			else if (world.getStatus() == 4)
 			{
 				if (npc.getNpcId() == TOURMALINE)
 				{
-					world.status = 5;
-					addSpawn(TEROD, 147777, 146780, -12281, 0, false, 0, false, world.instanceId);
+					world.setStatus(5);
+					addSpawn(TEROD, 147777, 146780, -12281, 0, false, 0, false, world.getInstanceId());
 				}
 			}
-			else if (world.status == 5)
+			else if (world.getStatus() == 5)
 			{
 				if (npc.getNpcId() == TEROD)
 				{
-					world.status = 6;
-					addSpawn(TOURMALINE, 143694, 142659, -11882, 0, false, 0, false, world.instanceId);
+					world.setStatus(6);
+					addSpawn(TOURMALINE, 143694, 142659, -11882, 0, false, 0, false, world.getInstanceId());
 				}
 			}
-			else if (world.status == 6)
+			else if (world.getStatus() == 6)
 			{
 				if (npc.getNpcId() == TOURMALINE)
 				{
-					world.status = 7;
-					addSpawn(DOLPH, 142054, 143288, -11825, 0, false, 0, false, world.instanceId);
+					world.setStatus(7);
+					addSpawn(DOLPH, 142054, 143288, -11825, 0, false, 0, false, world.getInstanceId());
 				}
 			}
-			else if (world.status == 7)
+			else if (world.getStatus() == 7)
 			{
 				if (npc.getNpcId() == DOLPH)
 				{
-					world.status = 8;
+					world.setStatus(8);
 					// first door opener trap
-					addTrap(DOOR_OPENING_TRAP[0], DOOR_OPENING_TRAP[1], DOOR_OPENING_TRAP[2], DOOR_OPENING_TRAP[3], DOOR_OPENING_TRAP[4], null, world.instanceId);
+					addTrap(DOOR_OPENING_TRAP[0], DOOR_OPENING_TRAP[1], DOOR_OPENING_TRAP[2], DOOR_OPENING_TRAP[3], DOOR_OPENING_TRAP[4], null, world.getInstanceId());
 				}
 			}
-			else if (world.status == 8)
+			else if (world.getStatus() == 8)
 			{
 				for (int i = 0; i < 4; i++)
 				{
@@ -1450,7 +1450,7 @@ public class CrystalCaverns extends Quest
 					}
 				}
 			}
-			else if (world.status >= 22 && world.status <= 25)
+			else if (world.getStatus() >= 22 && world.getStatus() <= 25)
 			{
 				if (npc.getNpcId() == 22416)
 				{
@@ -1462,7 +1462,7 @@ public class CrystalCaverns extends Quest
 				{
 					world.npcList2.clear();
 					int[][] oracleOrder;
-					switch (world.status)
+					switch (world.getStatus())
 					{
 						case 22:
 							closeDoor(DOOR6, npc.getInstanceId());
@@ -1475,7 +1475,7 @@ public class CrystalCaverns extends Quest
 							oracleOrder = ordreOracle3;
 							break;
 						case 25:
-							world.status = 26;
+							world.setStatus(26);
 							L2Party party = player.getParty();
 							if (party != null)
 								for (L2PcInstance partyMember : party.getMembers())
@@ -1484,30 +1484,30 @@ public class CrystalCaverns extends Quest
 							cancelQuestTimers("Timer51");
 							openDoor(DOOR3, npc.getInstanceId());
 							openDoor(DOOR4, npc.getInstanceId());
-							L2Npc kechi = addSpawn(KECHI, 154069, 149525, -12158, 51165, false, 0, false, world.instanceId);
+							L2Npc kechi = addSpawn(KECHI, 154069, 149525, -12158, 51165, false, 0, false, world.getInstanceId());
 							startQuestTimer("checkKechiAttack", 1000, kechi, null);
 							return "";
 						default:
-							_log.warning("CrystalCavern-SteamCorridor: status " + world.status + " error. OracleOrder not found in " + world.instanceId);
+							_log.warning("CrystalCavern-SteamCorridor: status " + world.getStatus() + " error. OracleOrder not found in " + world.getInstanceId());
 							return "";
 					}
 					runSteamOracles(world, oracleOrder);
 				}
 			}
-			else if ((world.status == 9 && npc.getNpcId() == DARNEL) || (world.status == 26 && npc.getNpcId() == KECHI))
+			else if ((world.getStatus() == 9 && npc.getNpcId() == DARNEL) || (world.getStatus() == 26 && npc.getNpcId() == KECHI))
 			{
-				InstanceManager.getInstance().getInstance(world.instanceId).setDuration(300000);
+				InstanceManager.getInstance().getInstance(world.getInstanceId()).setDuration(300000);
 				int bossCry;
 				if (npc.getNpcId() == KECHI)
 				{
 					bossCry = BOSS_CRYSTAL_2;
 					cancelQuestTimers("spawnGuards");
-					addSpawn(32280, 154077, 149527, -12159, 0, false, 0, false, world.instanceId);
+					addSpawn(32280, 154077, 149527, -12159, 0, false, 0, false, world.getInstanceId());
 				}
 				else if (npc.getNpcId() == DARNEL)
 				{
 					bossCry = BOSS_CRYSTAL_1;
-					addSpawn(32280, 152761, 145950, -12588, 0, false, 0, false, world.instanceId);
+					addSpawn(32280, 152761, 145950, -12588, 0, false, 0, false, world.getInstanceId());
 				}
 				else
 				{
@@ -1526,7 +1526,7 @@ public class CrystalCaverns extends Quest
 			}
 			else if (npc.getNpcId() == BAYLOR)
 			{
-				world.status = 31;
+				world.setStatus(31);
 				world._baylor = null;
 				npc.broadcastPacket(new PlaySound(1, "BS01_D", 1, npc.getObjectId(), npc.getX(), npc.getY(), npc.getZ()));
 				Instance baylorInstance = InstanceManager.getInstance().getInstance(npc.getInstanceId());
@@ -1554,6 +1554,7 @@ public class CrystalCaverns extends Quest
 			enterInstance(player, "CrystalCaverns.xml", tele);
 			return "";
 		}
+		
 		InstanceWorld tmpworld = InstanceManager.getInstance().getWorld(npc.getInstanceId());
 		if (tmpworld instanceof CCWorld)
 		{
@@ -1571,7 +1572,7 @@ public class CrystalCaverns extends Quest
 				switch (npc.getNpcId())
 				{
 					case 32275:
-						if (world.status == 22)
+						if (world.getStatus() == 22)
 							runSteamRooms(world, STEAM2_SPAWNS, 23);
 						teleto.x = 147529;
 						teleto.y = 152587;
@@ -1581,7 +1582,7 @@ public class CrystalCaverns extends Quest
 						if (party != null)
 							for (L2PcInstance partyMember : party.getMembers())
 							{
-								if (partyMember.getInstanceId() == world.instanceId)
+								if (partyMember.getInstanceId() == world.getInstanceId())
 								{
 									partyMember.stopSkillEffects(5239);
 									SkillTable.getInstance().getInfo(5239, 2).getEffects(partyMember, partyMember);
@@ -1597,7 +1598,7 @@ public class CrystalCaverns extends Quest
 						startQuestTimer("Timer31", 600000, npc, null);
 						break;
 					case 32276:
-						if (world.status == 23)
+						if (world.getStatus() == 23)
 							runSteamRooms(world, STEAM3_SPAWNS, 24);
 						teleto.x = 150194;
 						teleto.y = 152610;
@@ -1607,7 +1608,7 @@ public class CrystalCaverns extends Quest
 						if (party != null)
 							for (L2PcInstance partyMember : party.getMembers())
 							{
-								if (partyMember.getInstanceId() == world.instanceId)
+								if (partyMember.getInstanceId() == world.getInstanceId())
 								{
 									partyMember.stopSkillEffects(5239);
 									SkillTable.getInstance().getInfo(5239, 4).getEffects(partyMember, partyMember);
@@ -1623,7 +1624,7 @@ public class CrystalCaverns extends Quest
 						startQuestTimer("Timer41", 1200000, npc, null);
 						break;
 					case 32277:
-						if (world.status == 24)
+						if (world.getStatus() == 24)
 							runSteamRooms(world, STEAM4_SPAWNS, 25);
 						teleto.x = 149743;
 						teleto.y = 149986;
@@ -1633,7 +1634,7 @@ public class CrystalCaverns extends Quest
 						if (party != null)
 							for (L2PcInstance partyMember : party.getMembers())
 							{
-								if (partyMember.getInstanceId() == world.instanceId)
+								if (partyMember.getInstanceId() == world.getInstanceId())
 								{
 									partyMember.stopSkillEffects(5239);
 									SkillTable.getInstance().getInfo(5239, 3).getEffects(partyMember, partyMember);
@@ -1670,7 +1671,7 @@ public class CrystalCaverns extends Quest
 			}
 			else if (npc.getNpcId() == ORACLE_GUIDE_3)
 			{
-				if (world.status < 30 && checkBaylorConditions(player))
+				if (world.getStatus() < 30 && checkBaylorConditions(player))
 				{
 					world._raiders.clear();
 					L2Party party = player.getParty();
@@ -1688,9 +1689,9 @@ public class CrystalCaverns extends Quest
 				}
 				else
 					return "";
-				world.status = 30;
+				world.setStatus(30);
 				long time = world.endTime - System.currentTimeMillis();
-				Instance baylorInstance = InstanceManager.getInstance().getInstance(world.instanceId);
+				Instance baylorInstance = InstanceManager.getInstance().getInstance(world.getInstanceId());
 				baylorInstance.setDuration((int) time);
 				
 				int radius = 150;
@@ -1712,7 +1713,7 @@ public class CrystalCaverns extends Quest
 				}
 				startQuestTimer("Baylor", 30000, npc, null);
 			}
-			else if (npc.getNpcId() == ORACLE_GUIDE_4 && world.status == 31)
+			else if (npc.getNpcId() == ORACLE_GUIDE_4 && world.getStatus() == 31)
 			{
 				teleCoord teleto = new teleCoord();
 				teleto.instanceId = npc.getInstanceId();
@@ -1737,7 +1738,7 @@ public class CrystalCaverns extends Quest
 				case TRAP_DISARMED:
 					if (trap.getNpcId() == DOOR_OPENING_TRAP[0])
 					{
-						openDoor(24220001, world.instanceId);
+						openDoor(24220001, world.getInstanceId());
 						runEmeraldRooms(world, ROOM1_SPAWNS, 1);
 					}
 					break;
@@ -1755,7 +1756,7 @@ public class CrystalCaverns extends Quest
 			if (tmpworld instanceof CCWorld)
 			{
 				CCWorld world = (CCWorld) tmpworld;
-				if (world.status == 8)
+				if (world.getStatus() == 8)
 				{
 					int room;
 					int[][] spawns;
@@ -1776,7 +1777,7 @@ public class CrystalCaverns extends Quest
 						default:
 							return super.onEnterZone(character, zone);
 					}
-					for (L2DoorInstance door : InstanceManager.getInstance().getInstance(world.instanceId).getDoors())
+					for (L2DoorInstance door : InstanceManager.getInstance().getInstance(world.getInstanceId()).getDoors())
 						if (door.getDoorId() == (room + 24220000))
 						{
 							if (door.getOpen())
@@ -1810,7 +1811,7 @@ public class CrystalCaverns extends Quest
 			if (tmpworld instanceof CCWorld)
 			{
 				CCWorld world = (CCWorld) tmpworld;
-				if (world.status == 8)
+				if (world.getStatus() == 8)
 				{
 					int doorId;
 					switch (zone.getId())
@@ -1827,7 +1828,7 @@ public class CrystalCaverns extends Quest
 						default:
 							return super.onExitZone(character, zone);
 					}
-					for (L2DoorInstance door : InstanceManager.getInstance().getInstance(world.instanceId).getDoors())
+					for (L2DoorInstance door : InstanceManager.getInstance().getInstance(world.getInstanceId()).getDoors())
 						if (door.getDoorId() == doorId)
 						{
 							if (door.getOpen() && world.openedDoors.get(door) == character)
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/instances/DarkCloudMansion/DarkCloudMansion.java b/L2J_DataPack_BETA/dist/game/data/scripts/instances/DarkCloudMansion/DarkCloudMansion.java
index 6cd796a6f5..ed5a91fd74 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/instances/DarkCloudMansion/DarkCloudMansion.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/instances/DarkCloudMansion/DarkCloudMansion.java
@@ -19,12 +19,12 @@ import javolution.util.FastMap;
 
 import com.l2jserver.gameserver.ai.CtrlIntention;
 import com.l2jserver.gameserver.instancemanager.InstanceManager;
-import com.l2jserver.gameserver.instancemanager.InstanceManager.InstanceWorld;
 import com.l2jserver.gameserver.model.L2Party;
 import com.l2jserver.gameserver.model.actor.L2Npc;
 import com.l2jserver.gameserver.model.actor.instance.L2DoorInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.entity.Instance;
+import com.l2jserver.gameserver.model.instancezone.InstanceWorld;
 import com.l2jserver.gameserver.model.quest.Quest;
 import com.l2jserver.gameserver.model.quest.QuestState;
 import com.l2jserver.gameserver.model.skills.L2Skill;
@@ -35,6 +35,9 @@ import com.l2jserver.gameserver.network.serverpackets.MagicSkillUse;
 import com.l2jserver.gameserver.network.serverpackets.NpcSay;
 import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
 
+/**
+ * Dark Cloud Mansion instance zone.
+ */
 public class DarkCloudMansion extends Quest
 {
 	private static String qn = "DarkCloudMansion";
@@ -110,9 +113,12 @@ public class DarkCloudMansion extends Quest
 	private static int D5 = 24230004; // Forth Room
 	private static int D6 = 24230006; // Fifth Room
 	private static int W1 = 24230007; // Wall 1
-	/*
-	 * private static int W2 = 24230008; //Wall 2 private static int W3 = 24230009; //Wall 3 private static int W4 = 24230010; //Wall 4 private static int W5 = 24230011; //Wall 5 private static int W6 = 24230012; //Wall 6 private static int W7 = 24230013; //Wall 7
-	 */
+	// private static int W2 = 24230008; // Wall 2
+	// private static int W3 = 24230009; // Wall 3
+	// private static int W4 = 24230010; // Wall 4
+	// private static int W5 = 24230011; // Wall 5
+	// private static int W6 = 24230012; // Wall 6
+	// private static int W7 = 24230013; // Wall 7
 	
 	private static NpcStringId[] _spawnChat =
 	{
@@ -558,7 +564,7 @@ public class DarkCloudMansion extends Quest
 				player.sendPacket(SystemMessageId.ALREADY_ENTERED_ANOTHER_INSTANCE_CANT_ENTER);
 				return 0;
 			}
-			teleto.instanceId = world.instanceId;
+			teleto.instanceId = world.getInstanceId();
 			teleportplayer(player, teleto);
 			return instanceId;
 		}
@@ -570,8 +576,8 @@ public class DarkCloudMansion extends Quest
 		L2Party party = player.getParty();
 		instanceId = InstanceManager.getInstance().createDynamicInstance(template);
 		world = new DMCWorld();
-		world.instanceId = instanceId;
-		world.templateId = INSTANCEID;
+		world.setInstanceId(instanceId);
+		world.setTemplateId(INSTANCEID);
 		InstanceManager.getInstance().addWorld(world);
 		_log.info("DarkCloudMansion: started " + template + " Instance: " + instanceId + " created by player: " + player.getName());
 		runStartRoom((DMCWorld) world);
@@ -579,7 +585,7 @@ public class DarkCloudMansion extends Quest
 		teleto.instanceId = instanceId;
 		if (debug && (party == null))
 		{
-			world.allowed.add(player.getObjectId());
+			world.addAllowed(player.getObjectId());
 			teleportplayer(player, teleto);
 		}
 		else
@@ -590,7 +596,7 @@ public class DarkCloudMansion extends Quest
 				{
 					newQuestState(partyMember);
 				}
-				world.allowed.add(partyMember.getObjectId());
+				world.addAllowed(partyMember.getObjectId());
 				teleportplayer(partyMember, teleto);
 			}
 		}
@@ -607,12 +613,12 @@ public class DarkCloudMansion extends Quest
 	
 	protected void runStartRoom(DMCWorld world)
 	{
-		world.status = 0;
+		world.setStatus(0);
 		DMCRoom StartRoom = new DMCRoom();
 		DMCNpc thisnpc;
 		
 		thisnpc = new DMCNpc();
-		thisnpc.npc = addSpawn(BM[0], 146817, 180335, -6117, 0, false, 0, false, world.instanceId);
+		thisnpc.npc = addSpawn(BM[0], 146817, 180335, -6117, 0, false, 0, false, world.getInstanceId());
 		StartRoom.npcList.add(thisnpc);
 		if (noRndWalk)
 		{
@@ -620,7 +626,7 @@ public class DarkCloudMansion extends Quest
 		}
 		
 		thisnpc = new DMCNpc();
-		thisnpc.npc = addSpawn(BM[0], 146741, 180589, -6117, 0, false, 0, false, world.instanceId);
+		thisnpc.npc = addSpawn(BM[0], 146741, 180589, -6117, 0, false, 0, false, world.getInstanceId());
 		StartRoom.npcList.add(thisnpc);
 		if (noRndWalk)
 		{
@@ -629,7 +635,7 @@ public class DarkCloudMansion extends Quest
 		world.rooms.put("StartRoom", StartRoom);
 		if (debug)
 		{
-			_log.info("DarkCloudMansion: first room spawned in instance " + world.instanceId);
+			_log.info("DarkCloudMansion: first room spawned in instance " + world.getInstanceId());
 		}
 	}
 	
@@ -640,7 +646,7 @@ public class DarkCloudMansion extends Quest
 		world.rooms.remove("Hall"); // remove room instance to avoid adding mob every time
 		
 		thisnpc = new DMCNpc();
-		thisnpc.npc = addSpawn(BM[1], 147217, 180112, -6117, 0, false, 0, false, world.instanceId);
+		thisnpc.npc = addSpawn(BM[1], 147217, 180112, -6117, 0, false, 0, false, world.getInstanceId());
 		if (noRndWalk)
 		{
 			thisnpc.npc.setIsNoRndWalk(true);
@@ -648,7 +654,7 @@ public class DarkCloudMansion extends Quest
 		Hall.npcList.add(thisnpc);
 		
 		thisnpc = new DMCNpc();
-		thisnpc.npc = addSpawn(BM[2], 147217, 180209, -6117, 0, false, 0, false, world.instanceId);
+		thisnpc.npc = addSpawn(BM[2], 147217, 180209, -6117, 0, false, 0, false, world.getInstanceId());
 		if (noRndWalk)
 		{
 			thisnpc.npc.setIsNoRndWalk(true);
@@ -656,7 +662,7 @@ public class DarkCloudMansion extends Quest
 		Hall.npcList.add(thisnpc);
 		
 		thisnpc = new DMCNpc();
-		thisnpc.npc = addSpawn(BM[1], 148521, 180112, -6117, 0, false, 0, false, world.instanceId);
+		thisnpc.npc = addSpawn(BM[1], 148521, 180112, -6117, 0, false, 0, false, world.getInstanceId());
 		if (noRndWalk)
 		{
 			thisnpc.npc.setIsNoRndWalk(true);
@@ -664,7 +670,7 @@ public class DarkCloudMansion extends Quest
 		Hall.npcList.add(thisnpc);
 		
 		thisnpc = new DMCNpc();
-		thisnpc.npc = addSpawn(BM[0], 148521, 180209, -6117, 0, false, 0, false, world.instanceId);
+		thisnpc.npc = addSpawn(BM[0], 148521, 180209, -6117, 0, false, 0, false, world.getInstanceId());
 		if (noRndWalk)
 		{
 			thisnpc.npc.setIsNoRndWalk(true);
@@ -672,7 +678,7 @@ public class DarkCloudMansion extends Quest
 		Hall.npcList.add(thisnpc);
 		
 		thisnpc = new DMCNpc();
-		thisnpc.npc = addSpawn(BM[1], 148525, 180910, -6117, 0, false, 0, false, world.instanceId);
+		thisnpc.npc = addSpawn(BM[1], 148525, 180910, -6117, 0, false, 0, false, world.getInstanceId());
 		if (noRndWalk)
 		{
 			thisnpc.npc.setIsNoRndWalk(true);
@@ -680,7 +686,7 @@ public class DarkCloudMansion extends Quest
 		Hall.npcList.add(thisnpc);
 		
 		thisnpc = new DMCNpc();
-		thisnpc.npc = addSpawn(BM[2], 148435, 180910, -6117, 0, false, 0, false, world.instanceId);
+		thisnpc.npc = addSpawn(BM[2], 148435, 180910, -6117, 0, false, 0, false, world.getInstanceId());
 		if (noRndWalk)
 		{
 			thisnpc.npc.setIsNoRndWalk(true);
@@ -688,7 +694,7 @@ public class DarkCloudMansion extends Quest
 		Hall.npcList.add(thisnpc);
 		
 		thisnpc = new DMCNpc();
-		thisnpc.npc = addSpawn(BM[1], 147242, 180910, -6117, 0, false, 0, false, world.instanceId);
+		thisnpc.npc = addSpawn(BM[1], 147242, 180910, -6117, 0, false, 0, false, world.getInstanceId());
 		if (noRndWalk)
 		{
 			thisnpc.npc.setIsNoRndWalk(true);
@@ -696,7 +702,7 @@ public class DarkCloudMansion extends Quest
 		Hall.npcList.add(thisnpc);
 		
 		thisnpc = new DMCNpc();
-		thisnpc.npc = addSpawn(BM[2], 147242, 180819, -6117, 0, false, 0, false, world.instanceId);
+		thisnpc.npc = addSpawn(BM[2], 147242, 180819, -6117, 0, false, 0, false, world.getInstanceId());
 		if (noRndWalk)
 		{
 			thisnpc.npc.setIsNoRndWalk(true);
@@ -713,8 +719,8 @@ public class DarkCloudMansion extends Quest
 	protected void runHall(DMCWorld world)
 	{
 		spawnHall(world);
-		world.status = 1;
-		openDoor(D1, world.instanceId);
+		world.setStatus(1);
+		openDoor(D1, world.getInstanceId());
 	}
 	
 	protected void runFirstRoom(DMCWorld world)
@@ -723,7 +729,7 @@ public class DarkCloudMansion extends Quest
 		DMCNpc thisnpc;
 		
 		thisnpc = new DMCNpc();
-		thisnpc.npc = addSpawn(HG[1], 147842, 179837, -6117, 0, false, 0, false, world.instanceId);
+		thisnpc.npc = addSpawn(HG[1], 147842, 179837, -6117, 0, false, 0, false, world.getInstanceId());
 		if (noRndWalk)
 		{
 			thisnpc.npc.setIsNoRndWalk(true);
@@ -731,7 +737,7 @@ public class DarkCloudMansion extends Quest
 		FirstRoom.npcList.add(thisnpc);
 		
 		thisnpc = new DMCNpc();
-		thisnpc.npc = addSpawn(HG[0], 147711, 179708, -6117, 0, false, 0, false, world.instanceId);
+		thisnpc.npc = addSpawn(HG[0], 147711, 179708, -6117, 0, false, 0, false, world.getInstanceId());
 		if (noRndWalk)
 		{
 			thisnpc.npc.setIsNoRndWalk(true);
@@ -739,7 +745,7 @@ public class DarkCloudMansion extends Quest
 		FirstRoom.npcList.add(thisnpc);
 		
 		thisnpc = new DMCNpc();
-		thisnpc.npc = addSpawn(HG[1], 147842, 179552, -6117, 0, false, 0, false, world.instanceId);
+		thisnpc.npc = addSpawn(HG[1], 147842, 179552, -6117, 0, false, 0, false, world.getInstanceId());
 		if (noRndWalk)
 		{
 			thisnpc.npc.setIsNoRndWalk(true);
@@ -747,7 +753,7 @@ public class DarkCloudMansion extends Quest
 		FirstRoom.npcList.add(thisnpc);
 		
 		thisnpc = new DMCNpc();
-		thisnpc.npc = addSpawn(HG[0], 147964, 179708, -6117, 0, false, 0, false, world.instanceId);
+		thisnpc.npc = addSpawn(HG[0], 147964, 179708, -6117, 0, false, 0, false, world.getInstanceId());
 		if (noRndWalk)
 		{
 			thisnpc.npc.setIsNoRndWalk(true);
@@ -755,8 +761,8 @@ public class DarkCloudMansion extends Quest
 		FirstRoom.npcList.add(thisnpc);
 		
 		world.rooms.put("FirstRoom", FirstRoom);
-		world.status = 2;
-		openDoor(D2, world.instanceId);
+		world.setStatus(2);
+		openDoor(D2, world.getInstanceId());
 		if (debug)
 		{
 			_log.info("DarkCloudMansion: spawned first room");
@@ -765,9 +771,9 @@ public class DarkCloudMansion extends Quest
 	
 	protected void runHall2(DMCWorld world)
 	{
-		addSpawn(SOFaith, 147818, 179643, -6117, 0, false, 0, false, world.instanceId);
+		addSpawn(SOFaith, 147818, 179643, -6117, 0, false, 0, false, world.getInstanceId());
 		spawnHall(world);
-		world.status = 3;
+		world.setStatus(3);
 	}
 	
 	protected void runSecondRoom(DMCWorld world)
@@ -786,38 +792,38 @@ public class DarkCloudMansion extends Quest
 		int i = getRandom(MonolithOrder.length);
 		
 		thisnpc = new DMCNpc();
-		thisnpc.npc = addSpawn(BSM, 147800, 181150, -6117, 0, false, 0, false, world.instanceId);
+		thisnpc.npc = addSpawn(BSM, 147800, 181150, -6117, 0, false, 0, false, world.getInstanceId());
 		thisnpc.order = MonolithOrder[i][0];
 		SecondRoom.npcList.add(thisnpc);
 		
 		thisnpc = new DMCNpc();
-		thisnpc.npc = addSpawn(BSM, 147900, 181215, -6117, 0, false, 0, false, world.instanceId);
+		thisnpc.npc = addSpawn(BSM, 147900, 181215, -6117, 0, false, 0, false, world.getInstanceId());
 		thisnpc.order = MonolithOrder[i][1];
 		SecondRoom.npcList.add(thisnpc);
 		
 		thisnpc = new DMCNpc();
-		thisnpc.npc = addSpawn(BSM, 147900, 181345, -6117, 0, false, 0, false, world.instanceId);
+		thisnpc.npc = addSpawn(BSM, 147900, 181345, -6117, 0, false, 0, false, world.getInstanceId());
 		thisnpc.order = MonolithOrder[i][2];
 		SecondRoom.npcList.add(thisnpc);
 		
 		thisnpc = new DMCNpc();
-		thisnpc.npc = addSpawn(BSM, 147800, 181410, -6117, 0, false, 0, false, world.instanceId);
+		thisnpc.npc = addSpawn(BSM, 147800, 181410, -6117, 0, false, 0, false, world.getInstanceId());
 		thisnpc.order = MonolithOrder[i][3];
 		SecondRoom.npcList.add(thisnpc);
 		
 		thisnpc = new DMCNpc();
-		thisnpc.npc = addSpawn(BSM, 147700, 181345, -6117, 0, false, 0, false, world.instanceId);
+		thisnpc.npc = addSpawn(BSM, 147700, 181345, -6117, 0, false, 0, false, world.getInstanceId());
 		thisnpc.order = MonolithOrder[i][4];
 		SecondRoom.npcList.add(thisnpc);
 		
 		thisnpc = new DMCNpc();
-		thisnpc.npc = addSpawn(BSM, 147700, 181215, -6117, 0, false, 0, false, world.instanceId);
+		thisnpc.npc = addSpawn(BSM, 147700, 181215, -6117, 0, false, 0, false, world.getInstanceId());
 		thisnpc.order = MonolithOrder[i][5];
 		SecondRoom.npcList.add(thisnpc);
 		
 		world.rooms.put("SecondRoom", SecondRoom);
-		world.status = 4;
-		openDoor(D3, world.instanceId);
+		world.setStatus(4);
+		openDoor(D3, world.getInstanceId());
 		if (debug)
 		{
 			_log.info("DarkCloudMansion: spawned second room");
@@ -826,9 +832,9 @@ public class DarkCloudMansion extends Quest
 	
 	protected void runHall3(DMCWorld world)
 	{
-		addSpawn(SOAdversity, 147808, 181281, -6117, 16383, false, 0, false, world.instanceId);
+		addSpawn(SOAdversity, 147808, 181281, -6117, 16383, false, 0, false, world.getInstanceId());
 		spawnHall(world);
-		world.status = 5;
+		world.setStatus(5);
 	}
 	
 	protected void runThirdRoom(DMCWorld world)
@@ -836,45 +842,45 @@ public class DarkCloudMansion extends Quest
 		DMCRoom ThirdRoom = new DMCRoom();
 		DMCNpc thisnpc = new DMCNpc();
 		thisnpc.isDead = false;
-		thisnpc.npc = addSpawn(BM[1], 148765, 180450, -6117, 0, false, 0, false, world.instanceId);
+		thisnpc.npc = addSpawn(BM[1], 148765, 180450, -6117, 0, false, 0, false, world.getInstanceId());
 		if (noRndWalk)
 		{
 			thisnpc.npc.setIsNoRndWalk(true);
 		}
 		ThirdRoom.npcList.add(thisnpc);
-		thisnpc.npc = addSpawn(BM[2], 148865, 180190, -6117, 0, false, 0, false, world.instanceId);
+		thisnpc.npc = addSpawn(BM[2], 148865, 180190, -6117, 0, false, 0, false, world.getInstanceId());
 		if (noRndWalk)
 		{
 			thisnpc.npc.setIsNoRndWalk(true);
 		}
 		ThirdRoom.npcList.add(thisnpc);
-		thisnpc.npc = addSpawn(BM[1], 148995, 180190, -6117, 0, false, 0, false, world.instanceId);
+		thisnpc.npc = addSpawn(BM[1], 148995, 180190, -6117, 0, false, 0, false, world.getInstanceId());
 		if (noRndWalk)
 		{
 			thisnpc.npc.setIsNoRndWalk(true);
 		}
 		ThirdRoom.npcList.add(thisnpc);
-		thisnpc.npc = addSpawn(BM[0], 149090, 180450, -6117, 0, false, 0, false, world.instanceId);
+		thisnpc.npc = addSpawn(BM[0], 149090, 180450, -6117, 0, false, 0, false, world.getInstanceId());
 		if (noRndWalk)
 		{
 			thisnpc.npc.setIsNoRndWalk(true);
 		}
 		ThirdRoom.npcList.add(thisnpc);
-		thisnpc.npc = addSpawn(BM[1], 148995, 180705, -6117, 0, false, 0, false, world.instanceId);
+		thisnpc.npc = addSpawn(BM[1], 148995, 180705, -6117, 0, false, 0, false, world.getInstanceId());
 		if (noRndWalk)
 		{
 			thisnpc.npc.setIsNoRndWalk(true);
 		}
 		ThirdRoom.npcList.add(thisnpc);
-		thisnpc.npc = addSpawn(BM[2], 148865, 180705, -6117, 0, false, 0, false, world.instanceId);
+		thisnpc.npc = addSpawn(BM[2], 148865, 180705, -6117, 0, false, 0, false, world.getInstanceId());
 		if (noRndWalk)
 		{
 			thisnpc.npc.setIsNoRndWalk(true);
 		}
 		ThirdRoom.npcList.add(thisnpc);
 		world.rooms.put("ThirdRoom", ThirdRoom);
-		world.status = 6;
-		openDoor(D4, world.instanceId);
+		world.setStatus(6);
+		openDoor(D4, world.getInstanceId());
 		if (debug)
 		{
 			_log.info("DarkCloudMansion: spawned third room");
@@ -883,48 +889,48 @@ public class DarkCloudMansion extends Quest
 	
 	protected void runThirdRoom2(DMCWorld world)
 	{
-		addSpawn(SOAdventure, 148910, 178397, -6117, 16383, false, 0, false, world.instanceId);
+		addSpawn(SOAdventure, 148910, 178397, -6117, 16383, false, 0, false, world.getInstanceId());
 		DMCRoom ThirdRoom = new DMCRoom();
 		DMCNpc thisnpc = new DMCNpc();
 		thisnpc.isDead = false;
-		thisnpc.npc = addSpawn(BM[1], 148765, 180450, -6117, 0, false, 0, false, world.instanceId);
+		thisnpc.npc = addSpawn(BM[1], 148765, 180450, -6117, 0, false, 0, false, world.getInstanceId());
 		if (noRndWalk)
 		{
 			thisnpc.npc.setIsNoRndWalk(true);
 		}
 		ThirdRoom.npcList.add(thisnpc);
-		thisnpc.npc = addSpawn(BM[2], 148865, 180190, -6117, 0, false, 0, false, world.instanceId);
+		thisnpc.npc = addSpawn(BM[2], 148865, 180190, -6117, 0, false, 0, false, world.getInstanceId());
 		if (noRndWalk)
 		{
 			thisnpc.npc.setIsNoRndWalk(true);
 		}
 		ThirdRoom.npcList.add(thisnpc);
-		thisnpc.npc = addSpawn(BM[1], 148995, 180190, -6117, 0, false, 0, false, world.instanceId);
+		thisnpc.npc = addSpawn(BM[1], 148995, 180190, -6117, 0, false, 0, false, world.getInstanceId());
 		if (noRndWalk)
 		{
 			thisnpc.npc.setIsNoRndWalk(true);
 		}
 		ThirdRoom.npcList.add(thisnpc);
-		thisnpc.npc = addSpawn(BM[0], 149090, 180450, -6117, 0, false, 0, false, world.instanceId);
+		thisnpc.npc = addSpawn(BM[0], 149090, 180450, -6117, 0, false, 0, false, world.getInstanceId());
 		if (noRndWalk)
 		{
 			thisnpc.npc.setIsNoRndWalk(true);
 		}
 		ThirdRoom.npcList.add(thisnpc);
-		thisnpc.npc = addSpawn(BM[1], 148995, 180705, -6117, 0, false, 0, false, world.instanceId);
+		thisnpc.npc = addSpawn(BM[1], 148995, 180705, -6117, 0, false, 0, false, world.getInstanceId());
 		if (noRndWalk)
 		{
 			thisnpc.npc.setIsNoRndWalk(true);
 		}
 		ThirdRoom.npcList.add(thisnpc);
-		thisnpc.npc = addSpawn(BM[2], 148865, 180705, -6117, 0, false, 0, false, world.instanceId);
+		thisnpc.npc = addSpawn(BM[2], 148865, 180705, -6117, 0, false, 0, false, world.getInstanceId());
 		if (noRndWalk)
 		{
 			thisnpc.npc.setIsNoRndWalk(true);
 		}
 		ThirdRoom.npcList.add(thisnpc);
 		world.rooms.put("ThirdRoom2", ThirdRoom);
-		world.status = 8;
+		world.setStatus(8);
 		if (debug)
 		{
 			_log.info("DarkCloudMansion: spawned third room second time");
@@ -956,7 +962,7 @@ public class DarkCloudMansion extends Quest
 			for (int y = 179280; y > 178405; y -= 125)
 			{
 				thisnpc = new DMCNpc();
-				thisnpc.npc = addSpawn(SC, x, y, -6115, 16215, false, 0, false, world.instanceId);
+				thisnpc.npc = addSpawn(SC, x, y, -6115, 16215, false, 0, false, world.getInstanceId());
 				thisnpc.status = templist[yy][xx];
 				thisnpc.order = yy;
 				ForthRoom.npcList.add(thisnpc);
@@ -974,8 +980,8 @@ public class DarkCloudMansion extends Quest
 		}
 		
 		world.rooms.put("ForthRoom", ForthRoom);
-		world.status = 7;
-		openDoor(D5, world.instanceId);
+		world.setStatus(7);
+		openDoor(D5, world.getInstanceId());
 		if (debug)
 		{
 			_log.info("DarkCloudMansion: spawned forth room");
@@ -985,8 +991,8 @@ public class DarkCloudMansion extends Quest
 	protected void runFifthRoom(DMCWorld world)
 	{
 		spawnFifthRoom(world);
-		world.status = 9;
-		openDoor(D6, world.instanceId);
+		world.setStatus(9);
+		openDoor(D6, world.getInstanceId());
 		if (debug)
 		{
 			_log.info("DarkCloudMansion: spawned fifth room");
@@ -1008,7 +1014,7 @@ public class DarkCloudMansion extends Quest
 		for (int x = 148720; x < 149175; x += 65)
 		{
 			thisnpc = new DMCNpc();
-			thisnpc.npc = addSpawn(BS[idx], x, 182145, -6117, 48810, false, 0, false, world.instanceId);
+			thisnpc.npc = addSpawn(BS[idx], x, 182145, -6117, 48810, false, 0, false, world.getInstanceId());
 			thisnpc.npc.setIsNoRndWalk(true);
 			thisnpc.order = idx;
 			thisnpc.status = temp[idx];
@@ -1058,7 +1064,7 @@ public class DarkCloudMansion extends Quest
 		int x = GolemSpawn[i][1];
 		int y = GolemSpawn[i][2];
 		
-		npc.golem = addSpawn(mobId, x, y, -6117, 0, false, 0, false, world.instanceId);
+		npc.golem = addSpawn(mobId, x, y, -6117, 0, false, 0, false, world.getInstanceId());
 		if (noRndWalk)
 		{
 			npc.golem.setIsNoRndWalk(true);
@@ -1088,8 +1094,8 @@ public class DarkCloudMansion extends Quest
 	
 	protected void endInstance(DMCWorld world)
 	{
-		world.status = 10;
-		addSpawn(SOTruth, 148911, 181940, -6117, 16383, false, 0, false, world.instanceId);
+		world.setStatus(10);
+		addSpawn(SOTruth, 148911, 181940, -6117, 16383, false, 0, false, world.getInstanceId());
 		world.rooms.clear();
 		if (debug)
 		{
@@ -1218,7 +1224,7 @@ public class DarkCloudMansion extends Quest
 				{
 					if ((mob.order == i) && (ForthRoom.counter == i))
 					{
-						openDoor(W1 + i, world.instanceId);
+						openDoor(W1 + i, world.getInstanceId());
 						ForthRoom.counter += 1;
 						if (ForthRoom.counter == 7)
 						{
@@ -1305,35 +1311,35 @@ public class DarkCloudMansion extends Quest
 		if (tmpworld instanceof DMCWorld)
 		{
 			world = (DMCWorld) tmpworld;
-			if (world.status == 0)
+			if (world.getStatus() == 0)
 			{
 				if (checkKillProgress(npc, world.rooms.get("StartRoom")))
 				{
 					runHall(world);
 				}
 			}
-			if (world.status == 1)
+			if (world.getStatus() == 1)
 			{
 				if (checkKillProgress(npc, world.rooms.get("Hall")))
 				{
 					runFirstRoom(world);
 				}
 			}
-			if (world.status == 2)
+			if (world.getStatus() == 2)
 			{
 				if (checkKillProgress(npc, world.rooms.get("FirstRoom")))
 				{
 					runHall2(world);
 				}
 			}
-			if (world.status == 3)
+			if (world.getStatus() == 3)
 			{
 				if (checkKillProgress(npc, world.rooms.get("Hall")))
 				{
 					runSecondRoom(world);
 				}
 			}
-			if (world.status == 4)
+			if (world.getStatus() == 4)
 			{
 				DMCRoom SecondRoom = world.rooms.get("SecondRoom");
 				for (DMCNpc mob : SecondRoom.npcList)
@@ -1344,32 +1350,32 @@ public class DarkCloudMansion extends Quest
 					}
 				}
 			}
-			if (world.status == 5)
+			if (world.getStatus() == 5)
 			{
 				if (checkKillProgress(npc, world.rooms.get("Hall")))
 				{
 					runThirdRoom(world);
 				}
 			}
-			if (world.status == 6)
+			if (world.getStatus() == 6)
 			{
 				if (checkKillProgress(npc, world.rooms.get("ThirdRoom")))
 				{
 					runForthRoom(world);
 				}
 			}
-			if (world.status == 7)
+			if (world.getStatus() == 7)
 			{
 				chkShadowColumn(world, npc);
 			}
-			if (world.status == 8)
+			if (world.getStatus() == 8)
 			{
 				if (checkKillProgress(npc, world.rooms.get("ThirdRoom2")))
 				{
 					runFifthRoom(world);
 				}
 			}
-			if (world.status == 9)
+			if (world.getStatus() == 9)
 			{
 				killedBelethSample(world, npc);
 			}
@@ -1386,7 +1392,7 @@ public class DarkCloudMansion extends Quest
 		if (tmpworld instanceof DMCWorld)
 		{
 			world = (DMCWorld) tmpworld;
-			if (world.status == 7)
+			if (world.getStatus() == 7)
 			{
 				DMCRoom ForthRoom = world.rooms.get("ForthRoom");
 				for (DMCNpc mob : ForthRoom.npcList)
@@ -1399,12 +1405,12 @@ public class DarkCloudMansion extends Quest
 							{
 								_log.info("DarkCloudMansion: spawn room 4 guard");
 							}
-							addSpawn(BM[getRandom(BM.length)], player.getX(), player.getY(), player.getZ(), 0, false, 0, false, world.instanceId);
+							addSpawn(BM[getRandom(BM.length)], player.getX(), player.getY(), player.getZ(), 0, false, 0, false, world.getInstanceId());
 						}
 					}
 				}
 			}
-			if (world.status == 9)
+			if (world.getStatus() == 9)
 			{
 				checkBelethSample(world, npc, player);
 			}
@@ -1421,7 +1427,7 @@ public class DarkCloudMansion extends Quest
 		if (tmpworld instanceof DMCWorld)
 		{
 			world = (DMCWorld) tmpworld;
-			if (world.status == 4)
+			if (world.getStatus() == 4)
 			{
 				DMCRoom SecondRoom = world.rooms.get("SecondRoom");
 				for (DMCNpc mob : SecondRoom.npcList)
@@ -1439,7 +1445,7 @@ public class DarkCloudMansion extends Quest
 				}
 			}
 			
-			if ((npc.getNpcId() == SOTruth) && (world.status == 10))
+			if ((npc.getNpcId() == SOTruth) && (world.getStatus() == 10))
 			{
 				npc.showChatWindow(player);
 				QuestState st = player.getQuestState(qn);
@@ -1489,13 +1495,13 @@ public class DarkCloudMansion extends Quest
 				tele.x = 139968;
 				tele.y = 150367;
 				tele.z = -3111;
-				if (world.allowed.contains(player.getObjectId()))
+				if (world.isAllowed(player.getObjectId()))
 				{
 					if (debug)
 					{
 						_log.info("DarkCloudMansion - id " + player.getObjectId() + " removed from allowed player in this Instances.");
 					}
-					world.allowed.remove(world.allowed.indexOf(player.getObjectId()));
+					world.removeAllowed(player.getObjectId());
 				}
 				exitInstance(player, tele);
 				int instanceId = npc.getInstanceId();
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/instances/DemonPrinceFloor/DemonPrinceFloor.java b/L2J_DataPack_BETA/dist/game/data/scripts/instances/DemonPrinceFloor/DemonPrinceFloor.java
index b6d55cfb34..238a799fa8 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/instances/DemonPrinceFloor/DemonPrinceFloor.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/instances/DemonPrinceFloor/DemonPrinceFloor.java
@@ -18,32 +18,24 @@ import java.util.Calendar;
 
 import com.l2jserver.gameserver.ai.CtrlIntention;
 import com.l2jserver.gameserver.instancemanager.InstanceManager;
-import com.l2jserver.gameserver.instancemanager.InstanceManager.InstanceWorld;
 import com.l2jserver.gameserver.model.L2Party;
 import com.l2jserver.gameserver.model.L2World;
 import com.l2jserver.gameserver.model.Location;
 import com.l2jserver.gameserver.model.actor.L2Npc;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.entity.Instance;
+import com.l2jserver.gameserver.model.instancezone.InstanceWorld;
 import com.l2jserver.gameserver.model.quest.Quest;
 import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
 import com.l2jserver.gameserver.util.Util;
 
 /**
+ * Demon Prince Floor instance zone.
  * @author GKR
  */
 public class DemonPrinceFloor extends Quest
 {
-	private class DPWorld extends InstanceWorld
-	{
-		public DPWorld()
-		{
-			super();
-		}
-	}
-	
-	private static final String qn = "DemonPrinceFloor";
 	private static final int INSTANCEID = 142; // this is the client number
 	private static final int RESET_HOUR = 6;
 	private static final int RESET_MIN = 30;
@@ -85,9 +77,9 @@ public class DemonPrinceFloor extends Quest
 		else if (npc.getNpcId() == CUBE)
 		{
 			InstanceWorld world = InstanceManager.getInstance().getWorld(npc.getInstanceId());
-			if ((world != null) && (world instanceof DPWorld))
+			if ((world != null) && (world.getInstanceId() == INSTANCEID))
 			{
-				world.allowed.remove(world.allowed.indexOf(player.getObjectId()));
+				world.removeAllowed(player.getObjectId());
 				teleportPlayer(player, EXIT_POINT, 0);
 			}
 		}
@@ -112,7 +104,7 @@ public class DemonPrinceFloor extends Quest
 			
 			inst.setEmptyDestroyTime(0);
 			
-			if ((world != null) && (world instanceof DPWorld))
+			if ((world != null) && (world.getInstanceId() == INSTANCEID))
 			{
 				setReenterTime(world);
 			}
@@ -206,13 +198,13 @@ public class DemonPrinceFloor extends Quest
 		// existing instance
 		if (world != null)
 		{
-			if (!(world instanceof DPWorld))
+			if ((world.getInstanceId() != INSTANCEID))
 			{
 				player.sendPacket(SystemMessageId.ALREADY_ENTERED_ANOTHER_INSTANCE_CANT_ENTER);
 				return 0;
 			}
-			teleportPlayer(player, ENTRY_POINT, world.instanceId);
-			return world.instanceId;
+			teleportPlayer(player, ENTRY_POINT, world.getInstanceId());
+			return world.getInstanceId();
 		}
 		
 		if (!checkTeleport(player))
@@ -221,10 +213,10 @@ public class DemonPrinceFloor extends Quest
 		}
 		
 		instanceId = InstanceManager.getInstance().createDynamicInstance(template);
-		world = new DPWorld();
-		world.instanceId = instanceId;
-		world.templateId = INSTANCEID;
-		world.status = 0;
+		world = new InstanceWorld();
+		world.setInstanceId(instanceId);
+		world.setTemplateId(INSTANCEID);
+		world.setStatus(0);
 		InstanceManager.getInstance().addWorld(world);
 		_log.info("Tower of Infinitum - Demon Prince floor started " + template + " Instance: " + instanceId + " created by player: " + player.getName());
 		
@@ -232,16 +224,15 @@ public class DemonPrinceFloor extends Quest
 		{
 			teleportPlayer(partyMember, ENTRY_POINT, instanceId);
 			partyMember.destroyItemByItemId("Quest", SEAL_BREAKER_5, 1, null, true);
-			world.allowed.add(partyMember.getObjectId());
+			world.addAllowed(partyMember.getObjectId());
 		}
 		return instanceId;
 	}
 	
 	public void setReenterTime(InstanceWorld world)
 	{
-		if (world instanceof DPWorld)
+		if (world.getInstanceId() == INSTANCEID)
 		{
-			
 			// Reenter time should be cleared every Wed and Sat at 6:30 AM, so we set next suitable
 			Calendar reenter;
 			Calendar now = Calendar.getInstance();
@@ -264,14 +255,14 @@ public class DemonPrinceFloor extends Quest
 			}
 			
 			SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.INSTANT_ZONE_S1_RESTRICTED);
-			sm.addInstanceName(world.templateId);
+			sm.addInstanceName(world.getTemplateId());
 			// set instance reenter time for all allowed players
-			for (int objectId : world.allowed)
+			for (int objectId : world.getAllowed())
 			{
 				L2PcInstance player = L2World.getInstance().getPlayer(objectId);
 				if ((player != null) && player.isOnline())
 				{
-					InstanceManager.getInstance().setInstanceTime(objectId, world.templateId, reenter.getTimeInMillis());
+					InstanceManager.getInstance().setInstanceTime(objectId, world.getTemplateId(), reenter.getTimeInMillis());
 					player.sendPacket(sm);
 				}
 			}
@@ -287,7 +278,6 @@ public class DemonPrinceFloor extends Quest
 	
 	public static void main(String[] args)
 	{
-		// now call the constructor (starts up the)
-		new DemonPrinceFloor(-1, qn, "instances");
+		new DemonPrinceFloor(-1, DemonPrinceFloor.class.getSimpleName(), "instances");
 	}
 }
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/instances/FinalEmperialTomb/FinalEmperialTomb.java b/L2J_DataPack_BETA/dist/game/data/scripts/instances/FinalEmperialTomb/FinalEmperialTomb.java
index a66d5e8c63..29f1094305 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/instances/FinalEmperialTomb/FinalEmperialTomb.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/instances/FinalEmperialTomb/FinalEmperialTomb.java
@@ -38,7 +38,6 @@ import com.l2jserver.gameserver.GeoData;
 import com.l2jserver.gameserver.ThreadPoolManager;
 import com.l2jserver.gameserver.ai.CtrlIntention;
 import com.l2jserver.gameserver.instancemanager.InstanceManager;
-import com.l2jserver.gameserver.instancemanager.InstanceManager.InstanceWorld;
 import com.l2jserver.gameserver.model.L2CharPosition;
 import com.l2jserver.gameserver.model.L2CommandChannel;
 import com.l2jserver.gameserver.model.L2Object.InstanceType;
@@ -54,6 +53,7 @@ import com.l2jserver.gameserver.model.actor.instance.L2GrandBossInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2MonsterInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.holders.SkillHolder;
+import com.l2jserver.gameserver.model.instancezone.InstanceWorld;
 import com.l2jserver.gameserver.model.quest.Quest;
 import com.l2jserver.gameserver.model.quest.QuestState;
 import com.l2jserver.gameserver.model.skills.L2Skill;
@@ -72,6 +72,7 @@ import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
 import com.l2jserver.gameserver.util.Util;
 
 /**
+ * Final Emperial Tomb instance zone.
  * TODO:<br>
  * Test when Frintezza song use 5008 effect skill.<br>
  * Test deeply Scarlet van Halisha's AI.<br>
@@ -105,7 +106,7 @@ public class FinalEmperialTomb extends Quest
 		public int scarlet_h = 0;
 		public int scarlet_a = 0;
 		
-		public FETWorld()
+		protected FETWorld()
 		{
 			npcList.shared();
 		}
@@ -624,8 +625,8 @@ public class FinalEmperialTomb extends Quest
 				player.sendPacket(SystemMessageId.ALREADY_ENTERED_ANOTHER_INSTANCE_CANT_ENTER);
 				return 0;
 			}
-			teleportPlayer(player, coords, world.instanceId);
-			return world.instanceId;
+			teleportPlayer(player, coords, world.getInstanceId());
+			return world.getInstanceId();
 		}
 		
 		// New instance
@@ -641,22 +642,22 @@ public class FinalEmperialTomb extends Quest
 		// Instance ins = InstanceManager.getInstance().getInstance(instanceId);
 		// ins.setSpawnLoc(new int[]{player.getX(),player.getY(),player.getZ()});
 		world = new FETWorld();
-		world.instanceId = instanceId;
-		world.status = 0;
+		world.setInstanceId(instanceId);
+		world.setStatus(0);
 		InstanceManager.getInstance().addWorld(world);
 		controlStatus((FETWorld) world);
 		_log.info("Final Emperial Tomb started " + template + " Instance: " + instanceId + " created by player: " + player.getName());
 		// teleport players
 		if ((player.getParty() == null) || (player.getParty().getCommandChannel() == null))
 		{
-			world.allowed.add(player.getObjectId());
+			world.addAllowed(player.getObjectId());
 			teleportPlayer(player, coords, instanceId);
 		}
 		else
 		{
 			for (L2PcInstance channelMember : player.getParty().getCommandChannel().getMembers())
 			{
-				world.allowed.add(channelMember.getObjectId());
+				world.addAllowed(channelMember.getObjectId());
 				teleportPlayer(channelMember, coords, instanceId);
 			}
 		}
@@ -716,10 +717,10 @@ public class FinalEmperialTomb extends Quest
 			{
 				if (debug)
 				{
-					_log.info("[Final Emperial Tomb] Starting " + world.status + ". status.");
+					_log.info("[Final Emperial Tomb] Starting " + world.getStatus() + ". status.");
 				}
 				world.npcList.clear();
-				switch (world.status)
+				switch (world.getStatus())
 				{
 					case 0:
 						spawnFlaggedNPCs(world, 0);
@@ -727,14 +728,14 @@ public class FinalEmperialTomb extends Quest
 					case 1:
 						for (int doorId : FIRST_ROUTE_DOORS)
 						{
-							openDoor(doorId, world.instanceId);
+							openDoor(doorId, world.getInstanceId());
 						}
-						spawnFlaggedNPCs(world, world.status);
+						spawnFlaggedNPCs(world, world.getStatus());
 						break;
 					case 2:
 						for (int doorId : SECOND_ROUTE_DOORS)
 						{
-							openDoor(doorId, world.instanceId);
+							openDoor(doorId, world.getInstanceId());
 						}
 						ThreadPoolManager.getInstance().scheduleGeneral(new IntroTask(world, 0), 600000);
 						break;
@@ -780,26 +781,26 @@ public class FinalEmperialTomb extends Quest
 						ThreadPoolManager.getInstance().scheduleGeneral(new IntroTask(world, 33), 500);
 						break;
 					case 6: // open doors
-						InstanceManager.getInstance().getInstance(world.instanceId).setDuration(300000);
+						InstanceManager.getInstance().getInstance(world.getInstanceId()).setDuration(300000);
 						for (int doorId : FIRST_ROOM_DOORS)
 						{
-							openDoor(doorId, world.instanceId);
+							openDoor(doorId, world.getInstanceId());
 						}
 						for (int doorId : FIRST_ROUTE_DOORS)
 						{
-							openDoor(doorId, world.instanceId);
+							openDoor(doorId, world.getInstanceId());
 						}
 						for (int doorId : SECOND_ROUTE_DOORS)
 						{
-							openDoor(doorId, world.instanceId);
+							openDoor(doorId, world.getInstanceId());
 						}
 						for (int doorId : SECOND_ROOM_DOORS)
 						{
-							closeDoor(doorId, world.instanceId);
+							closeDoor(doorId, world.getInstanceId());
 						}
 						break;
 				}
-				world.status++;
+				world.setStatus(world.getStatus() + 1);
 				return true;
 			}
 			finally
@@ -812,7 +813,7 @@ public class FinalEmperialTomb extends Quest
 	
 	protected void spawn(FETWorld world, int npcId, int x, int y, int z, int h, boolean addToKillTable)
 	{
-		L2Npc npc = addSpawn(npcId, x, y, z, h, false, 0, false, world.instanceId);
+		L2Npc npc = addSpawn(npcId, x, y, z, h, false, 0, false, world.getInstanceId());
 		if (addToKillTable)
 		{
 			world.npcList.add(npc);
@@ -844,7 +845,7 @@ public class FinalEmperialTomb extends Quest
 		@Override
 		public void run()
 		{
-			if ((InstanceManager.getInstance().getWorld(_world.instanceId) != _world) || _world.portraits.isEmpty())
+			if ((InstanceManager.getInstance().getWorld(_world.getInstanceId()) != _world) || _world.portraits.isEmpty())
 			{
 				if (debug)
 				{
@@ -858,7 +859,7 @@ public class FinalEmperialTomb extends Quest
 				{
 					break;
 				}
-				L2MonsterInstance demon = (L2MonsterInstance) addSpawn(PORTRAIT_SPAWNS[i][0] + 2, PORTRAIT_SPAWNS[i][5], PORTRAIT_SPAWNS[i][6], PORTRAIT_SPAWNS[i][7], PORTRAIT_SPAWNS[i][8], false, 0, false, _world.instanceId);
+				L2MonsterInstance demon = (L2MonsterInstance) addSpawn(PORTRAIT_SPAWNS[i][0] + 2, PORTRAIT_SPAWNS[i][5], PORTRAIT_SPAWNS[i][6], PORTRAIT_SPAWNS[i][7], PORTRAIT_SPAWNS[i][8], false, 0, false, _world.getInstanceId());
 				updateKnownList(_world, demon);
 				_world.demons.add(demon);
 			}
@@ -880,7 +881,7 @@ public class FinalEmperialTomb extends Quest
 		@Override
 		public void run()
 		{
-			if (InstanceManager.getInstance().getWorld(_world.instanceId) != _world)
+			if (InstanceManager.getInstance().getWorld(_world.getInstanceId()) != _world)
 			{
 				return;
 			}
@@ -921,10 +922,10 @@ public class FinalEmperialTomb extends Quest
 						List<L2Character> targetList = new FastList<>();
 						if ((skill.getSkillType() == L2SkillType.STUN) || (skill.getSkillType() == L2SkillType.DEBUFF))
 						{
-							for (int objId : _world.allowed)
+							for (int objId : _world.getAllowed())
 							{
 								L2PcInstance player = L2World.getInstance().getPlayer(objId);
-								if ((player != null) && player.isOnline() && (player.getInstanceId() == _world.instanceId))
+								if ((player != null) && player.isOnline() && (player.getInstanceId() == _world.getInstanceId()))
 								{
 									if (!player.isDead())
 									{
@@ -979,42 +980,42 @@ public class FinalEmperialTomb extends Quest
 				case 1:
 					for (int doorId : FIRST_ROOM_DOORS)
 					{
-						closeDoor(doorId, _world.instanceId);
+						closeDoor(doorId, _world.getInstanceId());
 					}
 					for (int doorId : FIRST_ROUTE_DOORS)
 					{
-						closeDoor(doorId, _world.instanceId);
+						closeDoor(doorId, _world.getInstanceId());
 					}
 					for (int doorId : SECOND_ROOM_DOORS)
 					{
-						closeDoor(doorId, _world.instanceId);
+						closeDoor(doorId, _world.getInstanceId());
 					}
 					for (int doorId : SECOND_ROUTE_DOORS)
 					{
-						closeDoor(doorId, _world.instanceId);
+						closeDoor(doorId, _world.getInstanceId());
 					}
-					addSpawn(29061, -87904, -141296, -9168, 0, false, 0, false, _world.instanceId);
+					addSpawn(29061, -87904, -141296, -9168, 0, false, 0, false, _world.getInstanceId());
 					break;
 				case 2:
-					_world.frintezzaDummy = addSpawn(29052, -87784, -155083, -9087, 16048, false, 0, false, _world.instanceId);
+					_world.frintezzaDummy = addSpawn(29052, -87784, -155083, -9087, 16048, false, 0, false, _world.getInstanceId());
 					_world.frintezzaDummy.setIsInvul(true);
 					_world.frintezzaDummy.setIsImmobilized(true);
 					
-					_world.overheadDummy = addSpawn(29052, -87784, -153298, -9175, 16384, false, 0, false, _world.instanceId);
+					_world.overheadDummy = addSpawn(29052, -87784, -153298, -9175, 16384, false, 0, false, _world.getInstanceId());
 					_world.overheadDummy.setIsInvul(true);
 					_world.overheadDummy.setIsImmobilized(true);
 					_world.overheadDummy.setCollisionHeight(600);
 					broadCastPacket(_world, new NpcInfo(_world.overheadDummy, null));
 					
-					_world.portraitDummy1 = addSpawn(29052, -89566, -153168, -9165, 16048, false, 0, false, _world.instanceId);
+					_world.portraitDummy1 = addSpawn(29052, -89566, -153168, -9165, 16048, false, 0, false, _world.getInstanceId());
 					_world.portraitDummy1.setIsImmobilized(true);
 					_world.portraitDummy1.setIsInvul(true);
 					
-					_world.portraitDummy3 = addSpawn(29052, -86004, -153168, -9165, 16048, false, 0, false, _world.instanceId);
+					_world.portraitDummy3 = addSpawn(29052, -86004, -153168, -9165, 16048, false, 0, false, _world.getInstanceId());
 					_world.portraitDummy3.setIsImmobilized(true);
 					_world.portraitDummy3.setIsInvul(true);
 					
-					_world.scarletDummy = addSpawn(29053, -87784, -153298, -9175, 16384, false, 0, false, _world.instanceId);
+					_world.scarletDummy = addSpawn(29053, -87784, -153298, -9175, 16384, false, 0, false, _world.getInstanceId());
 					_world.scarletDummy.setIsInvul(true);
 					_world.scarletDummy.setIsImmobilized(true);
 					
@@ -1026,7 +1027,7 @@ public class FinalEmperialTomb extends Quest
 					broadCastPacket(_world, new SpecialCamera(_world.overheadDummy.getObjectId(), 0, 75, -89, 0, 100, 0, 0, 1, 0));
 					broadCastPacket(_world, new SpecialCamera(_world.overheadDummy.getObjectId(), 300, 90, -10, 6500, 7000, 0, 0, 1, 0));
 					
-					_world.frintezza = (L2GrandBossInstance) addSpawn(FRINTEZZA, -87780, -155086, -9080, 16384, false, 0, false, _world.instanceId);
+					_world.frintezza = (L2GrandBossInstance) addSpawn(FRINTEZZA, -87780, -155086, -9080, 16384, false, 0, false, _world.getInstanceId());
 					_world.frintezza.setIsImmobilized(true);
 					_world.frintezza.setIsInvul(true);
 					_world.frintezza.disableAllSkills();
@@ -1034,7 +1035,7 @@ public class FinalEmperialTomb extends Quest
 					
 					for (int[] element : PORTRAIT_SPAWNS)
 					{
-						L2MonsterInstance demon = (L2MonsterInstance) addSpawn(element[0] + 2, element[5], element[6], element[7], element[8], false, 0, false, _world.instanceId);
+						L2MonsterInstance demon = (L2MonsterInstance) addSpawn(element[0] + 2, element[5], element[6], element[7], element[8], false, 0, false, _world.getInstanceId());
 						demon.setIsImmobilized(true);
 						demon.disableAllSkills();
 						updateKnownList(_world, demon);
@@ -1116,7 +1117,7 @@ public class FinalEmperialTomb extends Quest
 					ThreadPoolManager.getInstance().scheduleGeneral(new IntroTask(_world, 18), 5000);
 					break;
 				case 18:
-					_world.activeScarlet = (L2GrandBossInstance) addSpawn(29046, -87789, -153295, -9176, 16384, false, 0, false, _world.instanceId);
+					_world.activeScarlet = (L2GrandBossInstance) addSpawn(29046, -87789, -153295, -9176, 16384, false, 0, false, _world.getInstanceId());
 					_world.activeScarlet.setRHandId(FIRST_SCARLET_WEAPON);
 					_world.activeScarlet.setIsInvul(true);
 					_world.activeScarlet.setIsImmobilized(true);
@@ -1138,7 +1139,7 @@ public class FinalEmperialTomb extends Quest
 				case 21:
 					for (int i = 0; i < PORTRAIT_SPAWNS.length; i++)
 					{
-						L2MonsterInstance portrait = (L2MonsterInstance) addSpawn(PORTRAIT_SPAWNS[i][0], PORTRAIT_SPAWNS[i][1], PORTRAIT_SPAWNS[i][2], PORTRAIT_SPAWNS[i][3], PORTRAIT_SPAWNS[i][4], false, 0, false, _world.instanceId);
+						L2MonsterInstance portrait = (L2MonsterInstance) addSpawn(PORTRAIT_SPAWNS[i][0], PORTRAIT_SPAWNS[i][1], PORTRAIT_SPAWNS[i][2], PORTRAIT_SPAWNS[i][3], PORTRAIT_SPAWNS[i][4], false, 0, false, _world.getInstanceId());
 						updateKnownList(_world, portrait);
 						_world.portraits.put(portrait, i);
 					}
@@ -1219,7 +1220,7 @@ public class FinalEmperialTomb extends Quest
 					_world.activeScarlet = null;
 					break;
 				case 30:
-					_world.activeScarlet = (L2GrandBossInstance) addSpawn(SCARLET2, _world.scarlet_x, _world.scarlet_y, _world.scarlet_z, _world.scarlet_h, false, 0, false, _world.instanceId);
+					_world.activeScarlet = (L2GrandBossInstance) addSpawn(SCARLET2, _world.scarlet_x, _world.scarlet_y, _world.scarlet_z, _world.scarlet_h, false, 0, false, _world.getInstanceId());
 					_world.activeScarlet.setIsInvul(true);
 					_world.activeScarlet.setIsImmobilized(true);
 					_world.activeScarlet.disableAllSkills();
@@ -1268,10 +1269,10 @@ public class FinalEmperialTomb extends Quest
 		
 		private void stopPc()
 		{
-			for (int objId : _world.allowed)
+			for (int objId : _world.getAllowed())
 			{
 				L2PcInstance player = L2World.getInstance().getPlayer(objId);
-				if ((player != null) && player.isOnline() && (player.getInstanceId() == _world.instanceId))
+				if ((player != null) && player.isOnline() && (player.getInstanceId() == _world.getInstanceId()))
 				{
 					player.abortAttack();
 					player.abortCast();
@@ -1286,10 +1287,10 @@ public class FinalEmperialTomb extends Quest
 		
 		private void startPc()
 		{
-			for (int objId : _world.allowed)
+			for (int objId : _world.getAllowed())
 			{
 				L2PcInstance player = L2World.getInstance().getPlayer(objId);
-				if ((player != null) && player.isOnline() && (player.getInstanceId() == _world.instanceId))
+				if ((player != null) && player.isOnline() && (player.getInstanceId() == _world.getInstanceId()))
 				{
 					player.enableAllSkills();
 					player.setIsImmobilized(false);
@@ -1299,10 +1300,10 @@ public class FinalEmperialTomb extends Quest
 		
 		private void sendPacketX(L2GameServerPacket packet1, L2GameServerPacket packet2, int x)
 		{
-			for (int objId : _world.allowed)
+			for (int objId : _world.getAllowed())
 			{
 				L2PcInstance player = L2World.getInstance().getPlayer(objId);
-				if ((player != null) && player.isOnline() && (player.getInstanceId() == _world.instanceId))
+				if ((player != null) && player.isOnline() && (player.getInstanceId() == _world.getInstanceId()))
 				{
 					if (player.getX() < x)
 					{
@@ -1331,7 +1332,7 @@ public class FinalEmperialTomb extends Quest
 		@Override
 		public void run()
 		{
-			if (InstanceManager.getInstance().getWorld(_world.instanceId) != _world)
+			if (InstanceManager.getInstance().getWorld(_world.getInstanceId()) != _world)
 			{
 				return;
 			}
@@ -1341,7 +1342,7 @@ public class FinalEmperialTomb extends Quest
 					ThreadPoolManager.getInstance().scheduleGeneral(new StatusTask(_world, 1), 2000);
 					for (int doorId : FIRST_ROOM_DOORS)
 					{
-						openDoor(doorId, _world.instanceId);
+						openDoor(doorId, _world.getInstanceId());
 					}
 					break;
 				case 1:
@@ -1351,7 +1352,7 @@ public class FinalEmperialTomb extends Quest
 					ThreadPoolManager.getInstance().scheduleGeneral(new StatusTask(_world, 3), 100);
 					for (int doorId : SECOND_ROOM_DOORS)
 					{
-						openDoor(doorId, _world.instanceId);
+						openDoor(doorId, _world.getInstanceId());
 					}
 					break;
 				case 3:
@@ -1365,13 +1366,13 @@ public class FinalEmperialTomb extends Quest
 		
 		private void addAggroToMobs()
 		{
-			L2PcInstance target = L2World.getInstance().getPlayer(_world.allowed.get(getRandom(_world.allowed.size())));
-			if ((target == null) || (target.getInstanceId() != _world.instanceId) || target.isDead() || target.isFakeDeath())
+			L2PcInstance target = L2World.getInstance().getPlayer(_world.getAllowed().get(getRandom(_world.getAllowed().size())));
+			if ((target == null) || (target.getInstanceId() != _world.getInstanceId()) || target.isDead() || target.isFakeDeath())
 			{
-				for (int objId : _world.allowed)
+				for (int objId : _world.getAllowed())
 				{
 					target = L2World.getInstance().getPlayer(objId);
-					if ((target != null) && (target.getInstanceId() == _world.instanceId) && !target.isDead() && !target.isFakeDeath())
+					if ((target != null) && (target.getInstanceId() == _world.getInstanceId()) && !target.isDead() && !target.isFakeDeath())
 					{
 						break;
 					}
@@ -1423,7 +1424,7 @@ public class FinalEmperialTomb extends Quest
 		sm.addInstanceName(INSTANCEID);
 		
 		// set instance reenter time for all allowed players
-		for (int objectId : world.allowed)
+		for (int objectId : world.getAllowed())
 		{
 			L2PcInstance player = L2World.getInstance().getPlayer(objectId);
 			InstanceManager.getInstance().setInstanceTime(objectId, INSTANCEID, reenter.getTimeInMillis());
@@ -1436,10 +1437,10 @@ public class FinalEmperialTomb extends Quest
 	
 	protected void broadCastPacket(FETWorld world, L2GameServerPacket packet)
 	{
-		for (int objId : world.allowed)
+		for (int objId : world.getAllowed())
 		{
 			L2PcInstance player = L2World.getInstance().getPlayer(objId);
-			if ((player != null) && player.isOnline() && (player.getInstanceId() == world.instanceId))
+			if ((player != null) && player.isOnline() && (player.getInstanceId() == world.getInstanceId()))
 			{
 				player.sendPacket(packet);
 			}
@@ -1449,10 +1450,10 @@ public class FinalEmperialTomb extends Quest
 	protected void updateKnownList(FETWorld world, L2Npc npc)
 	{
 		Map<Integer, L2PcInstance> npcKnownPlayers = npc.getKnownList().getKnownPlayers();
-		for (int objId : world.allowed)
+		for (int objId : world.getAllowed())
 		{
 			L2PcInstance player = L2World.getInstance().getPlayer(objId);
-			if ((player != null) && player.isOnline() && (player.getInstanceId() == world.instanceId))
+			if ((player != null) && player.isOnline() && (player.getInstanceId() == world.getInstanceId()))
 			{
 				npcKnownPlayers.put(player.getObjectId(), player);
 			}
@@ -1466,11 +1467,11 @@ public class FinalEmperialTomb extends Quest
 		if (tmpworld instanceof FETWorld)
 		{
 			FETWorld world = (FETWorld) tmpworld;
-			if ((npc.getNpcId() == SCARLET1) && (world.status == 3) && (npc.getCurrentHp() < (npc.getMaxHp() * 0.80)))
+			if ((npc.getNpcId() == SCARLET1) && (world.getStatus() == 3) && (npc.getCurrentHp() < (npc.getMaxHp() * 0.80)))
 			{
 				controlStatus(world);
 			}
-			else if ((npc.getNpcId() == SCARLET1) && (world.status == 4) && (npc.getCurrentHp() < (npc.getMaxHp() * 0.20)))
+			else if ((npc.getNpcId() == SCARLET1) && (world.getStatus() == 4) && (npc.getCurrentHp() < (npc.getMaxHp() * 0.20)))
 			{
 				controlStatus(world);
 			}
@@ -1519,7 +1520,7 @@ public class FinalEmperialTomb extends Quest
 			{
 				controlStatus(world);
 			}
-			else if (world.status <= 2)
+			else if (world.getStatus() <= 2)
 			{
 				if (checkKillProgress(npc, world))
 				{
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/instances/HellboundTown/HellboundTown.java b/L2J_DataPack_BETA/dist/game/data/scripts/instances/HellboundTown/HellboundTown.java
index e5b6319e1b..d133304ab6 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/instances/HellboundTown/HellboundTown.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/instances/HellboundTown/HellboundTown.java
@@ -19,7 +19,6 @@ import java.util.concurrent.ScheduledFuture;
 import com.l2jserver.gameserver.ThreadPoolManager;
 import com.l2jserver.gameserver.instancemanager.HellboundManager;
 import com.l2jserver.gameserver.instancemanager.InstanceManager;
-import com.l2jserver.gameserver.instancemanager.InstanceManager.InstanceWorld;
 import com.l2jserver.gameserver.instancemanager.WalkingManager;
 import com.l2jserver.gameserver.model.L2Party;
 import com.l2jserver.gameserver.model.actor.L2Npc;
@@ -29,6 +28,7 @@ import com.l2jserver.gameserver.model.actor.instance.L2QuestGuardInstance;
 import com.l2jserver.gameserver.model.effects.L2Effect;
 import com.l2jserver.gameserver.model.entity.Instance;
 import com.l2jserver.gameserver.model.holders.SkillHolder;
+import com.l2jserver.gameserver.model.instancezone.InstanceWorld;
 import com.l2jserver.gameserver.model.quest.Quest;
 import com.l2jserver.gameserver.model.skills.L2Skill;
 import com.l2jserver.gameserver.network.NpcStringId;
@@ -39,20 +39,16 @@ import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
 import com.l2jserver.gameserver.util.Util;
 
 /**
+ * Urban Area instance zone.
  * @author GKR
  */
 public class HellboundTown extends Quest
 {
-	private class TownWorld extends InstanceWorld
+	protected class TownWorld extends InstanceWorld
 	{
 		protected L2MonsterInstance spawnedAmaskari;
 		protected ScheduledFuture<?> activeAmaskariCall = null;
 		public boolean isAmaskariDead = false;
-		
-		public TownWorld()
-		{
-			super();
-		}
 	}
 	
 	private static final String qn = "HellboundTown";
@@ -188,7 +184,7 @@ public class HellboundTown extends Quest
 					{
 						npc.setBusy(true);
 						// destroy instance after 5 min
-						Instance inst = InstanceManager.getInstance().getInstance(world.instanceId);
+						Instance inst = InstanceManager.getInstance().getInstance(world.getInstanceId());
 						inst.setDuration(5 * 60000);
 						inst.setEmptyDestroyTime(0);
 						ThreadPoolManager.getInstance().scheduleGeneral(new ExitInstance(party, world), 285000);
@@ -441,8 +437,8 @@ public class HellboundTown extends Quest
 				player.sendPacket(SystemMessageId.ALREADY_ENTERED_ANOTHER_INSTANCE_CANT_ENTER);
 				return 0;
 			}
-			teleportPlayer(player, ENTRY_POINT, world.instanceId);
-			return world.instanceId;
+			teleportPlayer(player, ENTRY_POINT, world.getInstanceId());
+			return world.getInstanceId();
 		}
 		
 		if (!checkTeleport(player))
@@ -452,16 +448,16 @@ public class HellboundTown extends Quest
 		
 		instanceId = InstanceManager.getInstance().createDynamicInstance(template);
 		world = new TownWorld();
-		world.instanceId = instanceId;
-		world.templateId = INSTANCEID;
-		world.status = 0;
+		world.setInstanceId(instanceId);
+		world.setTemplateId(INSTANCEID);
+		world.setStatus(0);
 		InstanceManager.getInstance().addWorld(world);
 		_log.info("Hellbound Town started " + template + " Instance: " + instanceId + " created by player: " + player.getName());
 		
 		for (L2PcInstance partyMember : player.getParty().getMembers())
 		{
 			teleportPlayer(partyMember, ENTRY_POINT, instanceId);
-			world.allowed.add(partyMember.getObjectId());
+			world.addAllowed(partyMember.getObjectId());
 		}
 		
 		((TownWorld) world).spawnedAmaskari = (L2MonsterInstance) addSpawn(AMASKARI, AMASKARI_SPAWN_POINT[0], AMASKARI_SPAWN_POINT[1], AMASKARI_SPAWN_POINT[2], AMASKARI_SPAWN_POINT[3], false, 0, false, instanceId);
@@ -536,7 +532,7 @@ public class HellboundTown extends Quest
 				{
 					if ((partyMember != null) && !partyMember.isDead())
 					{
-						_world.allowed.remove(_world.allowed.indexOf(partyMember.getObjectId()));
+						_world.removeAllowed(partyMember.getObjectId());
 						partyMember.setInstanceId(0);
 						partyMember.teleToLocation((EXIT_POINT[0] - 100) + getRandom(50), (EXIT_POINT[1] - 100) + getRandom(50), EXIT_POINT[2]);
 					}
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/instances/HideoutOfTheDawn/HideoutOfTheDawn.java b/L2J_DataPack_BETA/dist/game/data/scripts/instances/HideoutOfTheDawn/HideoutOfTheDawn.java
index 891400340c..ef05a01a43 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/instances/HideoutOfTheDawn/HideoutOfTheDawn.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/instances/HideoutOfTheDawn/HideoutOfTheDawn.java
@@ -2,45 +2,34 @@ package instances.HideoutOfTheDawn;
 
 import com.l2jserver.gameserver.ai.CtrlIntention;
 import com.l2jserver.gameserver.instancemanager.InstanceManager;
-import com.l2jserver.gameserver.instancemanager.InstanceManager.InstanceWorld;
+import com.l2jserver.gameserver.model.Location;
 import com.l2jserver.gameserver.model.actor.L2Character;
 import com.l2jserver.gameserver.model.actor.L2Npc;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.effects.L2Effect;
+import com.l2jserver.gameserver.model.instancezone.InstanceWorld;
 import com.l2jserver.gameserver.model.quest.Quest;
-import com.l2jserver.gameserver.model.quest.QuestState;
 import com.l2jserver.gameserver.model.skills.L2Skill;
 import com.l2jserver.gameserver.network.SystemMessageId;
 
 /**
+ * Hideout of the Dawn instance zone.
  * @author Adry_85
  */
 public class HideoutOfTheDawn extends Quest
 {
-	private class HoDWorld extends InstanceWorld
+	protected class HotDWorld extends InstanceWorld
 	{
-		public long[] storeTime =
-		{
-			0,
-			0
-		};
-		
-		public HoDWorld()
-		{
-		}
+		long storeTime = 0;
 	}
 	
 	private static final int INSTANCEID = 113;
+	// NPCs
 	private static final int WOOD = 32593;
 	private static final int JAINA = 32617;
-	
-	public class teleCoord
-	{
-		int instanceId;
-		int x;
-		int y;
-		int z;
-	}
+	// Location
+	private static final Location WOOD_LOC = new Location(-23758, -8959, -5384, 0, 0);
+	private static final Location JAINA_LOC = new Location(147072, 23743, -1984, 0);
 	
 	public HideoutOfTheDawn(int questId, String name, String descr)
 	{
@@ -51,90 +40,63 @@ public class HideoutOfTheDawn extends Quest
 	}
 	
 	@Override
-	public String onTalk(L2Npc npc, L2PcInstance player)
+	public String onTalk(L2Npc npc, L2PcInstance talker)
 	{
-		QuestState st = player.getQuestState(getName());
-		if (st == null)
-		{
-			st = newQuestState(player);
-		}
-		
 		switch (npc.getNpcId())
 		{
 			case WOOD:
 			{
-				teleCoord tele = new teleCoord();
-				tele.x = -23758;
-				tele.y = -8959;
-				tele.z = -5384;
-				enterInstance(player, "HideoutOfTheDawn.xml", tele);
+				enterInstance(talker, "HideoutOfTheDawn.xml", WOOD_LOC);
 				return "32593-01.htm";
 			}
-			
 			case JAINA:
 			{
-				InstanceManager.InstanceWorld world = InstanceManager.getInstance().getPlayerWorld(player);
-				world.allowed.remove(world.allowed.indexOf(Integer.valueOf(player.getObjectId())));
-				teleCoord tele = new teleCoord();
-				tele.instanceId = 0;
-				tele.x = 147072;
-				tele.y = 23743;
-				tele.z = -1984;
-				exitInstance(player, tele);
+				final InstanceWorld world = InstanceManager.getInstance().getPlayerWorld(talker);
+				world.removeAllowed(talker.getObjectId());
+				talker.teleToLocation(JAINA_LOC, 0);
 				return "32617-01.htm";
 			}
 		}
-		
-		return "";
+		return super.onTalk(npc, talker);
 	}
 	
-	private void teleportplayer(L2PcInstance player, teleCoord teleto)
+	private void teleportPlayer(L2PcInstance player, Location loc)
 	{
 		removeBuffs(player);
 		player.getAI().setIntention(CtrlIntention.AI_INTENTION_IDLE);
-		player.setInstanceId(teleto.instanceId);
-		player.teleToLocation(teleto.x, teleto.y, teleto.z);
+		player.teleToLocation(loc, 0);
 	}
 	
-	protected int enterInstance(L2PcInstance player, String template, teleCoord teleto)
+	protected int enterInstance(L2PcInstance player, String template, Location loc)
 	{
-		int instanceId = 0;
 		// check for existing instances for this player
 		InstanceWorld world = InstanceManager.getInstance().getPlayerWorld(player);
 		// existing instance
 		if (world != null)
 		{
-			if (!(world instanceof HoDWorld))
+			if (!(world instanceof HotDWorld))
 			{
 				player.sendPacket(SystemMessageId.ALREADY_ENTERED_ANOTHER_INSTANCE_CANT_ENTER);
 				return 0;
 			}
-			teleto.instanceId = world.instanceId;
-			teleportplayer(player, teleto);
-			return instanceId;
+			loc.setInstanceId(world.getInstanceId());
+			teleportPlayer(player, loc);
+			return 0;
 		}
 		// New instance
-		instanceId = InstanceManager.getInstance().createDynamicInstance(template);
-		world = new HoDWorld();
-		world.instanceId = instanceId;
-		world.templateId = INSTANCEID;
-		world.status = 0;
-		((HoDWorld) world).storeTime[0] = System.currentTimeMillis();
+		world = new HotDWorld();
+		world.setInstanceId(InstanceManager.getInstance().createDynamicInstance(template));
+		world.setTemplateId(INSTANCEID);
+		world.setStatus(0);
+		((HotDWorld) world).storeTime = System.currentTimeMillis();
 		InstanceManager.getInstance().addWorld(world);
-		_log.info("SevenSign started " + template + " Instance: " + instanceId + " created by player: " + player.getName());
+		_log.info("SevenSign started " + template + " Instance: " + world.getInstanceId() + " created by player: " + player.getName());
 		// teleport players
-		teleto.instanceId = instanceId;
-		teleportplayer(player, teleto);
-		world.allowed.add(player.getObjectId());
+		loc.setInstanceId(world.getInstanceId());
+		teleportPlayer(player, loc);
+		world.addAllowed(player.getObjectId());
 		
-		return instanceId;
-	}
-	
-	protected void exitInstance(L2PcInstance player, teleCoord tele)
-	{
-		player.getAI().setIntention(CtrlIntention.AI_INTENTION_IDLE);
-		player.setInstanceId(0);
-		player.teleToLocation(tele.x, tele.y, tele.z);
+		return world.getInstanceId();
 	}
 	
 	private static final void removeBuffs(L2Character ch)
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/instances/Kamaloka/Kamaloka.java b/L2J_DataPack_BETA/dist/game/data/scripts/instances/Kamaloka/Kamaloka.java
index afd8278c7c..3d4bd4d4bd 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/instances/Kamaloka/Kamaloka.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/instances/Kamaloka/Kamaloka.java
@@ -24,7 +24,6 @@ import java.util.logging.Level;
 import com.l2jserver.gameserver.ai.CtrlIntention;
 import com.l2jserver.gameserver.datatables.SkillTable;
 import com.l2jserver.gameserver.instancemanager.InstanceManager;
-import com.l2jserver.gameserver.instancemanager.InstanceManager.InstanceWorld;
 import com.l2jserver.gameserver.model.L2Party;
 import com.l2jserver.gameserver.model.L2Spawn;
 import com.l2jserver.gameserver.model.L2World;
@@ -35,16 +34,14 @@ import com.l2jserver.gameserver.model.actor.instance.L2MonsterInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.effects.L2Effect;
 import com.l2jserver.gameserver.model.entity.Instance;
+import com.l2jserver.gameserver.model.instancezone.InstanceWorld;
 import com.l2jserver.gameserver.model.quest.Quest;
-import com.l2jserver.gameserver.model.quest.QuestState;
 import com.l2jserver.gameserver.model.skills.L2Skill;
 import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
 
 public class Kamaloka extends Quest
 {
-	private static String qn = "Kamaloka";
-	
 	/*
 	 * Reset time for all kamaloka
 	 * Default: 6:30AM on server time
@@ -404,13 +401,10 @@ public class Kamaloka extends Quest
 	 */
 	private static final int TELEPORTER = 32496;
 	
-	/*
-	 * Kamaloka captains (start npc's) npcIds.
-	 */
-	private static final int[] CAPTAINS =
-	{ 30332, 30071, 30916, 30196, 31981, 31340 };
+	/** Kamaloka captains (start npc's) npcIds. */
+	private static final int[] CAPTAINS = { 30332, 30071, 30916, 30196, 31981, 31340 };
 	
-	private class KamaWorld extends InstanceWorld
+	protected class KamaWorld extends InstanceWorld
 	{
 		public int index;				// 0-18 index of the kama type in arrays
 		public int shaman = 0;			// objectId of the shaman
@@ -418,11 +412,6 @@ public class Kamaloka extends Quest
 		public List<Integer> secondRoom;// list of objectIds mobs in the second room
 		public int miniBoss = 0;		// objectId of the miniboss
 		public L2Npc boss = null;		// boss
-		
-		public KamaWorld()
-		{
-			
-		}
 	}
 	
 	/**
@@ -577,7 +566,7 @@ public class Kamaloka extends Quest
 		{
 			// but not in kamaloka
 			if (!(world instanceof KamaWorld)
-					|| world.templateId != templateId)
+					|| world.getTemplateId() != templateId)
 			{
 				player.sendPacket(SystemMessageId.ALREADY_ENTERED_ANOTHER_INSTANCE_CANT_ENTER);
 				return;
@@ -591,11 +580,11 @@ public class Kamaloka extends Quest
 				return;
 			}
 			// check what instance still exist
-			Instance inst = InstanceManager.getInstance().getInstance(world.instanceId);
+			Instance inst = InstanceManager.getInstance().getInstance(world.getInstanceId());
 			if (inst != null)
 			{
 				removeBuffs(player);
-				teleportPlayer(player, TELEPORTS[index], world.instanceId);
+				teleportPlayer(player, TELEPORTS[index], world.getInstanceId());
 			}
 			return;
 		}
@@ -618,12 +607,12 @@ public class Kamaloka extends Quest
 		
 		// Creating new instanceWorld, using our instanceId and templateId
 		world = new KamaWorld();
-		world.instanceId = instanceId;
-		world.templateId = templateId;
+		world.setInstanceId(instanceId);
+		world.setTemplateId(templateId);
 		// set index for easy access to the arrays
 		((KamaWorld)world).index = index;
 		InstanceManager.getInstance().addWorld(world);
-		world.status = 0;
+		world.setStatus(0);
 		// spawn npcs
 		spawnKama((KamaWorld)world);
 		
@@ -631,10 +620,7 @@ public class Kamaloka extends Quest
 		final L2Party party = player.getParty();
 		for (L2PcInstance partyMember : party.getMembers())
 		{
-			if (partyMember.getQuestState(qn) == null)
-				newQuestState(partyMember);
-			world.allowed.add(partyMember.getObjectId());
-			
+			world.addAllowed(partyMember.getObjectId());
 			removeBuffs(partyMember);
 			teleportPlayer(partyMember, TELEPORTS[index], instanceId);
 		}
@@ -657,21 +643,21 @@ public class Kamaloka extends Quest
 			reenter.set(Calendar.HOUR_OF_DAY, RESET_HOUR);
 			
 			SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.INSTANT_ZONE_S1_RESTRICTED);
-			sm.addInstanceName(world.templateId);
+			sm.addInstanceName(world.getTemplateId());
 			
 			// set instance reenter time for all allowed players
-			for (int objectId : world.allowed)
+			for (int objectId : world.getAllowed())
 			{
 				L2PcInstance obj = L2World.getInstance().getPlayer(objectId);
 				if (obj != null && obj.isOnline())
 				{
-					InstanceManager.getInstance().setInstanceTime(objectId, world.templateId, reenter.getTimeInMillis());
+					InstanceManager.getInstance().setInstanceTime(objectId, world.getTemplateId(), reenter.getTimeInMillis());
 					obj.sendPacket(sm);
 				}
 			}
 			
 			// destroy instance after EXIT_TIME
-			Instance inst = InstanceManager.getInstance().getInstance(world.instanceId);
+			Instance inst = InstanceManager.getInstance().getInstance(world.getInstanceId());
 			inst.setDuration(EXIT_TIME * 60000);
 			inst.setEmptyDestroyTime(0);
 		}
@@ -702,12 +688,12 @@ public class Kamaloka extends Quest
 				if (i == shaman)
 				{
 					// stealth shaman use same npcId as other mobs
-					npc = addSpawn(STEALTH_SHAMAN ? npcs[1] : npcs[0], spawns[i][0], spawns[i][1], spawns[i][2], 0, false, 0, false, world.instanceId);
+					npc = addSpawn(STEALTH_SHAMAN ? npcs[1] : npcs[0], spawns[i][0], spawns[i][1], spawns[i][2], 0, false, 0, false, world.getInstanceId());
 					world.shaman = npc.getObjectId();
 				}
 				else
 				{
-					npc = addSpawn(npcs[1], spawns[i][0], spawns[i][1], spawns[i][2], 0, false, 0, false, world.instanceId);
+					npc = addSpawn(npcs[1], spawns[i][0], spawns[i][1], spawns[i][2], 0, false, 0, false, world.getInstanceId());
 					L2Spawn spawn = npc.getSpawn();
 					spawn.setRespawnDelay(FIRST_ROOM_RESPAWN_DELAY);
 					spawn.setAmount(1);
@@ -727,7 +713,7 @@ public class Kamaloka extends Quest
 			
 			for (int i = 0; i < spawns.length; i++)
 			{
-				npc = addSpawn(npcs[0], spawns[i][0], spawns[i][1], spawns[i][2], 0, false, 0, false, world.instanceId);
+				npc = addSpawn(npcs[0], spawns[i][0], spawns[i][1], spawns[i][2], 0, false, 0, false, world.getInstanceId());
 				npc.setIsNoRndWalk(true);
 				world.secondRoom.add(npc.getObjectId());
 			}
@@ -736,17 +722,17 @@ public class Kamaloka extends Quest
 		// miniboss
 		if (MINIBOSS[index] != null)
 		{
-			npc = addSpawn(MINIBOSS[index][0], MINIBOSS[index][1], MINIBOSS[index][2], MINIBOSS[index][3], 0, false, 0, false, world.instanceId);
+			npc = addSpawn(MINIBOSS[index][0], MINIBOSS[index][1], MINIBOSS[index][2], MINIBOSS[index][3], 0, false, 0, false, world.getInstanceId());
 			npc.setIsNoRndWalk(true);
 			world.miniBoss = npc.getObjectId();
 		}
 		
 		// escape teleporter
 		if (TELEPORTERS[index] != null)
-			addSpawn(TELEPORTER, TELEPORTERS[index][0], TELEPORTERS[index][1], TELEPORTERS[index][2], 0, false, 0, false, world.instanceId);
+			addSpawn(TELEPORTER, TELEPORTERS[index][0], TELEPORTERS[index][1], TELEPORTERS[index][2], 0, false, 0, false, world.getInstanceId());
 		
 		// boss
-		npc = addSpawn(BOSS[index][0], BOSS[index][1], BOSS[index][2], BOSS[index][3], 0, false, 0, false, world.instanceId);
+		npc = addSpawn(BOSS[index][0], BOSS[index][1], BOSS[index][2], BOSS[index][3], 0, false, 0, false, world.getInstanceId());
 		((L2MonsterInstance)npc).setOnKillDelay(100);
 		world.boss = npc;
 	}
@@ -777,9 +763,6 @@ public class Kamaloka extends Quest
 	@Override
 	public final String onTalk(L2Npc npc, L2PcInstance player)
 	{
-		QuestState st = player.getQuestState(qn);
-		if (st == null)
-			newQuestState(player);
 		final int npcId = npc.getNpcId();
 		
 		if (npcId == TELEPORTER)
@@ -792,13 +775,13 @@ public class Kamaloka extends Quest
 				if (world instanceof KamaWorld)
 				{
 					// party members must be in the instance
-					if (world.allowed.contains(player.getObjectId()))
+					if (world.isAllowed(player.getObjectId()))
 					{
-						Instance inst = InstanceManager.getInstance().getInstance(world.instanceId);
+						Instance inst = InstanceManager.getInstance().getInstance(world.getInstanceId());
 						
 						// teleports entire party away
 						for (L2PcInstance partyMember : party.getMembers())
-							if (partyMember != null && partyMember.getInstanceId() == world.instanceId)
+							if (partyMember != null && partyMember.getInstanceId() == world.getInstanceId())
 								teleportPlayer(partyMember, inst.getSpawnLoc(), 0);
 					}
 				}
@@ -960,6 +943,6 @@ public class Kamaloka extends Quest
 	
 	public static void main(String[] args)
 	{
-		new Kamaloka(-1, qn, "instances");
+		new Kamaloka(-1, Kamaloka.class.getSimpleName(), "instances");
 	}
 }
\ No newline at end of file
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/instances/NornilsGarden/NornilsGarden.java b/L2J_DataPack_BETA/dist/game/data/scripts/instances/NornilsGarden/NornilsGarden.java
index 9d628c6e89..bfba284cef 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/instances/NornilsGarden/NornilsGarden.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/instances/NornilsGarden/NornilsGarden.java
@@ -19,7 +19,6 @@ import quests.Q00179_IntoTheLargeCavern.Q00179_IntoTheLargeCavern;
 import com.l2jserver.gameserver.ai.CtrlIntention;
 import com.l2jserver.gameserver.datatables.SkillTable;
 import com.l2jserver.gameserver.instancemanager.InstanceManager;
-import com.l2jserver.gameserver.instancemanager.InstanceManager.InstanceWorld;
 import com.l2jserver.gameserver.model.L2Party;
 import com.l2jserver.gameserver.model.Location;
 import com.l2jserver.gameserver.model.actor.L2Character;
@@ -29,6 +28,7 @@ import com.l2jserver.gameserver.model.actor.instance.L2MonsterInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.effects.L2Effect;
 import com.l2jserver.gameserver.model.entity.Instance;
+import com.l2jserver.gameserver.model.instancezone.InstanceWorld;
 import com.l2jserver.gameserver.model.quest.Quest;
 import com.l2jserver.gameserver.model.quest.QuestState;
 import com.l2jserver.gameserver.model.quest.State;
@@ -39,22 +39,19 @@ import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
 import com.l2jserver.gameserver.util.Util;
 
 /**
- * 2010-10-15 Based on official server Naia
+ * Nornil's Garden instance zone.
  * @author Gnacik
+ * @version 2010-10-15 Based on official server Naia
  */
 public class NornilsGarden extends Quest
 {
-	private class NornilsWorld extends InstanceWorld
+	protected class NornilsWorld extends InstanceWorld
 	{
 		public L2Npc first_npc = null;
 		public boolean spawned_1 = false;
 		public boolean spawned_2 = false;
 		public boolean spawned_3 = false;
 		public boolean spawned_4 = false;
-		
-		public NornilsWorld()
-		{
-		}
 	}
 	
 	private static final String qn = "NornilsGarden";
@@ -266,7 +263,7 @@ public class NornilsGarden extends Quest
 		if (inst instanceof NornilsWorld)
 		{
 			NornilsWorld world = ((NornilsWorld) inst);
-			world.allowed.remove(Integer.valueOf(player.getObjectId()));
+			world.removeAllowed(player.getObjectId());
 			player.getAI().setIntention(CtrlIntention.AI_INTENTION_IDLE);
 			player.setInstanceId(0);
 			player.teleToLocation(EXIT_PPL[0], EXIT_PPL[1], EXIT_PPL[2], true);
@@ -278,7 +275,7 @@ public class NornilsGarden extends Quest
 		InstanceWorld world = InstanceManager.getInstance().getPlayerWorld(player);
 		if (world != null)
 		{
-			if (!(world instanceof NornilsWorld) || (world.templateId != INSTANCE_ID))
+			if (!(world instanceof NornilsWorld) || (world.getTemplateId() != INSTANCE_ID))
 			{
 				player.sendPacket(SystemMessageId.ALREADY_ENTERED_ANOTHER_INSTANCE_CANT_ENTER);
 				return null;
@@ -292,10 +289,10 @@ public class NornilsGarden extends Quest
 				return null;
 			}
 			// check what instance still exist
-			Instance inst = InstanceManager.getInstance().getInstance(world.instanceId);
+			Instance inst = InstanceManager.getInstance().getInstance(world.getInstanceId());
 			if (inst != null)
 			{
-				teleportPlayer(player, SPAWN_PPL, world.instanceId);
+				teleportPlayer(player, SPAWN_PPL, world.getInstanceId());
 			}
 			return null;
 		}
@@ -315,8 +312,8 @@ public class NornilsGarden extends Quest
 		inst.setDuration(DURATION_TIME * 60000);
 		inst.setEmptyDestroyTime(EMPTY_DESTROY_TIME * 60000);
 		world = new NornilsWorld();
-		world.instanceId = instanceId;
-		world.templateId = INSTANCE_ID;
+		world.setInstanceId(instanceId);
+		world.setTemplateId(INSTANCE_ID);
 		InstanceManager.getInstance().addWorld(world);
 		_log.info("Nornils Garden: started, Instance: " + instanceId + " created by player: " + player.getName());
 		
@@ -328,7 +325,7 @@ public class NornilsGarden extends Quest
 		{
 			for (L2PcInstance partyMember : party.getMembers())
 			{
-				world.allowed.add(partyMember.getObjectId());
+				world.addAllowed(partyMember.getObjectId());
 				teleportPlayer(partyMember, SPAWN_PPL, instanceId);
 			}
 		}
@@ -337,9 +334,9 @@ public class NornilsGarden extends Quest
 	
 	private void prepareInstance(NornilsWorld world)
 	{
-		world.first_npc = addSpawn(18362, -109702, 74696, -12528, 49568, false, 0, false, world.instanceId);
+		world.first_npc = addSpawn(18362, -109702, 74696, -12528, 49568, false, 0, false, world.getInstanceId());
 		
-		L2DoorInstance door = InstanceManager.getInstance().getInstance(world.instanceId).getDoor(16200010);
+		L2DoorInstance door = InstanceManager.getInstance().getInstance(world.getInstanceId()).getDoor(16200010);
 		if (door != null)
 		{
 			door.setTargetable(false);
@@ -359,7 +356,7 @@ public class NornilsGarden extends Quest
 				
 				for (int mob[] : _group_1)
 				{
-					addSpawn(mob[0], mob[1], mob[2], mob[3], mob[4], false, 0, false, world.instanceId);
+					addSpawn(mob[0], mob[1], mob[2], mob[3], mob[4], false, 0, false, world.getInstanceId());
 				}
 			}
 		}
@@ -377,7 +374,7 @@ public class NornilsGarden extends Quest
 				
 				for (int mob[] : _group_2)
 				{
-					addSpawn(mob[0], mob[1], mob[2], mob[3], mob[4], false, 0, false, world.instanceId);
+					addSpawn(mob[0], mob[1], mob[2], mob[3], mob[4], false, 0, false, world.getInstanceId());
 				}
 			}
 		}
@@ -395,7 +392,7 @@ public class NornilsGarden extends Quest
 				
 				for (int mob[] : _group_3)
 				{
-					addSpawn(mob[0], mob[1], mob[2], mob[3], mob[4], false, 0, false, world.instanceId);
+					addSpawn(mob[0], mob[1], mob[2], mob[3], mob[4], false, 0, false, world.getInstanceId());
 				}
 			}
 		}
@@ -413,7 +410,7 @@ public class NornilsGarden extends Quest
 				
 				for (int mob[] : _group_4)
 				{
-					addSpawn(mob[0], mob[1], mob[2], mob[3], mob[4], false, 0, false, world.instanceId);
+					addSpawn(mob[0], mob[1], mob[2], mob[3], mob[4], false, 0, false, world.getInstanceId());
 				}
 			}
 		}
@@ -425,7 +422,7 @@ public class NornilsGarden extends Quest
 		InstanceWorld tmpworld = InstanceManager.getInstance().getWorld(player.getInstanceId());
 		if (tmpworld instanceof NornilsWorld)
 		{
-			L2DoorInstance door = InstanceManager.getInstance().getInstance(tmpworld.instanceId).getDoor(doorId);
+			L2DoorInstance door = InstanceManager.getInstance().getInstance(tmpworld.getInstanceId()).getDoor(doorId);
 			if (door != null)
 			{
 				door.openMe();
@@ -517,7 +514,7 @@ public class NornilsGarden extends Quest
 				{
 					if (zone.getId() == _auto[0])
 					{
-						L2DoorInstance door = InstanceManager.getInstance().getInstance(tmpworld.instanceId).getDoor(_auto[1]);
+						L2DoorInstance door = InstanceManager.getInstance().getInstance(tmpworld.getInstanceId()).getDoor(_auto[1]);
 						if (door != null)
 						{
 							door.openMe();
@@ -672,7 +669,7 @@ public class NornilsGarden extends Quest
 					InstanceWorld tmpworld = InstanceManager.getInstance().getWorld(player.getInstanceId());
 					if (tmpworld instanceof NornilsWorld)
 					{
-						L2DoorInstance door = InstanceManager.getInstance().getInstance(tmpworld.instanceId).getDoor(_gk[2]);
+						L2DoorInstance door = InstanceManager.getInstance().getInstance(tmpworld.getInstanceId()).getDoor(_gk[2]);
 						if (door != null)
 						{
 							door.openMe();
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/instances/Pailaka/PailakaDevilsLegacy.java b/L2J_DataPack_BETA/dist/game/data/scripts/instances/Pailaka/PailakaDevilsLegacy.java
index 4ae5a9c44e..73dfd5b959 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/instances/Pailaka/PailakaDevilsLegacy.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/instances/Pailaka/PailakaDevilsLegacy.java
@@ -15,7 +15,6 @@
 package instances.Pailaka;
 
 import java.util.List;
-import java.util.logging.Logger;
 
 import javolution.util.FastList;
 
@@ -23,7 +22,6 @@ import com.l2jserver.gameserver.ThreadPoolManager;
 import com.l2jserver.gameserver.ai.CtrlIntention;
 import com.l2jserver.gameserver.datatables.SkillTable;
 import com.l2jserver.gameserver.instancemanager.InstanceManager;
-import com.l2jserver.gameserver.instancemanager.InstanceManager.InstanceWorld;
 import com.l2jserver.gameserver.model.actor.L2Attackable;
 import com.l2jserver.gameserver.model.actor.L2Character;
 import com.l2jserver.gameserver.model.actor.L2Npc;
@@ -31,6 +29,7 @@ import com.l2jserver.gameserver.model.actor.L2Playable;
 import com.l2jserver.gameserver.model.actor.instance.L2MonsterInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.entity.Instance;
+import com.l2jserver.gameserver.model.instancezone.InstanceWorld;
 import com.l2jserver.gameserver.model.quest.Quest;
 import com.l2jserver.gameserver.model.quest.QuestState;
 import com.l2jserver.gameserver.model.quest.State;
@@ -40,12 +39,13 @@ import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.serverpackets.MagicSkillUse;
 import com.l2jserver.util.Rnd;
 
+/**
+ * Pailaka (Devil's Isle) instance zone.
+ */
 public class PailakaDevilsLegacy extends Quest
 {
 	private static final String qn = "129_PailakaDevilsLegacy";
 	
-	protected static final Logger _log = Logger.getLogger(PailakaDevilsLegacy.class.getName());
-	
 	private static final int MIN_LEVEL = 61;
 	private static final int MAX_LEVEL = 67;
 	private static final int EXIT_TIME = 5;
@@ -229,27 +229,26 @@ public class PailakaDevilsLegacy extends Quest
 		InstanceWorld world = InstanceManager.getInstance().getPlayerWorld(player);
 		if (world != null)
 		{
-			if (world.templateId != INSTANCE_ID)
+			if (world.getTemplateId() != INSTANCE_ID)
 			{
 				player.sendPacket(SystemMessageId.ALREADY_ENTERED_ANOTHER_INSTANCE_CANT_ENTER);
 				return;
 			}
-			Instance inst = InstanceManager.getInstance().getInstance(world.instanceId);
+			Instance inst = InstanceManager.getInstance().getInstance(world.getInstanceId());
 			if (inst != null)
 			{
-				teleportPlayer(player, TELEPORT, world.instanceId);
+				teleportPlayer(player, TELEPORT, world.getInstanceId());
 			}
 			return;
 		}
 		// New instance
 		final int instanceId = InstanceManager.getInstance().createDynamicInstance("PailakaDevilsLegacy.xml");
-		
 		world = new InstanceWorld();
-		world.instanceId = instanceId;
-		world.templateId = INSTANCE_ID;
+		world.setInstanceId(instanceId);
+		world.setTemplateId(INSTANCE_ID);
 		InstanceManager.getInstance().addWorld(world);
 		
-		world.allowed.add(player.getObjectId());
+		world.addAllowed(player.getObjectId());
 		teleportPlayer(player, TELEPORT, instanceId);
 		
 		_lematanNpc = addSpawn(LEMATAN, 88108, -209252, -3744, 64255, false, 0, false, instanceId);
@@ -281,41 +280,35 @@ public class PailakaDevilsLegacy extends Quest
 			return getNoQuestMsg(player);
 		}
 		
-		final int cond = st.getInt("cond");
-		
 		if (event.equalsIgnoreCase("enter"))
 		{
 			enterInstance(player);
-			if (st.getInt("cond") == 1)
+			if (st.isCond(1))
 			{
-				st.set("cond", "2");
+				st.setCond(2);
 				return "32498-07.htm";
 			}
 			return "32498-09.htm";
 		}
 		else if (event.equalsIgnoreCase("32498-05.htm"))
 		{
-			if (cond == 0)
+			if (st.isCond(0))
 			{
-				st.set("cond", "1");
-				st.setState(State.STARTED);
-				st.playSound("ItemSound.quest_accept");
+				st.startQuest();
 			}
 		}
 		else if (event.equalsIgnoreCase("32501-03.htm"))
 		{
-			if (cond == 2)
+			if (st.isCond(2))
 			{
 				st.giveItems(SWORD, 1);
-				st.set("cond", "3");
-				st.playSound("ItemSound.quest_middle");
+				st.setCond(3, true);
 			}
 		}
 		else if (event.equalsIgnoreCase("32510-02.htm"))
 		{
 			st.unset("cond");
-			st.playSound("ItemSound.quest_finish");
-			st.exitQuest(false);
+			st.exitQuest(false, true);
 			
 			Instance inst = InstanceManager.getInstance().getInstance(npc.getInstanceId());
 			inst.setDuration(EXIT_TIME * 60000);
@@ -397,7 +390,6 @@ public class PailakaDevilsLegacy extends Quest
 			return getNoQuestMsg(player);
 		}
 		
-		final int cond = st.getInt("cond");
 		switch (npc.getNpcId())
 		{
 			case SURVIVOR:
@@ -414,7 +406,7 @@ public class PailakaDevilsLegacy extends Quest
 						}
 						return "32498-01.htm";
 					case State.STARTED:
-						if (cond > 1)
+						if (st.getCond() > 1)
 						{
 							return "32498-08.htm";
 						}
@@ -425,7 +417,7 @@ public class PailakaDevilsLegacy extends Quest
 						return "32498-01.htm";
 				}
 			case SUPPORTER:
-				if (st.getInt("cond") > 2)
+				if (st.getCond() > 2)
 				{
 					return "32501-04.htm";
 				}
@@ -469,8 +461,7 @@ public class PailakaDevilsLegacy extends Quest
 				if (!player.hasSummon())
 				{
 					st.unset("cond");
-					st.playSound("ItemSound.quest_finish");
-					st.exitQuest(false);
+					st.exitQuest(false, true);
 					
 					Instance inst = InstanceManager.getInstance().getInstance(npc.getInstanceId());
 					inst.setDuration(EXIT_TIME * 60000);
@@ -557,14 +548,14 @@ public class PailakaDevilsLegacy extends Quest
 			case KAMS:
 				if (st.hasQuestItems(SWORD))
 				{
-					st.playSound("ItemSound.quest_itemget");
+					st.playSound(QuestSound.ITEMSOUND_QUEST_ITEMGET);
 					st.giveItems(SCROLL_1, 1);
 				}
 				break;
 			case ALKASO:
 				if (st.hasQuestItems(ENH_SWORD1))
 				{
-					st.playSound("ItemSound.quest_itemget");
+					st.playSound(QuestSound.ITEMSOUND_QUEST_ITEMGET);
 					st.giveItems(SCROLL_2, 1);
 				}
 				break;
@@ -577,8 +568,7 @@ public class PailakaDevilsLegacy extends Quest
 					}
 					_followerslist.clear();
 				}
-				st.set("cond", "4");
-				st.playSound("ItemSound.quest_middle");
+				st.setCond(4, true);
 				addSpawn(ADVENTURER2, 84983, -208736, -3336, 49915, false, 0, false, npc.getInstanceId());
 				break;
 			case POWDER_KEG:
@@ -609,9 +599,9 @@ public class PailakaDevilsLegacy extends Quest
 		if ((character instanceof L2PcInstance) && !character.isDead() && !character.isTeleporting() && ((L2PcInstance) character).isOnline())
 		{
 			InstanceWorld world = InstanceManager.getInstance().getWorld(character.getInstanceId());
-			if ((world != null) && (world.templateId == INSTANCE_ID))
+			if ((world != null) && (world.getTemplateId() == INSTANCE_ID))
 			{
-				ThreadPoolManager.getInstance().scheduleGeneral(new Teleport(character, world.instanceId), 1000);
+				ThreadPoolManager.getInstance().scheduleGeneral(new Teleport(character, world.getInstanceId()), 1000);
 			}
 		}
 		return super.onEnterZone(character, zone);
@@ -654,14 +644,10 @@ public class PailakaDevilsLegacy extends Quest
 		addAttackId(TREASURE_BOX);
 		addAttackId(POWDER_KEG);
 		addAttackId(LEMATAN);
-		for (int mobId : MONSTERS)
-		{
-			addKillId(mobId);
-		}
+		addKillId(MONSTERS);
 		addEnterZoneId(ZONE);
 		addSpawnId(FOLLOWERS);
-		
-		questItemIds = ITEMS;
+		registerQuestItems(ITEMS);
 	}
 	
 	public static void main(String[] args)
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/instances/Pailaka/PailakaSongOfIceAndFire.java b/L2J_DataPack_BETA/dist/game/data/scripts/instances/Pailaka/PailakaSongOfIceAndFire.java
index 1eb2c60f88..c401ed7d46 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/instances/Pailaka/PailakaSongOfIceAndFire.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/instances/Pailaka/PailakaSongOfIceAndFire.java
@@ -17,18 +17,21 @@ package instances.Pailaka;
 import com.l2jserver.gameserver.ThreadPoolManager;
 import com.l2jserver.gameserver.ai.CtrlIntention;
 import com.l2jserver.gameserver.instancemanager.InstanceManager;
-import com.l2jserver.gameserver.instancemanager.InstanceManager.InstanceWorld;
 import com.l2jserver.gameserver.model.actor.L2Character;
 import com.l2jserver.gameserver.model.actor.L2Npc;
 import com.l2jserver.gameserver.model.actor.instance.L2MonsterInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.entity.Instance;
+import com.l2jserver.gameserver.model.instancezone.InstanceWorld;
 import com.l2jserver.gameserver.model.quest.Quest;
 import com.l2jserver.gameserver.model.quest.QuestState;
 import com.l2jserver.gameserver.model.quest.State;
 import com.l2jserver.gameserver.model.zone.L2ZoneType;
 import com.l2jserver.gameserver.network.SystemMessageId;
 
+/**
+ * Pailaka (Forgotten Temple) instance zone.
+ */
 public class PailakaSongOfIceAndFire extends Quest
 {
 	private static final String qn = "128_PailakaSongOfIceAndFire";
@@ -236,15 +239,15 @@ public class PailakaSongOfIceAndFire extends Quest
 		InstanceWorld world = InstanceManager.getInstance().getPlayerWorld(player);
 		if (world != null)
 		{
-			if (world.templateId != INSTANCE_ID)
+			if (world.getTemplateId() != INSTANCE_ID)
 			{
 				player.sendPacket(SystemMessageId.ALREADY_ENTERED_ANOTHER_INSTANCE_CANT_ENTER);
 				return;
 			}
-			Instance inst = InstanceManager.getInstance().getInstance(world.instanceId);
+			Instance inst = InstanceManager.getInstance().getInstance(world.getInstanceId());
 			if (inst != null)
 			{
-				teleportPlayer(player, TELEPORT, world.instanceId);
+				teleportPlayer(player, TELEPORT, world.getInstanceId());
 			}
 			return;
 		}
@@ -252,11 +255,11 @@ public class PailakaSongOfIceAndFire extends Quest
 		final int instanceId = InstanceManager.getInstance().createDynamicInstance("PailakaSongOfIceAndFire.xml");
 		
 		world = new InstanceWorld();
-		world.instanceId = instanceId;
-		world.templateId = INSTANCE_ID;
+		world.setInstanceId(instanceId);
+		world.setTemplateId(INSTANCE_ID);
 		InstanceManager.getInstance().addWorld(world);
 		
-		world.allowed.add(player.getObjectId());
+		world.addAllowed(player.getObjectId());
 		teleportPlayer(player, TELEPORT, instanceId);
 		
 	}
@@ -270,7 +273,6 @@ public class PailakaSongOfIceAndFire extends Quest
 			return getNoQuestMsg(player);
 		}
 		
-		final int cond = st.getInt("cond");
 		if (event.equalsIgnoreCase("enter"))
 		{
 			enterInstance(player);
@@ -278,29 +280,26 @@ public class PailakaSongOfIceAndFire extends Quest
 		}
 		else if (event.equalsIgnoreCase("32497-03.htm"))
 		{
-			if (cond == 0)
+			if (st.isCond(0))
 			{
-				st.set("cond", "1");
-				st.setState(State.STARTED);
-				st.playSound("ItemSound.quest_accept");
+				st.startQuest();
 			}
 		}
 		else if (event.equalsIgnoreCase("32500-06.htm"))
 		{
-			if (cond == 1)
+			if (st.isCond(1))
 			{
-				st.set("cond", "2");
-				st.playSound("ItemSound.quest_itemget");
+				st.setCond(2);
+				st.playSound(QuestSound.ITEMSOUND_QUEST_ITEMGET);
 				st.giveItems(SWORD, 1);
 				st.giveItems(BOOK1, 1);
 			}
 		}
 		else if (event.equalsIgnoreCase("32507-04.htm"))
 		{
-			if (cond == 3)
+			if (st.isCond(3))
 			{
-				st.set("cond", "4");
-				st.playSound("ItemSound.quest_middle");
+				st.setCond(4, true);
 				st.takeItems(SWORD, -1);
 				st.takeItems(WATER_ESSENCE, -1);
 				st.takeItems(BOOK2, -1);
@@ -310,10 +309,10 @@ public class PailakaSongOfIceAndFire extends Quest
 		}
 		else if (event.equalsIgnoreCase("32507-08.htm"))
 		{
-			if (cond == 6)
+			if (st.isCond(6))
 			{
-				st.set("cond", "7");
-				st.playSound("ItemSound.quest_itemget");
+				st.setCond(7);
+				st.playSound(QuestSound.ITEMSOUND_QUEST_ITEMGET);
 				st.takeItems(ENH_SWORD1, -1);
 				st.takeItems(BOOK5, -1);
 				st.takeItems(FIRE_ESSENCE, -1);
@@ -324,8 +323,7 @@ public class PailakaSongOfIceAndFire extends Quest
 		else if (event.equalsIgnoreCase("32510-02.htm"))
 		{
 			st.unset("cond");
-			st.playSound("ItemSound.quest_finish");
-			st.exitQuest(false);
+			st.exitQuest(false, true);
 			
 			Instance inst = InstanceManager.getInstance().getInstance(npc.getInstanceId());
 			inst.setDuration(EXIT_TIME * 60000);
@@ -359,7 +357,6 @@ public class PailakaSongOfIceAndFire extends Quest
 			return getNoQuestMsg(player);
 		}
 		
-		final int cond = st.getInt("cond");
 		switch (npc.getNpcId())
 		{
 			case ADLER1:
@@ -376,7 +373,7 @@ public class PailakaSongOfIceAndFire extends Quest
 						}
 						return "32497-01.htm";
 					case State.STARTED:
-						if (cond > 1)
+						if (st.getCond() > 1)
 						{
 							return "32497-00.htm";
 						}
@@ -387,13 +384,13 @@ public class PailakaSongOfIceAndFire extends Quest
 						return "32497-01.htm";
 				}
 			case SINAI:
-				if (cond > 1)
+				if (st.getCond() > 1)
 				{
 					return "32500-00.htm";
 				}
 				return "32500-01.htm";
 			case INSPECTOR:
-				switch (st.getInt("cond"))
+				switch (st.getCond())
 				{
 					case 1:
 						return "32507-01.htm";
@@ -410,11 +407,11 @@ public class PailakaSongOfIceAndFire extends Quest
 						return "32507-09.htm";
 				}
 			case ADLER2:
-				if (st.getState() == State.COMPLETED)
+				if (st.isCompleted())
 				{
 					return "32510-00.htm";
 				}
-				else if (cond == 9)
+				else if (st.isCond(9))
 				{
 					return "32510-01.htm";
 				}
@@ -442,14 +439,13 @@ public class PailakaSongOfIceAndFire extends Quest
 			return null;
 		}
 		
-		final int cond = st.getInt("cond");
 		switch (npc.getNpcId())
 		{
 			case HILLAS:
-				if (cond == 2)
+				if (st.isCond(2))
 				{
-					st.set("cond", "3");
-					st.playSound("ItemSound.quest_itemget");
+					st.setCond(3);
+					st.playSound(QuestSound.ITEMSOUND_QUEST_ITEMGET);
 					st.takeItems(BOOK1, -1);
 					st.giveItems(BOOK2, 1);
 					st.giveItems(WATER_ESSENCE, 1);
@@ -457,43 +453,43 @@ public class PailakaSongOfIceAndFire extends Quest
 				addSpawn(PAPION, -53903, 181484, -4555, 30456, false, 0, false, npc.getInstanceId());
 				break;
 			case PAPION:
-				if (cond == 4)
+				if (st.isCond(4))
 				{
+					st.playSound(QuestSound.ITEMSOUND_QUEST_ITEMGET);
 					st.takeItems(BOOK3, -1);
 					st.giveItems(BOOK4, 1);
-					st.set("cond", "5");
-					st.playSound("ItemSound.quest_itemget");
+					st.setCond(5);
 				}
 				addSpawn(KINSUS, -61415, 181418, -4818, 63852, false, 0, false, npc.getInstanceId());
 				break;
 			case KINSUS:
-				if (cond == 5)
+				if (st.isCond(5))
 				{
-					st.set("cond", "6");
-					st.playSound("ItemSound.quest_itemget");
+					st.playSound(QuestSound.ITEMSOUND_QUEST_ITEMGET);
 					st.takeItems(BOOK4, -1);
 					st.giveItems(BOOK5, 1);
 					st.giveItems(FIRE_ESSENCE, 1);
+					st.setCond(6);
 				}
 				addSpawn(GARGOS, -61354, 183624, -4821, 63613, false, 0, false, npc.getInstanceId());
 				break;
 			case GARGOS:
-				if (cond == 7)
+				if (st.isCond(7))
 				{
-					st.set("cond", "8");
-					st.playSound("ItemSound.quest_itemget");
+					st.playSound(QuestSound.ITEMSOUND_QUEST_ITEMGET);
 					st.takeItems(BOOK6, -1);
 					st.giveItems(BOOK7, 1);
+					st.setCond(8);
 				}
 				addSpawn(ADIANTUM, -53297, 185027, -4617, 1512, false, 0, false, npc.getInstanceId());
 				break;
 			case ADIANTUM:
-				if (cond == 8)
+				if (st.isCond(8))
 				{
-					st.set("cond", "9");
-					st.playSound("ItemSound.quest_middle");
+					st.playSound(QuestSound.ITEMSOUND_QUEST_ITEMGET);
 					st.takeItems(BOOK7, -1);
 					addSpawn(ADLER2, -53297, 185027, -4617, 33486, false, 0, false, npc.getInstanceId());
+					st.setCond(9);
 				}
 				break;
 			case BOTTLE:
@@ -516,9 +512,9 @@ public class PailakaSongOfIceAndFire extends Quest
 		if ((character instanceof L2PcInstance) && !character.isDead() && !character.isTeleporting() && ((L2PcInstance) character).isOnline())
 		{
 			InstanceWorld world = InstanceManager.getInstance().getWorld(character.getInstanceId());
-			if ((world != null) && (world.templateId == INSTANCE_ID))
+			if ((world != null) && (world.getTemplateId() == INSTANCE_ID))
 			{
-				ThreadPoolManager.getInstance().scheduleGeneral(new Teleport(character, world.instanceId), 1000);
+				ThreadPoolManager.getInstance().scheduleGeneral(new Teleport(character, world.getInstanceId()), 1000);
 			}
 		}
 		return super.onExitZone(character, zone);
@@ -565,7 +561,7 @@ public class PailakaSongOfIceAndFire extends Quest
 			addKillId(mobId);
 		}
 		addExitZoneId(ZONE);
-		questItemIds = ITEMS;
+		registerQuestItems(ITEMS);
 	}
 	
 	public static void main(String[] args)
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/instances/RankuFloor/RankuFloor.java b/L2J_DataPack_BETA/dist/game/data/scripts/instances/RankuFloor/RankuFloor.java
index 18576860b5..b0f5084584 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/instances/RankuFloor/RankuFloor.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/instances/RankuFloor/RankuFloor.java
@@ -18,32 +18,24 @@ import java.util.Calendar;
 
 import com.l2jserver.gameserver.ai.CtrlIntention;
 import com.l2jserver.gameserver.instancemanager.InstanceManager;
-import com.l2jserver.gameserver.instancemanager.InstanceManager.InstanceWorld;
 import com.l2jserver.gameserver.model.L2Party;
 import com.l2jserver.gameserver.model.L2World;
 import com.l2jserver.gameserver.model.Location;
 import com.l2jserver.gameserver.model.actor.L2Npc;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.entity.Instance;
+import com.l2jserver.gameserver.model.instancezone.InstanceWorld;
 import com.l2jserver.gameserver.model.quest.Quest;
 import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
 import com.l2jserver.gameserver.util.Util;
 
 /**
+ * Tower of Infinitum (10th Floor) instance zone.
  * @author GKR
  */
 public class RankuFloor extends Quest
 {
-	private class RWorld extends InstanceWorld
-	{
-		public RWorld()
-		{
-			super();
-		}
-	}
-	
-	private static final String qn = "RankuFloor";
 	private static final int INSTANCEID = 143; // this is the client number
 	private static final int RESET_HOUR = 6;
 	private static final int RESET_MIN = 30;
@@ -85,14 +77,13 @@ public class RankuFloor extends Quest
 		}
 		else if (npc.getNpcId() == CUBE)
 		{
-			InstanceWorld world = InstanceManager.getInstance().getWorld(npc.getInstanceId());
-			if ((world != null) && (world instanceof RWorld))
+			final InstanceWorld world = InstanceManager.getInstance().getWorld(npc.getInstanceId());
+			if ((world != null) && (world.getInstanceId() == INSTANCEID))
 			{
-				world.allowed.remove(world.allowed.indexOf(player.getObjectId()));
+				world.removeAllowed(player.getObjectId());
 				teleportPlayer(player, EXIT_POINT, 0);
 			}
 		}
-		
 		return htmltext;
 	}
 	
@@ -114,7 +105,7 @@ public class RankuFloor extends Quest
 			
 			inst.setEmptyDestroyTime(0);
 			
-			if ((world != null) && (world instanceof RWorld))
+			if ((world != null) && (world.getInstanceId() == INSTANCEID))
 			{
 				setReenterTime(world);
 			}
@@ -208,13 +199,13 @@ public class RankuFloor extends Quest
 		// existing instance
 		if (world != null)
 		{
-			if (!(world instanceof RWorld))
+			if (world.getInstanceId() != INSTANCEID)
 			{
 				player.sendPacket(SystemMessageId.ALREADY_ENTERED_ANOTHER_INSTANCE_CANT_ENTER);
 				return 0;
 			}
-			teleportPlayer(player, ENTRY_POINT, world.instanceId);
-			return world.instanceId;
+			teleportPlayer(player, ENTRY_POINT, world.getInstanceId());
+			return world.getInstanceId();
 		}
 		
 		if (!checkTeleport(player))
@@ -223,10 +214,10 @@ public class RankuFloor extends Quest
 		}
 		
 		instanceId = InstanceManager.getInstance().createDynamicInstance(template);
-		world = new RWorld();
-		world.instanceId = instanceId;
-		world.templateId = INSTANCEID;
-		world.status = 0;
+		world = new InstanceWorld();
+		world.setInstanceId(instanceId);
+		world.setTemplateId(INSTANCEID);
+		world.setStatus(0);
 		InstanceManager.getInstance().addWorld(world);
 		_log.info("Tower of Infinitum - Ranku floor started " + template + " Instance: " + instanceId + " created by player: " + player.getName());
 		
@@ -234,7 +225,7 @@ public class RankuFloor extends Quest
 		{
 			teleportPlayer(partyMember, ENTRY_POINT, instanceId);
 			partyMember.destroyItemByItemId("Quest", SEAL_BREAKER_10, 1, null, true);
-			world.allowed.add(partyMember.getObjectId());
+			world.addAllowed(partyMember.getObjectId());
 		}
 		
 		return instanceId;
@@ -242,11 +233,9 @@ public class RankuFloor extends Quest
 	
 	public void setReenterTime(InstanceWorld world)
 	{
-		if (world instanceof RWorld)
+		if (world.getInstanceId() == INSTANCEID)
 		{
-			
 			// Reenter time should be cleared every Wed and Sat at 6:30 AM, so we set next suitable
-			
 			Calendar reenter;
 			Calendar now = Calendar.getInstance();
 			Calendar reenterPointWed = (Calendar) now.clone();
@@ -268,14 +257,14 @@ public class RankuFloor extends Quest
 			}
 			
 			final SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.INSTANT_ZONE_S1_RESTRICTED);
-			sm.addInstanceName(world.templateId);
+			sm.addInstanceName(world.getTemplateId());
 			// set instance reenter time for all allowed players
-			for (int objectId : world.allowed)
+			for (int objectId : world.getAllowed())
 			{
 				L2PcInstance player = L2World.getInstance().getPlayer(objectId);
 				if ((player != null) && player.isOnline())
 				{
-					InstanceManager.getInstance().setInstanceTime(objectId, world.templateId, reenter.getTimeInMillis());
+					InstanceManager.getInstance().setInstanceTime(objectId, world.getTemplateId(), reenter.getTimeInMillis());
 					player.sendPacket(sm);
 				}
 			}
@@ -291,6 +280,6 @@ public class RankuFloor extends Quest
 	
 	public static void main(String[] args)
 	{
-		new RankuFloor(-1, qn, "instances");
+		new RankuFloor(-1, RankuFloor.class.getSimpleName(), "instances");
 	}
 }
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/instances/SecretArea/SecretArea.java b/L2J_DataPack_BETA/dist/game/data/scripts/instances/SecretArea/SecretArea.java
index 2c84a61f2f..d16d7ee633 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/instances/SecretArea/SecretArea.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/instances/SecretArea/SecretArea.java
@@ -15,24 +15,22 @@
 package instances.SecretArea;
 
 import com.l2jserver.gameserver.instancemanager.InstanceManager;
-import com.l2jserver.gameserver.instancemanager.InstanceManager.InstanceWorld;
 import com.l2jserver.gameserver.model.Location;
 import com.l2jserver.gameserver.model.actor.L2Npc;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.entity.Instance;
+import com.l2jserver.gameserver.model.instancezone.InstanceWorld;
 import com.l2jserver.gameserver.model.quest.Quest;
-import com.l2jserver.gameserver.model.quest.QuestState;
 import com.l2jserver.gameserver.network.SystemMessageId;
 
 /**
- *  Secret Area in the Keucereus Fortress (For Quest 10272 Light Fragment)
- ** @author Gladicek
+ * Secret Area in the Keucereus Fortress instance zone.
+ * @author Gladicek
  */
 public class SecretArea extends Quest
 {
-	private static final String qn = "SecretArea";
-	
 	private static final int INSTANCE_ID = 117;
+	// TODO Unharcode htmls.
 	private static final String _ENTER = "<html><head><body>Soldier Ginby:<br>Hurry! Come back before anybody sees you!</body></html>";
 	private static final String _EXIT = "<html><head><body>Shilen Priest Lelrikia:<br>Doomed creature, either you obey the power of Shilen or you fight.Regardless of your decision, the shadow of death will not simply fade away...</body></html>";
 	private static final int GINBY = 32566;
@@ -41,14 +39,10 @@ public class SecretArea extends Quest
 	private static final int EXIT = 1;
 	private static final Location[] TELEPORTS =
 	{
-		new Location(-23758, -8959, -5384), new Location(-185057, 242821, 1576)
+		new Location(-23758, -8959, -5384),
+		new Location(-185057, 242821, 1576)
 	};
 	
-	protected class SecretAreaWorld extends InstanceWorld
-	{
-		
-	}
-	
 	private void teleportPlayer(L2PcInstance player, Location loc, int instanceId)
 	{
 		player.setInstanceId(instanceId);
@@ -60,28 +54,27 @@ public class SecretArea extends Quest
 		InstanceWorld world = InstanceManager.getInstance().getPlayerWorld(player);
 		if (world != null)
 		{
-			if (!(world instanceof SecretAreaWorld))
+			if (world.getInstanceId() != INSTANCE_ID)
 			{
 				player.sendPacket(SystemMessageId.ALREADY_ENTERED_ANOTHER_INSTANCE_CANT_ENTER);
 				return;
 			}
-			Instance inst = InstanceManager.getInstance().getInstance(world.instanceId);
+			Instance inst = InstanceManager.getInstance().getInstance(world.getInstanceId());
 			if (inst != null)
 			{
-				teleportPlayer(player, TELEPORTS[ENTER], world.instanceId);
+				teleportPlayer(player, TELEPORTS[ENTER], world.getInstanceId());
 			}
 		}
 		else
 		{
 			final int instanceId = InstanceManager.getInstance().createDynamicInstance("SecretArea.xml");
-			
-			world = new SecretAreaWorld();
-			world.instanceId = instanceId;
-			world.templateId = INSTANCE_ID;
-			world.status = 0;
+			world = new InstanceWorld();
+			world.setInstanceId(INSTANCE_ID);
+			world.setTemplateId(instanceId);
+			world.setStatus(0);
 			InstanceManager.getInstance().addWorld(world);
 			
-			world.allowed.add(player.getObjectId());
+			world.addAllowed(player.getObjectId());
 			teleportPlayer(player, TELEPORTS[ENTER], instanceId);
 		}
 	}
@@ -90,10 +83,6 @@ public class SecretArea extends Quest
 	public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
 	{
 		String htmltext = getNoQuestMsg(player);
-		QuestState st = player.getQuestState(qn);
-		if (st == null)
-			st = newQuestState(player);
-		
 		if (npc.getNpcId() == GINBY && event.equalsIgnoreCase("enter"))
 		{	
 			enterInstance(player);
@@ -118,6 +107,6 @@ public class SecretArea extends Quest
 	
 	public static void main(String[] args)
 	{
-		new SecretArea(-1, qn, "instances");
+		new SecretArea(-1, SecretArea.class.getSimpleName(), "instances");
 	}
 }
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/instances/SeedOfDestruction/Stage1.java b/L2J_DataPack_BETA/dist/game/data/scripts/instances/SeedOfDestruction/Stage1.java
index 445dd44ba8..e699e3f222 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/instances/SeedOfDestruction/Stage1.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/instances/SeedOfDestruction/Stage1.java
@@ -37,7 +37,6 @@ import com.l2jserver.gameserver.GeoData;
 import com.l2jserver.gameserver.ai.CtrlIntention;
 import com.l2jserver.gameserver.instancemanager.GraciaSeedsManager;
 import com.l2jserver.gameserver.instancemanager.InstanceManager;
-import com.l2jserver.gameserver.instancemanager.InstanceManager.InstanceWorld;
 import com.l2jserver.gameserver.model.L2CharPosition;
 import com.l2jserver.gameserver.model.L2CommandChannel;
 import com.l2jserver.gameserver.model.L2Object.InstanceType;
@@ -52,6 +51,7 @@ import com.l2jserver.gameserver.model.actor.instance.L2DoorInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2MonsterInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.holders.SkillHolder;
+import com.l2jserver.gameserver.model.instancezone.InstanceWorld;
 import com.l2jserver.gameserver.model.quest.Quest;
 import com.l2jserver.gameserver.model.quest.QuestState;
 import com.l2jserver.gameserver.model.skills.L2Skill;
@@ -62,6 +62,7 @@ import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
 import com.l2jserver.gameserver.util.Util;
 
 /**
+ * Seed of Destruction instance zone.<br>
  * TODO:
  * <ul>
  * 	<li>No random mob spawns after mob kill.</li>
@@ -73,15 +74,11 @@ import com.l2jserver.gameserver.util.Util;
  */
 public class Stage1 extends Quest
 {
-	private class SOD1World extends InstanceWorld
+	protected class SOD1World extends InstanceWorld
 	{
 		public           Map<L2Npc,Boolean> npcList                      = new FastMap<>();
 		public           int                deviceSpawnedMobCount        = 0;
 		public           Lock               lock                         = new ReentrantLock();
-
-		public SOD1World()
-		{
-		}
 	}
 	
 	protected static class SODSpawn
@@ -425,16 +422,16 @@ public class Stage1 extends Quest
 				player.sendPacket(SystemMessageId.ALREADY_ENTERED_ANOTHER_INSTANCE_CANT_ENTER);
 				return 0;
 			}
-			teleportPlayer(player, coords, world.instanceId);
-			return world.instanceId;
+			teleportPlayer(player, coords, world.getInstanceId());
+			return world.getInstanceId();
 		}
 		//New instance
 		if (!checkConditions(player))
 			return 0;
 		instanceId = InstanceManager.getInstance().createDynamicInstance(template);
 		world = new SOD1World();
-		world.instanceId = instanceId;
-		world.status = 0;
+		world.setInstanceId(instanceId);
+		world.setStatus(0);
 		InstanceManager.getInstance().addWorld(world);
 		spawnState((SOD1World)world);
 		for (L2DoorInstance door : InstanceManager.getInstance().getInstance(instanceId).getDoors())
@@ -445,14 +442,14 @@ public class Stage1 extends Quest
 		if (player.getParty() == null || player.getParty().getCommandChannel() == null)
 		{
 			teleportPlayer(player, coords, instanceId);
-			world.allowed.add(player.getObjectId());
+			world.addAllowed(player.getObjectId());
 		}
 		else
 		{
 			for (L2PcInstance channelMember : player.getParty().getCommandChannel().getMembers())
 			{
 				teleportPlayer(channelMember, coords, instanceId);
-				world.allowed.add(channelMember.getObjectId());
+				world.addAllowed(channelMember.getObjectId());
 			}
 		}
 		return instanceId;
@@ -507,7 +504,7 @@ public class Stage1 extends Quest
 			try
 			{
 				world.npcList.clear();
-				switch(world.status)
+				switch(world.getStatus())
 				{
 				case 0:
 					spawnFlaggedNPCs(world, 0);
@@ -516,7 +513,7 @@ public class Stage1 extends Quest
 					ExShowScreenMessage message1 = new ExShowScreenMessage(NpcStringId.THE_ENEMIES_HAVE_ATTACKED_EVERYONE_COME_OUT_AND_FIGHT_URGH, 5, 1);
 					sendScreenMessage(world, message1);
 					for(int i : ENTRANCE_ROOM_DOORS)
-						openDoor(i,world.instanceId);
+						openDoor(i,world.getInstanceId());
 					spawnFlaggedNPCs(world, 1);
 					break;
 				case 2:
@@ -527,16 +524,16 @@ public class Stage1 extends Quest
 					ExShowScreenMessage message2 = new ExShowScreenMessage(NpcStringId.OBELISK_HAS_COLLAPSED_DONT_LET_THE_ENEMIES_JUMP_AROUND_WILDLY_ANYMORE, 5, 1);
 					sendScreenMessage(world, message2);
 					for(int i : SQUARE_DOORS)
-						openDoor(i,world.instanceId);
+						openDoor(i,world.getInstanceId());
 					spawnFlaggedNPCs(world, 4);
 					break;
 				case 5:
-					openDoor(SCOUTPASS_DOOR,world.instanceId);
+					openDoor(SCOUTPASS_DOOR,world.getInstanceId());
 					spawnFlaggedNPCs(world, 3);
 					spawnFlaggedNPCs(world, 5);
 					break;
 				case 6:
-					openDoor(THRONE_DOOR,world.instanceId);
+					openDoor(THRONE_DOOR,world.getInstanceId());
 					break;
 				case 7:
 					spawnFlaggedNPCs(world, 7);
@@ -551,7 +548,7 @@ public class Stage1 extends Quest
 					// instance end
 					break;
 				}
-				world.status++;
+				world.setStatus(world.getStatus() + 1);
 				return true;
 			}
 			finally
@@ -576,10 +573,10 @@ public class Stage1 extends Quest
 				skill = TRAP_DAMAGE.getSkill();
 			else
 				skill = TRAP_SPAWN.getSkill();
-			addTrap(npcId, x, y, z, h, skill, world.instanceId);
+			addTrap(npcId, x, y, z, h, skill, world.getInstanceId());
 			return;
 		}
-		L2Npc npc = addSpawn(npcId, x, y, z, h, false,0,false,world.instanceId);
+		L2Npc npc = addSpawn(npcId, x, y, z, h, false,0,false,world.getInstanceId());
 		if (addToKillTable)
 			world.npcList.put(npc, false);
 		npc.setIsNoRndWalk(true);
@@ -620,7 +617,7 @@ public class Stage1 extends Quest
 		sm.addInstanceName(INSTANCEID);
 
 		// set instance reenter time for all allowed players
-		for (int objectId : world.allowed)
+		for (int objectId : world.getAllowed())
 		{
 			L2PcInstance player = L2World.getInstance().getPlayer(objectId);
 			InstanceManager.getInstance().setInstanceTime(objectId, INSTANCEID, reenter.getTimeInMillis());
@@ -631,7 +628,7 @@ public class Stage1 extends Quest
 	
 	private void sendScreenMessage(SOD1World world, ExShowScreenMessage message)
 	{
-		for(int objId : world.allowed)
+		for(int objId : world.getAllowed())
 		{
 			L2PcInstance player = L2World.getInstance().getPlayer(objId);
 			if (player != null)
@@ -658,11 +655,11 @@ public class Stage1 extends Quest
 			if (tmpworld instanceof SOD1World)
 			{
 				SOD1World world = (SOD1World) tmpworld;
-				if (world.status == 7)
+				if (world.getStatus() == 7)
 				{
 					if (spawnState(world))
 					{
-						for(int objId : world.allowed)
+						for(int objId : world.getAllowed())
 						{
 							L2PcInstance pl = L2World.getInstance().getPlayer(objId);
 							if (pl != null)
@@ -683,17 +680,17 @@ public class Stage1 extends Quest
 		if (tmpworld instanceof SOD1World)
 		{
 			SOD1World world = (SOD1World) tmpworld;
-			if (world.status == 2 && npc.getNpcId() == OBELISK)
+			if (world.getStatus() == 2 && npc.getNpcId() == OBELISK)
 			{
-				world.status = 4;
+				world.setStatus(4);
 				spawnFlaggedNPCs(world, 3);
 			}
-			else if (world.status == 3 && npc.getNpcId() == OBELISK)
+			else if (world.getStatus() == 3 && npc.getNpcId() == OBELISK)
 			{
-				world.status = 4;
+				world.setStatus(4);
 				spawnFlaggedNPCs(world, 2);
 			}
-			else if (world.status <= 8 && npc.getNpcId() == TIAT)
+			else if (world.getStatus() <= 8 && npc.getNpcId() == TIAT)
 			{
 				if (npc.getCurrentHp() < (npc.getMaxHp() / 2))
 				{
@@ -717,16 +714,16 @@ public class Stage1 extends Quest
 			SOD1World world = (SOD1World) tmpworld;
 			if (event.equalsIgnoreCase("Spawn"))
 			{
-				L2PcInstance target = L2World.getInstance().getPlayer(world.allowed.get(getRandom(world.allowed.size())));
+				L2PcInstance target = L2World.getInstance().getPlayer(world.getAllowed().get(getRandom(world.getAllowed().size())));
 				if (world.deviceSpawnedMobCount < MAX_DEVICESPAWNEDMOBCOUNT
 						&& target != null && target.getInstanceId() == npc.getInstanceId()
 						&& !target.isDead())
 				{
-					L2Attackable mob = (L2Attackable) addSpawn(SPAWN_MOB_IDS[getRandom(SPAWN_MOB_IDS.length)], npc.getSpawn().getLocx(), npc.getSpawn().getLocy(), npc.getSpawn().getLocz(), npc.getSpawn().getHeading(), false,0,false,world.instanceId);
+					L2Attackable mob = (L2Attackable) addSpawn(SPAWN_MOB_IDS[getRandom(SPAWN_MOB_IDS.length)], npc.getSpawn().getLocx(), npc.getSpawn().getLocy(), npc.getSpawn().getLocz(), npc.getSpawn().getHeading(), false,0,false,world.getInstanceId());
 					world.deviceSpawnedMobCount++;
 					mob.setSeeThroughSilentMove(true);
 					mob.setRunning();
-					if (world.status >= 7)
+					if (world.getStatus() >= 7)
 						mob.getAI().setIntention(CtrlIntention.AI_INTENTION_MOVE_TO, MOVE_TO_TIAT);
 					else
 						mob.getAI().setIntention(CtrlIntention.AI_INTENTION_MOVE_TO, MOVE_TO_DOOR);
@@ -779,42 +776,42 @@ public class Stage1 extends Quest
 		if (tmpworld instanceof SOD1World)
 		{
 			SOD1World world = (SOD1World) tmpworld;
-			if (world.status == 1)
+			if (world.getStatus() == 1)
 			{
 				if (checkKillProgress(npc, world))
 					spawnState(world);
 			}
-			else if (world.status == 2)
+			else if (world.getStatus() == 2)
 			{
 				if (checkKillProgress(npc, world))
-					world.status++;
+					world.setStatus(world.getStatus() + 1);
 			}
-			else if (world.status == 4 && npc.getNpcId() == OBELISK)
+			else if (world.getStatus() == 4 && npc.getNpcId() == OBELISK)
 			{
 				spawnState(world);
 			}
-			else if (world.status == 5 && npc.getNpcId() == POWERFUL_DEVICE)
+			else if (world.getStatus() == 5 && npc.getNpcId() == POWERFUL_DEVICE)
 			{
 				if (checkKillProgress(npc, world))
 					spawnState(world);
 			}
-			else if (world.status == 6 && npc.getNpcId() == THRONE_POWERFUL_DEVICE)
+			else if (world.getStatus() == 6 && npc.getNpcId() == THRONE_POWERFUL_DEVICE)
 			{
 				if (checkKillProgress(npc, world))
 					spawnState(world);
 			}
-			else if (world.status >= 7)
+			else if (world.getStatus() >= 7)
 			{
 				if (npc.getNpcId() == TIAT)
 				{
-					world.status++;
-					for(int objId : world.allowed)
+					world.setStatus(world.getStatus() + 1);
+					for(int objId : world.getAllowed())
 					{
 						L2PcInstance pl = L2World.getInstance().getPlayer(objId);
 						if (pl != null)
 							pl.showQuestMovie(6);
 					}
-					for(L2Npc mob:InstanceManager.getInstance().getInstance(world.instanceId).getNpcs())
+					for(L2Npc mob:InstanceManager.getInstance().getInstance(world.getInstanceId()).getNpcs())
 						mob.deleteMe();
 					
 					GraciaSeedsManager.getInstance().increaseSoDTiatKilled();
@@ -860,10 +857,10 @@ public class Stage1 extends Quest
 				case TRAP_TRIGGERED:
 					if (trap.getNpcId() == 18771)
 						for(int npcId : TRAP_18771_NPCS)
-							addSpawn(npcId, trap.getX(), trap.getY(), trap.getZ(), trap.getHeading(), true, 0, true, world.instanceId);
+							addSpawn(npcId, trap.getX(), trap.getY(), trap.getZ(), trap.getHeading(), true, 0, true, world.getInstanceId());
 					else
 						for(int npcId : TRAP_OTHER_NPCS)
-							addSpawn(npcId, trap.getX(), trap.getY(), trap.getZ(), trap.getHeading(), true, 0, true, world.instanceId);
+							addSpawn(npcId, trap.getX(), trap.getY(), trap.getZ(), trap.getHeading(), true, 0, true, world.getInstanceId());
 					break;
 			}
 		}
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/instances/SeedOfInfinity/HallOfSuffering.java b/L2J_DataPack_BETA/dist/game/data/scripts/instances/SeedOfInfinity/HallOfSuffering.java
index f264855464..eeb4964b14 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/instances/SeedOfInfinity/HallOfSuffering.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/instances/SeedOfInfinity/HallOfSuffering.java
@@ -23,7 +23,6 @@ import com.l2jserver.gameserver.ai.CtrlEvent;
 import com.l2jserver.gameserver.cache.HtmCache;
 import com.l2jserver.gameserver.datatables.SkillTable;
 import com.l2jserver.gameserver.instancemanager.InstanceManager;
-import com.l2jserver.gameserver.instancemanager.InstanceManager.InstanceWorld;
 import com.l2jserver.gameserver.model.L2Object;
 import com.l2jserver.gameserver.model.L2Party;
 import com.l2jserver.gameserver.model.L2World;
@@ -32,6 +31,7 @@ import com.l2jserver.gameserver.model.actor.L2Character;
 import com.l2jserver.gameserver.model.actor.L2Npc;
 import com.l2jserver.gameserver.model.actor.instance.L2MonsterInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jserver.gameserver.model.instancezone.InstanceWorld;
 import com.l2jserver.gameserver.model.quest.Quest;
 import com.l2jserver.gameserver.model.quest.QuestState;
 import com.l2jserver.gameserver.model.skills.L2Skill;
@@ -41,6 +41,7 @@ import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
 import com.l2jserver.gameserver.util.Util;
 
 /**
+ * Seed of Infinity (Hall of Suffering) instance zone.<br>
  * TODO:
  * - after 15mins mobs are despawned
  * - bound instance to quests
@@ -50,8 +51,7 @@ import com.l2jserver.gameserver.util.Util;
  */
 public class HallOfSuffering extends Quest
 {
-	
-	private class HSWorld extends InstanceWorld
+	protected class HSWorld extends InstanceWorld
 	{
 		public           Map<L2Npc,Boolean> npcList                      = new FastMap<>();
 		public           L2Npc klodekus                                  = null;
@@ -62,25 +62,17 @@ public class HallOfSuffering extends Quest
 		public           int rewardItemId                                = -1;
 		public           String rewardHtm                                = "";
 		public           boolean isRewarded                              = false;
-		
-		public HSWorld()
-		{
-		}
 	}
 	
 	private static final String qn = "SeedOfInfinity";
 	private static final int INSTANCEID = 115; // this is the client number
 	private static final boolean debug = false;
 	
-	//Items
-	
 	//NPCs
 	private static final int MOUTHOFEKIMUS = 32537;
 	private static final int TEPIOS = 32530;
-	
 	// teleports
 	private static final int[] ENTER_TELEPORT = {-187567,205570,-9538};
-	
 	//mobs
 	private static final int KLODEKUS = 25665;
 	private static final int KLANIKUS = 25666;
@@ -88,9 +80,6 @@ public class HallOfSuffering extends Quest
 	private static final int TUMOR_DEAD = 18705;
 	private static final int[] TUMOR_MOBIDS = {22509,22510,22511,22512,22513,22514,22515};
 	private static final int[] TWIN_MOBIDS = {22509,22510,22511,22512,22513};
-	
-	// Doors/Walls/Zones
-	
 	// Doors/Walls/Zones
 	private static final int[][] ROOM_1_MOBS = {
 		{22509, -186296, 208200, -9544}, {22509, -186161, 208345, -9544}, {22509, -186296, 208403, -9544},
@@ -193,8 +182,8 @@ public class HallOfSuffering extends Quest
 				player.sendPacket(SystemMessageId.ALREADY_ENTERED_ANOTHER_INSTANCE_CANT_ENTER);
 				return 0;
 			}
-			teleportPlayer(player, coords, world.instanceId);
-			return world.instanceId;
+			teleportPlayer(player, coords, world.getInstanceId());
+			return world.getInstanceId();
 		}
 		//New instance
 		if (!checkConditions(player))
@@ -202,9 +191,9 @@ public class HallOfSuffering extends Quest
 		L2Party party = player.getParty();
 		instanceId = InstanceManager.getInstance().createDynamicInstance(template);
 		world = new HSWorld();
-		world.instanceId = instanceId;
-		world.templateId = INSTANCEID;
-		world.status = 0;
+		world.setInstanceId(instanceId);
+		world.setTemplateId(INSTANCEID);
+		world.setStatus(0);
 		((HSWorld)world).startTime = System.currentTimeMillis();
 		((HSWorld)world).ptLeaderName = player.getName();
 		InstanceManager.getInstance().addWorld(world);
@@ -215,14 +204,14 @@ public class HallOfSuffering extends Quest
 		if (player.getParty() == null)
 		{
 			teleportPlayer(player, coords, instanceId);
-			world.allowed.add(player.getObjectId());
+			world.addAllowed(player.getObjectId());
 		}
 		else
 		{
 			for (L2PcInstance partyMember : party.getMembers())
 			{
 				teleportPlayer(partyMember, coords, instanceId);
-				world.allowed.add(partyMember.getObjectId());
+				world.addAllowed(partyMember.getObjectId());
 				if (partyMember.getQuestState(qn) == null)
 					newQuestState(partyMember);
 			}
@@ -261,24 +250,24 @@ public class HallOfSuffering extends Quest
 	
 	protected void runTumors(HSWorld world)
 	{
-		for (int[] mob : getRoomSpawns(world.status))
+		for (int[] mob : getRoomSpawns(world.getStatus()))
 		{
-			L2Npc npc = addSpawn(mob[0], mob[1], mob[2], mob[3], 0, false,0,false,world.instanceId);
+			L2Npc npc = addSpawn(mob[0], mob[1], mob[2], mob[3], 0, false,0,false,world.getInstanceId());
 			world.npcList.put(npc, false);
 		}
-		L2Npc mob = addSpawn(TUMOR_ALIVE, TUMOR_SPAWNS[world.status][0], TUMOR_SPAWNS[world.status][1], TUMOR_SPAWNS[world.status][2], 0, false,0,false,world.instanceId);
+		L2Npc mob = addSpawn(TUMOR_ALIVE, TUMOR_SPAWNS[world.getStatus()][0], TUMOR_SPAWNS[world.getStatus()][1], TUMOR_SPAWNS[world.getStatus()][2], 0, false,0,false,world.getInstanceId());
 		mob.disableCoreAI(true);
 		mob.setIsImmobilized(true);
 		mob.setCurrentHp(mob.getMaxHp()*0.5);
 		world.npcList.put(mob, false);
-		world.status++;
+		world.setStatus(world.getStatus() + 1);
 	}
 	
 	protected void runTwins(HSWorld world)
 	{
-		world.status++;
-		world.klodekus = addSpawn(TWIN_SPAWNS[0][0], TWIN_SPAWNS[0][1], TWIN_SPAWNS[0][2], TWIN_SPAWNS[0][3], 0, false,0,false,world.instanceId);
-		world.klanikus = addSpawn(TWIN_SPAWNS[1][0], TWIN_SPAWNS[1][1], TWIN_SPAWNS[1][2], TWIN_SPAWNS[1][3], 0, false,0,false,world.instanceId);
+		world.setStatus(world.getStatus() + 1);
+		world.klodekus = addSpawn(TWIN_SPAWNS[0][0], TWIN_SPAWNS[0][1], TWIN_SPAWNS[0][2], TWIN_SPAWNS[0][3], 0, false,0,false,world.getInstanceId());
+		world.klanikus = addSpawn(TWIN_SPAWNS[1][0], TWIN_SPAWNS[1][1], TWIN_SPAWNS[1][2], TWIN_SPAWNS[1][3], 0, false,0,false,world.getInstanceId());
 		world.klanikus.setIsMortal(false);
 		world.klodekus.setIsMortal(false);
 	}
@@ -464,15 +453,15 @@ public class HallOfSuffering extends Quest
 				reenter.add(Calendar.HOUR, INSTANCEPENALTY);
 				
 				SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.INSTANT_ZONE_S1_RESTRICTED);
-				sm.addInstanceName(tmpworld.templateId);
+				sm.addInstanceName(tmpworld.getTemplateId());
 				
 				// set instance reenter time for all allowed players
-				for (int objectId : tmpworld.allowed)
+				for (int objectId : tmpworld.getAllowed())
 				{
 					L2PcInstance player = L2World.getInstance().getPlayer(objectId);
 					if (player != null && player.isOnline())
 					{
-						InstanceManager.getInstance().setInstanceTime(objectId, tmpworld.templateId, reenter.getTimeInMillis());
+						InstanceManager.getInstance().setInstanceTime(objectId, tmpworld.getTemplateId(), reenter.getTimeInMillis());
 						player.sendPacket(sm);
 					}
 				}
@@ -513,21 +502,21 @@ public class HallOfSuffering extends Quest
 			
 			if (npc.getNpcId() == TUMOR_ALIVE)
 				addSpawn(TUMOR_DEAD, npc.getX(), npc.getY(), npc.getZ(), npc.getHeading(), false, 0, false, npc.getInstanceId());
-			if (world.status < 5)
+			if (world.getStatus() < 5)
 			{
 				if (checkKillProgress(npc, world))
 					runTumors(world);
 			}
-			else if (world.status == 5)
+			else if (world.getStatus() == 5)
 			{
 				if (checkKillProgress(npc, world))
 					runTwins(world);
 			}
-			else if (world.status == 6 && (npc.getNpcId() == KLODEKUS || npc.getNpcId() == KLANIKUS))
+			else if (world.getStatus() == 6 && (npc.getNpcId() == KLODEKUS || npc.getNpcId() == KLANIKUS))
 			{
 				if (world.klanikus.isDead() && world.klodekus.isDead())
 				{
-					world.status++;
+					world.setStatus(world.getStatus() + 1);
 					// instance end
 					calcRewardItemId(world);
 					world.klanikus = null;
@@ -535,7 +524,7 @@ public class HallOfSuffering extends Quest
 					this.cancelQuestTimers("ressurectTwin");
 					this.cancelQuestTimers("spawnBossGuards");
 					this.cancelQuestTimers("isTwinSeparated");
-					addSpawn(TEPIOS, TEPIOS_SPAWN[0], TEPIOS_SPAWN[1], TEPIOS_SPAWN[2], 0, false,0,false,world.instanceId);
+					addSpawn(TEPIOS, TEPIOS_SPAWN[0], TEPIOS_SPAWN[1], TEPIOS_SPAWN[2], 0, false,0,false,world.getInstanceId());
 				}
 			}
 		}
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00011_SecretMeetingWithKetraOrcs/Q00011_SecretMeetingWithKetraOrcs.java b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00011_SecretMeetingWithKetraOrcs/Q00011_SecretMeetingWithKetraOrcs.java
index 2c6c10eb0c..08ec9ef22e 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00011_SecretMeetingWithKetraOrcs/Q00011_SecretMeetingWithKetraOrcs.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00011_SecretMeetingWithKetraOrcs/Q00011_SecretMeetingWithKetraOrcs.java
@@ -46,29 +46,24 @@ public class Q00011_SecretMeetingWithKetraOrcs extends Quest
 			return htmltext;
 		}
 		
-		final int cond = st.getInt("cond");
 		switch (event)
 		{
 			case "31296-03.html":
-				st.set("cond", "1");
-				st.setState(State.STARTED);
-				st.playSound("ItemSound.quest_accept");
+				st.startQuest();
 				break;
 			case "31256-02.html":
-				if (cond == 1)
+				if (st.isCond(1))
 				{
-					st.set("cond", "2");
+					st.setCond(2, true);
 					st.giveItems(BOX, 1);
-					st.playSound("ItemSound.quest_middle");
 				}
 				break;
 			case "31371-02.html":
-				if ((cond == 2) && (st.hasQuestItems(BOX)))
+				if (st.isCond(2) && st.hasQuestItems(BOX))
 				{
 					st.takeItems(BOX, -1);
 					st.addExpAndSp(233125, 18142);
-					st.playSound("ItemSound.quest_finish");
-					st.exitQuest(false);
+					st.exitQuest(false, true);
 				}
 				else
 				{
@@ -84,15 +79,12 @@ public class Q00011_SecretMeetingWithKetraOrcs extends Quest
 	{
 		String htmltext = getNoQuestMsg(player);
 		QuestState st = player.getQuestState(getName());
-		
 		if (st == null)
 		{
 			return htmltext;
 		}
 		
-		int cond = st.getInt("cond");
 		int npcId = npc.getNpcId();
-		
 		switch (st.getState())
 		{
 			case State.COMPLETED:
@@ -105,23 +97,23 @@ public class Q00011_SecretMeetingWithKetraOrcs extends Quest
 				}
 				break;
 			case State.STARTED:
-				if ((npcId == CADMON) && (cond == 1))
+				if ((npcId == CADMON) && st.isCond(1))
 				{
 					htmltext = "31296-04.html";
 				}
 				else if (npcId == LEON)
 				{
-					if (cond == 1)
+					if (st.isCond(1))
 					{
 						htmltext = "31256-01.html";
 						
 					}
-					else if (cond == 2)
+					else if (st.isCond(2))
 					{
 						htmltext = "31256-03.html";
 					}
 				}
-				else if ((npcId == WAHKAN) && (cond == 2))
+				else if ((npcId == WAHKAN) && st.isCond(2))
 				{
 					htmltext = "31371-01.html";
 				}
@@ -135,7 +127,6 @@ public class Q00011_SecretMeetingWithKetraOrcs extends Quest
 		super(questId, name, descr);
 		
 		addStartNpc(CADMON);
-		
 		addTalkId(CADMON, LEON, WAHKAN);
 	}
 	
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00012_SecretMeetingWithVarkaSilenos/Q00012_SecretMeetingWithVarkaSilenos.java b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00012_SecretMeetingWithVarkaSilenos/Q00012_SecretMeetingWithVarkaSilenos.java
index 920889f418..c59fbea4ee 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00012_SecretMeetingWithVarkaSilenos/Q00012_SecretMeetingWithVarkaSilenos.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00012_SecretMeetingWithVarkaSilenos/Q00012_SecretMeetingWithVarkaSilenos.java
@@ -46,29 +46,24 @@ public class Q00012_SecretMeetingWithVarkaSilenos extends Quest
 			return htmltext;
 		}
 		
-		final int cond = st.getInt("cond");
 		switch (event)
 		{
 			case "31296-03.html":
-				st.set("cond", "1");
-				st.setState(State.STARTED);
-				st.playSound("ItemSound.quest_accept");
+				st.startQuest();
 				break;
 			case "31258-02.html":
-				if (cond == 1)
+				if (st.isCond(1))
 				{
-					st.set("cond", "2");
+					st.setCond(2, true);
 					st.giveItems(BOX, 1);
-					st.playSound("ItemSound.quest_middle");
 				}
 				break;
 			case "31378-02.html":
-				if ((cond == 2) && (st.hasQuestItems(BOX)))
+				if (st.isCond(2) && st.hasQuestItems(BOX))
 				{
 					st.takeItems(BOX, -1);
 					st.addExpAndSp(233125, 18142);
-					st.playSound("ItemSound.quest_finish");
-					st.exitQuest(false);
+					st.exitQuest(false, true);
 				}
 				else
 				{
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00013_ParcelDelivery/Q00013_ParcelDelivery.java b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00013_ParcelDelivery/Q00013_ParcelDelivery.java
index 2de95327b4..bf2d88c495 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00013_ParcelDelivery/Q00013_ParcelDelivery.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00013_ParcelDelivery/Q00013_ParcelDelivery.java
@@ -27,11 +27,9 @@ import com.l2jserver.gameserver.model.quest.State;
  */
 public class Q00013_ParcelDelivery extends Quest
 {
-	
 	// NPCs
 	private static final int FUNDIN = 31274;
 	private static final int VULCAN = 31539;
-	
 	// Items
 	private static final int PACKAGE = 7263;
 	
@@ -48,19 +46,16 @@ public class Q00013_ParcelDelivery extends Quest
 		switch (event)
 		{
 			case "31274-02.html":
-				st.set("cond", "1");
+				st.startQuest();
 				st.giveItems(PACKAGE, 1);
-				st.setState(State.STARTED);
-				st.playSound("ItemSound.quest_accept");
 				break;
 			case "31539-01.html":
-				if ((st.getInt("cond") == 1) && (st.hasQuestItems(PACKAGE)))
+				if (st.isCond(1) && st.hasQuestItems(PACKAGE))
 				{
 					st.takeItems(PACKAGE, -1);
 					st.giveItems(57, 157834);
 					st.addExpAndSp(589092, 58794);
-					st.playSound("ItemSound.quest_finish");
-					st.exitQuest(false);
+					st.exitQuest(false, true);
 				}
 				else
 				{
@@ -94,8 +89,7 @@ public class Q00013_ParcelDelivery extends Quest
 				}
 				break;
 			case State.STARTED:
-				final int cond = st.getInt("cond");
-				if (cond == 1)
+				if (st.isCond(1))
 				{
 					switch (npcId)
 					{
@@ -117,13 +111,8 @@ public class Q00013_ParcelDelivery extends Quest
 		super(questId, name, descr);
 		
 		addStartNpc(FUNDIN);
-		
 		addTalkId(FUNDIN, VULCAN);
-		
-		questItemIds = new int[]
-		{
-			PACKAGE
-		};
+		registerQuestItems(PACKAGE);
 	}
 	
 	public static void main(String[] args)
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00014_WhereaboutsOfTheArchaeologist/Q00014_WhereaboutsOfTheArchaeologist.java b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00014_WhereaboutsOfTheArchaeologist/Q00014_WhereaboutsOfTheArchaeologist.java
index 7bc9154d07..f29bbd3c50 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00014_WhereaboutsOfTheArchaeologist/Q00014_WhereaboutsOfTheArchaeologist.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00014_WhereaboutsOfTheArchaeologist/Q00014_WhereaboutsOfTheArchaeologist.java
@@ -48,19 +48,16 @@ public class Q00014_WhereaboutsOfTheArchaeologist extends Quest
 		switch (event)
 		{
 			case "31263-02.html":
-				st.set("cond", "1");
-				st.setState(State.STARTED);
+				st.startQuest();
 				st.giveItems(LETTER, 1);
-				st.playSound("ItemSound.quest_accept");
 				break;
 			case "31538-01.html":
-				if ((st.getInt("cond") == 1) && st.hasQuestItems(LETTER))
+				if (st.isCond(1) && st.hasQuestItems(LETTER))
 				{
 					st.takeItems(LETTER, -1);
 					st.giveItems(57, 136928);
 					st.addExpAndSp(325881, 32524);
-					st.playSound("ItemSound.quest_finish");
-					st.exitQuest(false);
+					st.exitQuest(false, true);
 				}
 				else
 				{
@@ -94,7 +91,7 @@ public class Q00014_WhereaboutsOfTheArchaeologist extends Quest
 				}
 				break;
 			case State.STARTED:
-				if (st.getInt("cond") == 1)
+				if (st.isCond(1))
 				{
 					switch (npcId)
 					{
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00015_SweetWhispers/Q00015_SweetWhispers.java b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00015_SweetWhispers/Q00015_SweetWhispers.java
index 931b2f7264..6a59f82720 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00015_SweetWhispers/Q00015_SweetWhispers.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00015_SweetWhispers/Q00015_SweetWhispers.java
@@ -43,27 +43,22 @@ public class Q00015_SweetWhispers extends Quest
 			return htmltext;
 		}
 		
-		final int cond = st.getInt("cond");
 		switch (event)
 		{
 			case "31302-01.html":
-				st.set("cond", "1");
-				st.setState(State.STARTED);
-				st.playSound("ItemSound.quest_accept");
+				st.startQuest();
 				break;
 			case "31518-01.html":
-				if (cond == 1)
+				if (st.isCond(1))
 				{
-					st.set("cond", "2");
-					st.playSound("ItemSound.quest_middle");
+					st.setCond(2);
 				}
 				break;
 			case "31517-01.html":
-				if (cond == 2)
+				if (st.isCond(2))
 				{
 					st.addExpAndSp(350531, 28204);
-					st.playSound("ItemSound.quest_finish");
-					st.exitQuest(false);
+					st.exitQuest(false, true);
 				}
 				break;
 		}
@@ -93,17 +88,16 @@ public class Q00015_SweetWhispers extends Quest
 				}
 				break;
 			case State.STARTED:
-				final int cond = st.getInt("cond");
 				switch (npcId)
 				{
 					case VLADIMIR:
-						if (cond == 1)
+						if (st.isCond(1))
 						{
 							htmltext = "31302-01a.html";
 						}
 						break;
 					case M_NECROMANCER:
-						switch (cond)
+						switch (st.getCond())
 						{
 							case 1:
 								htmltext = "31518-00.html";
@@ -114,7 +108,7 @@ public class Q00015_SweetWhispers extends Quest
 						}
 						break;
 					case HIERARCH:
-						if (cond == 2)
+						if (st.isCond(2))
 						{
 							htmltext = "31517-00.html";
 						}
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00016_TheComingDarkness/Q00016_TheComingDarkness.java b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00016_TheComingDarkness/Q00016_TheComingDarkness.java
index 94ffca3d37..b3b1a431c7 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00016_TheComingDarkness/Q00016_TheComingDarkness.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00016_TheComingDarkness/Q00016_TheComingDarkness.java
@@ -30,7 +30,6 @@ import com.l2jserver.gameserver.model.quest.State;
  */
 public class Q00016_TheComingDarkness extends Quest
 {
-	
 	// NPCs
 	private static final int HIERARCH = 31517;
 	private static final int EVIL_ALTAR_1 = 31512;
@@ -38,7 +37,6 @@ public class Q00016_TheComingDarkness extends Quest
 	private static final int EVIL_ALTAR_3 = 31514;
 	private static final int EVIL_ALTAR_4 = 31515;
 	private static final int EVIL_ALTAR_5 = 31516;
-	
 	// Items
 	private static final int CRYSTAL_OF_SEAL = 7167;
 	
@@ -52,14 +50,12 @@ public class Q00016_TheComingDarkness extends Quest
 			return htmltext;
 		}
 		
-		final int cond = st.getInt("cond");
+		final int cond = st.getCond();
 		switch (event)
 		{
 			case "31517-02.htm":
+				st.startQuest();
 				st.giveItems(CRYSTAL_OF_SEAL, 5);
-				st.set("cond", "1");
-				st.setState(State.STARTED);
-				st.playSound("ItemSound.quest_accept");
 				break;
 			case "31512-01.html":
 			case "31513-01.html":
@@ -70,8 +66,7 @@ public class Q00016_TheComingDarkness extends Quest
 				if ((cond == (npcId - 31511)) && st.hasQuestItems(CRYSTAL_OF_SEAL))
 				{
 					st.takeItems(CRYSTAL_OF_SEAL, 1);
-					st.set("cond", String.valueOf(cond + 1));
-					st.playSound("ItemSound.quest_middle");
+					st.setCond(cond + 1, true);
 				}
 				break;
 		}
@@ -109,10 +104,9 @@ public class Q00016_TheComingDarkness extends Quest
 				{
 					if (cond == 6)
 					{
-						htmltext = "31517-03.html";
 						st.addExpAndSp(865187, 69172);
-						st.playSound("ItemSound.quest_finish");
-						st.exitQuest(false);
+						st.exitQuest(false, true);
+						htmltext = "31517-03.html";
 					}
 					else
 					{
@@ -137,13 +131,8 @@ public class Q00016_TheComingDarkness extends Quest
 		super(questId, name, descr);
 		
 		addStartNpc(HIERARCH);
-		
 		addTalkId(HIERARCH, EVIL_ALTAR_1, EVIL_ALTAR_2, EVIL_ALTAR_3, EVIL_ALTAR_4, EVIL_ALTAR_5);
-		
-		questItemIds = new int[]
-		{
-			CRYSTAL_OF_SEAL
-		};
+		registerQuestItems(CRYSTAL_OF_SEAL);
 	}
 	
 	public static void main(String[] args)
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00017_LightAndDarkness/Q00017_LightAndDarkness.java b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00017_LightAndDarkness/Q00017_LightAndDarkness.java
index e89a03f9db..fda727a4be 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00017_LightAndDarkness/Q00017_LightAndDarkness.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00017_LightAndDarkness/Q00017_LightAndDarkness.java
@@ -56,10 +56,8 @@ public class Q00017_LightAndDarkness extends Quest
 			case "31517-02.html":
 				if (player.getLevel() >= 61)
 				{
+					st.startQuest();
 					st.giveItems(BLOOD_OF_SAINT, 4);
-					st.set("cond", "1");
-					st.setState(State.STARTED);
-					st.playSound("ItemSound.quest_accept");
 				}
 				else
 				{
@@ -70,14 +68,13 @@ public class Q00017_LightAndDarkness extends Quest
 			case "31509-02.html":
 			case "31510-02.html":
 			case "31511-02.html":
-				final int cond = st.getInt("cond");
+				final int cond = st.getCond();
 				final int npcId = Integer.parseInt(event.replace("-02.html", ""));
 				if ((cond == (npcId - 31507)) && st.hasQuestItems(BLOOD_OF_SAINT))
 				{
 					htmltext = npcId + "-01.html";
 					st.takeItems(BLOOD_OF_SAINT, 1);
-					st.set("cond", String.valueOf(cond + 1));
-					st.playSound("ItemSound.quest_middle");
+					st.setCond(cond + 1, true);
 				}
 				break;
 		}
@@ -116,10 +113,9 @@ public class Q00017_LightAndDarkness extends Quest
 						}
 						else
 						{
-							htmltext = "31517-03.html";
 							st.addExpAndSp(697040, 54887);
-							st.playSound("ItemSound.quest_finish");
-							st.exitQuest(false);
+							st.exitQuest(false, true);
+							htmltext = "31517-03.html";
 						}
 						break;
 					case SAINT_ALTAR_1:
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00018_MeetingWithTheGoldenRam/Q00018_MeetingWithTheGoldenRam.java b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00018_MeetingWithTheGoldenRam/Q00018_MeetingWithTheGoldenRam.java
index 73ed45ba6b..47f3de3fd4 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00018_MeetingWithTheGoldenRam/Q00018_MeetingWithTheGoldenRam.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00018_MeetingWithTheGoldenRam/Q00018_MeetingWithTheGoldenRam.java
@@ -92,9 +92,7 @@ public class Q00018_MeetingWithTheGoldenRam extends Quest
 			case "31314-03.html":
 				if (player.getLevel() >= 66)
 				{
-					st.set("cond", "1");
-					st.setState(State.STARTED);
-					st.playSound("ItemSound.quest_accept");
+					st.startQuest();
 				}
 				else
 				{
@@ -111,8 +109,7 @@ public class Q00018_MeetingWithTheGoldenRam extends Quest
 					st.giveAdena(40000, true);
 					st.takeItems(BOX, -1);
 					st.addExpAndSp(126668, 11731);
-					st.playSound("ItemSound.quest_finish");
-					st.exitQuest(false);
+					st.exitQuest(false, true);
 				}
 				break;
 		}
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00019_GoToThePastureland/Q00019_GoToThePastureland.java b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00019_GoToThePastureland/Q00019_GoToThePastureland.java
index d735e72a55..0b066dcf32 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00019_GoToThePastureland/Q00019_GoToThePastureland.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00019_GoToThePastureland/Q00019_GoToThePastureland.java
@@ -27,13 +27,12 @@ import com.l2jserver.gameserver.model.quest.State;
  */
 public class Q00019_GoToThePastureland extends Quest
 {
-	
 	// NPC
-	private static final int Vladimir = 31302;
-	private static final int Tunatun = 31537;
+	private static final int VLADIMIR = 31302;
+	private static final int TUNATUN = 31537;
 	// Items
-	private static final int Veal = 15532;
-	private static final int YoungWildBeastMeat = 7547;
+	private static final int VEAL = 15532;
+	private static final int YOUNG_WILD_BEAST_MEAT = 7547;
 	
 	@Override
 	public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
@@ -48,29 +47,25 @@ public class Q00019_GoToThePastureland extends Quest
 		
 		if (event.equalsIgnoreCase("31302-02.htm"))
 		{
-			st.set("cond", "1");
-			st.setState(State.STARTED);
-			st.playSound("ItemSound.quest_accept");
-			st.giveItems(Veal, 1);
+			st.startQuest();
+			st.giveItems(VEAL, 1);
 		}
 		else if (event.equalsIgnoreCase("31537-02.html"))
 		{
-			if (st.hasQuestItems(YoungWildBeastMeat))
+			if (st.hasQuestItems(YOUNG_WILD_BEAST_MEAT))
 			{
-				st.takeItems(YoungWildBeastMeat, -1);
+				st.takeItems(YOUNG_WILD_BEAST_MEAT, -1);
 				st.giveAdena(50000, true);
 				st.addExpAndSp(136766, 12688);
-				st.playSound("ItemSound.quest_finish");
-				st.exitQuest(false);
+				st.exitQuest(false, true);
 				htmltext = "31537-02.html";
 			}
-			else if (st.hasQuestItems(Veal))
+			else if (st.hasQuestItems(VEAL))
 			{
-				st.takeItems(Veal, -1);
+				st.takeItems(VEAL, -1);
 				st.giveAdena(147200, true);
 				st.addExpAndSp(385040, 75250);
-				st.playSound("ItemSound.quest_finish");
-				st.exitQuest(false);
+				st.exitQuest(false, true);
 				htmltext = "31537-02.html";
 			}
 			else
@@ -91,7 +86,7 @@ public class Q00019_GoToThePastureland extends Quest
 			return htmltext;
 		}
 		
-		if (npc.getNpcId() == Vladimir)
+		if (npc.getNpcId() == VLADIMIR)
 		{
 			switch (st.getState())
 			{
@@ -113,7 +108,7 @@ public class Q00019_GoToThePastureland extends Quest
 					break;
 			}
 		}
-		else if ((npc.getNpcId() == Tunatun) && (st.getInt("cond") == 1))
+		else if ((npc.getNpcId() == TUNATUN) && (st.getInt("cond") == 1))
 		{
 			htmltext = "31537-01.html";
 		}
@@ -124,14 +119,9 @@ public class Q00019_GoToThePastureland extends Quest
 	{
 		super(questId, name, descr);
 		
-		addStartNpc(Vladimir);
-		addTalkId(Vladimir, Tunatun);
-		
-		questItemIds = new int[]
-		{
-			Veal,
-			YoungWildBeastMeat
-		};
+		addStartNpc(VLADIMIR);
+		addTalkId(VLADIMIR, TUNATUN);
+		registerQuestItems(VEAL, YOUNG_WILD_BEAST_MEAT);
 	}
 	
 	public static void main(String[] args)
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00020_BringUpWithLove/Q00020_BringUpWithLove.java b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00020_BringUpWithLove/Q00020_BringUpWithLove.java
index 894ca447b4..6acc075645 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00020_BringUpWithLove/Q00020_BringUpWithLove.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00020_BringUpWithLove/Q00020_BringUpWithLove.java
@@ -50,9 +50,7 @@ public class Q00020_BringUpWithLove extends Quest
 		{
 			if (event.equalsIgnoreCase("31537-12.htm"))
 			{
-				st.setState(State.STARTED);
-				st.set("cond", "1");
-				st.playSound("ItemSound.quest_accept");
+				st.startQuest();
 			}
 			else if (event.equalsIgnoreCase("31537-03.htm"))
 			{
@@ -66,8 +64,7 @@ public class Q00020_BringUpWithLove extends Quest
 			{
 				st.takeItems(_jewel, -1);
 				st.giveItems(_crystal, 1);
-				st.playSound("ItemSound.quest_finish");
-				st.exitQuest(false);
+				st.exitQuest(false, true);
 			}
 			else if (event.equalsIgnoreCase("31537-21.html"))
 			{
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00027_ChestCaughtWithABaitOfWind/Q00027_ChestCaughtWithABaitOfWind.java b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00027_ChestCaughtWithABaitOfWind/Q00027_ChestCaughtWithABaitOfWind.java
index ce1c020c31..d05d21b7e8 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00027_ChestCaughtWithABaitOfWind/Q00027_ChestCaughtWithABaitOfWind.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00027_ChestCaughtWithABaitOfWind/Q00027_ChestCaughtWithABaitOfWind.java
@@ -52,28 +52,24 @@ public class Q00027_ChestCaughtWithABaitOfWind extends Quest
 		switch (event)
 		{
 			case "31570-03.htm":
-				st.set("cond", "1");
-				st.setState(State.STARTED);
-				st.playSound("ItemSound.quest_accept");
+				st.startQuest();
 				break;
 			case "31570-05.htm":
 				if ((st.getInt("cond") == 1) && (st.hasQuestItems(BLUE_TREASURE_BOX)))
 				{
 					htmltext = "31570-06.htm";
-					st.set("cond", "2");
+					st.setCond(2, true);
 					st.giveItems(STRANGE_BLUESPRINT, 1);
 					st.takeItems(BLUE_TREASURE_BOX, -1);
-					st.playSound("ItemSound.quest_middle");
 				}
 				break;
 			case "31434-02.htm":
 				if ((st.getInt("cond") == 2) && (st.hasQuestItems(STRANGE_BLUESPRINT)))
 				{
-					htmltext = "31434-01.htm";
 					st.giveItems(BLACK_PEARL_RING, 1);
 					st.takeItems(STRANGE_BLUESPRINT, -1);
-					st.playSound("ItemSound.quest_finish");
-					st.exitQuest(false);
+					st.exitQuest(false, true);
+					htmltext = "31434-01.htm";
 				}
 				break;
 		
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00028_ChestCaughtWithABaitOfIcyAir/Q00028_ChestCaughtWithABaitOfIcyAir.java b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00028_ChestCaughtWithABaitOfIcyAir/Q00028_ChestCaughtWithABaitOfIcyAir.java
index 01f6e8cfef..132074a647 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00028_ChestCaughtWithABaitOfIcyAir/Q00028_ChestCaughtWithABaitOfIcyAir.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00028_ChestCaughtWithABaitOfIcyAir/Q00028_ChestCaughtWithABaitOfIcyAir.java
@@ -52,28 +52,24 @@ public class Q00028_ChestCaughtWithABaitOfIcyAir extends Quest
 		switch (event)
 		{
 			case "31572-04.htm":
-				st.set("cond", "1");
-				st.setState(State.STARTED);
-				st.playSound("ItemSound.quest_accept");
+				st.startQuest();
 				break;
 			case "31572-08.htm":
 				if ((st.getInt("cond") == 1) && (st.hasQuestItems(YELLOW_TREASURE_BOX)))
 				{
-					htmltext = "31572-07.htm";
-					st.set("cond", "2");
 					st.giveItems(KIKIS_LETTER, 1);
 					st.takeItems(YELLOW_TREASURE_BOX, -1);
-					st.playSound("ItemSound.quest_middle");
+					st.setCond(2, true);
+					htmltext = "31572-07.htm";
 				}
 				break;
 			case "31442-03.htm":
 				if ((st.getInt("cond") == 2) && (st.hasQuestItems(KIKIS_LETTER)))
 				{
-					htmltext = "31442-02.htm";
 					st.giveItems(ELVEN_RING, 1);
 					st.takeItems(KIKIS_LETTER, -1);
-					st.playSound("ItemSound.quest_finish");
-					st.exitQuest(false);
+					st.exitQuest(false, true);
+					htmltext = "31442-02.htm";
 				}
 				break;
 		
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00029_ChestCaughtWithABaitOfEarth/Q00029_ChestCaughtWithABaitOfEarth.java b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00029_ChestCaughtWithABaitOfEarth/Q00029_ChestCaughtWithABaitOfEarth.java
index 5d7102df4d..a67da2d53a 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00029_ChestCaughtWithABaitOfEarth/Q00029_ChestCaughtWithABaitOfEarth.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00029_ChestCaughtWithABaitOfEarth/Q00029_ChestCaughtWithABaitOfEarth.java
@@ -52,28 +52,24 @@ public class Q00029_ChestCaughtWithABaitOfEarth extends Quest
 		switch (event)
 		{
 			case "31574-04.htm":
-				st.set("cond", "1");
-				st.setState(State.STARTED);
-				st.playSound("ItemSound.quest_accept");
+				st.startQuest();
 				break;
 			case "31574-08.htm":
 				if ((st.getInt("cond") == 1) && (st.hasQuestItems(PURPLE_TREASURE_BOX)))
 				{
-					htmltext = "31574-07.htm";
-					st.set("cond", "2");
 					st.giveItems(SMALL_GLASS_BOX, 1);
 					st.takeItems(PURPLE_TREASURE_BOX, -1);
-					st.playSound("ItemSound.quest_middle");
+					st.setCond(2, true);
+					htmltext = "31574-07.htm";
 				}
 				break;
 			case "30909-03.htm":
 				if ((st.getInt("cond") == 2) && (st.hasQuestItems(SMALL_GLASS_BOX)))
 				{
-					htmltext = "30909-02.htm";
 					st.giveItems(PLATED_LEATHER_GLOVES, 1);
 					st.takeItems(SMALL_GLASS_BOX, -1);
-					st.playSound("ItemSound.quest_finish");
-					st.exitQuest(false);
+					st.exitQuest(false, true);
+					htmltext = "30909-02.htm";
 				}
 				break;
 		
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00030_ChestCaughtWithABaitOfFire/Q00030_ChestCaughtWithABaitOfFire.java b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00030_ChestCaughtWithABaitOfFire/Q00030_ChestCaughtWithABaitOfFire.java
index a33efecaa0..afcf9f0435 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00030_ChestCaughtWithABaitOfFire/Q00030_ChestCaughtWithABaitOfFire.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00030_ChestCaughtWithABaitOfFire/Q00030_ChestCaughtWithABaitOfFire.java
@@ -52,28 +52,24 @@ public class Q00030_ChestCaughtWithABaitOfFire extends Quest
 		switch (event)
 		{
 			case "31577-02.htm":
-				st.set("cond", "1");
-				st.setState(State.STARTED);
-				st.playSound("ItemSound.quest_accept");
+				st.startQuest();
 				break;
 			case "31577-04a.htm":
 				if ((st.getInt("cond") == 1) && (st.hasQuestItems(RED_TREASURE_BOX)))
 				{
-					htmltext = "31577-04.htm";
-					st.set("cond", "2");
 					st.giveItems(RUKAL_MUSICAL, 1);
 					st.takeItems(RED_TREASURE_BOX, -1);
-					st.playSound("ItemSound.quest_middle");
+					st.setCond(2, true);
+					htmltext = "31577-04.htm";
 				}
 				break;
 			case "30629-02.htm":
 				if ((st.getInt("cond") == 2) && (st.hasQuestItems(RUKAL_MUSICAL)))
 				{
-					htmltext = "30629-03.htm";
 					st.giveItems(PROTECTION_NECKLACE, 1);
 					st.takeItems(RUKAL_MUSICAL, -1);
-					st.playSound("ItemSound.quest_finish");
-					st.exitQuest(false);
+					st.exitQuest(false, true);
+					htmltext = "30629-03.htm";
 				}
 				break;
 		
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00042_HelpTheUncle/Q00042_HelpTheUncle.java b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00042_HelpTheUncle/Q00042_HelpTheUncle.java
index 0330a28c77..a5383ead17 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00042_HelpTheUncle/Q00042_HelpTheUncle.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00042_HelpTheUncle/Q00042_HelpTheUncle.java
@@ -30,11 +30,9 @@ public class Q00042_HelpTheUncle extends Quest
 	// NPCs
 	private static final int WATERS = 30828;
 	private static final int SOPHYA = 30735;
-	
 	// Monster
 	private static final int MONSTER_EYE_DESTROYER = 20068;
 	private static final int MONSTER_EYE_GAZER = 20266;
-	
 	// Items
 	private static final int TRIDENT = 291;
 	private static final int MAP_PIECE = 7548;
@@ -174,7 +172,7 @@ public class Q00042_HelpTheUncle extends Quest
 			}
 			else
 			{
-				st.playSound("ItemSound.quest_itemget");
+				st.playSound(QuestSound.ITEMSOUND_QUEST_ITEMGET);
 			}
 		}
 		return super.onKill(npc, player, isPet);
@@ -186,12 +184,7 @@ public class Q00042_HelpTheUncle extends Quest
 		addStartNpc(WATERS);
 		addTalkId(WATERS, SOPHYA);
 		addKillId(MONSTER_EYE_DESTROYER, MONSTER_EYE_GAZER);
-		
-		questItemIds = new int[]
-		{
-			MAP,
-			MAP_PIECE
-		};
+		registerQuestItems(MAP, MAP_PIECE);
 	}
 	
 	public static void main(String[] args)
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00043_HelpTheSister/Q00043_HelpTheSister.java b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00043_HelpTheSister/Q00043_HelpTheSister.java
index 55b192ed23..4354a09d07 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00043_HelpTheSister/Q00043_HelpTheSister.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00043_HelpTheSister/Q00043_HelpTheSister.java
@@ -30,11 +30,9 @@ public class Q00043_HelpTheSister extends Quest
 	// NPCs
 	private static final int COOPER = 30829;
 	private static final int GALLADUCCI = 30097;
-	
 	// Monster
 	private static final int SPECTER = 20171;
 	private static final int SORROW_MAIDEN = 20197;
-	
 	// Items
 	private static final int CRAFTED_DAGGER = 220;
 	private static final int MAP_PIECE = 7550;
@@ -103,7 +101,6 @@ public class Q00043_HelpTheSister extends Quest
 	{
 		String htmltext = getNoQuestMsg(player);
 		final QuestState st = player.getQuestState(getName());
-		
 		if (st == null)
 		{
 			return htmltext;
@@ -174,7 +171,7 @@ public class Q00043_HelpTheSister extends Quest
 			}
 			else
 			{
-				st.playSound("ItemSound.quest_itemget");
+				st.playSound(QuestSound.ITEMSOUND_QUEST_ITEMGET);
 			}
 		}
 		return super.onKill(npc, player, isPet);
@@ -186,12 +183,7 @@ public class Q00043_HelpTheSister extends Quest
 		addStartNpc(COOPER);
 		addTalkId(COOPER, GALLADUCCI);
 		addKillId(SORROW_MAIDEN, SPECTER);
-		
-		questItemIds = new int[]
-		{
-			MAP,
-			MAP_PIECE
-		};
+		registerQuestItems(MAP, MAP_PIECE);
 	}
 	
 	public static void main(String[] args)
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00044_HelpTheSon/Q00044_HelpTheSon.java b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00044_HelpTheSon/Q00044_HelpTheSon.java
index 98377b6baf..d05ad8d4d7 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00044_HelpTheSon/Q00044_HelpTheSon.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00044_HelpTheSon/Q00044_HelpTheSon.java
@@ -30,12 +30,10 @@ public class Q00044_HelpTheSon extends Quest
 	// NPCs
 	private static final int LUNDY = 30827;
 	private static final int DRIKUS = 30505;
-	
 	// Monster
 	private static final int MAILLE_GUARD = 20921;
 	private static final int MAILLE_SCOUT = 20920;
 	private static final int MAILLE_LIZARDMAN = 20919;
-	
 	// Items
 	private static final int WORK_HAMMER = 168;
 	private static final int GEMSTONE_FRAGMENT = 7552;
@@ -105,7 +103,6 @@ public class Q00044_HelpTheSon extends Quest
 	{
 		String htmltext = getNoQuestMsg(player);
 		final QuestState st = player.getQuestState(getName());
-		
 		if (st == null)
 		{
 			return htmltext;
@@ -165,8 +162,7 @@ public class Q00044_HelpTheSon extends Quest
 	@Override
 	public String onKill(L2Npc npc, L2PcInstance player, boolean isPet)
 	{
-		QuestState st = player.getQuestState(getName());
-		
+		final QuestState st = player.getQuestState(getName());
 		if ((st != null) && st.isCond(2))
 		{
 			st.giveItems(GEMSTONE_FRAGMENT, 1);
@@ -176,7 +172,7 @@ public class Q00044_HelpTheSon extends Quest
 			}
 			else
 			{
-				st.playSound("ItemSound.quest_itemget");
+				st.playSound(QuestSound.ITEMSOUND_QUEST_ITEMGET);
 			}
 		}
 		return super.onKill(npc, player, isPet);
@@ -188,12 +184,7 @@ public class Q00044_HelpTheSon extends Quest
 		addStartNpc(LUNDY);
 		addTalkId(LUNDY, DRIKUS);
 		addKillId(MAILLE_GUARD, MAILLE_LIZARDMAN, MAILLE_SCOUT);
-		
-		questItemIds = new int[]
-		{
-			GEMSTONE,
-			GEMSTONE_FRAGMENT
-		};
+		registerQuestItems(GEMSTONE, GEMSTONE_FRAGMENT);
 	}
 	
 	public static void main(String[] args)
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00050_LanoscosSpecialBait/Q00050_LanoscosSpecialBait.java b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00050_LanoscosSpecialBait/Q00050_LanoscosSpecialBait.java
index 373cff54aa..60595099b5 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00050_LanoscosSpecialBait/Q00050_LanoscosSpecialBait.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00050_LanoscosSpecialBait/Q00050_LanoscosSpecialBait.java
@@ -31,7 +31,6 @@ public class Q00050_LanoscosSpecialBait extends Quest
 	// NPCs
 	private static final int LANOSCO = 31570;
 	private static final int SINGING_WIND = 21026;
-	
 	// Items
 	private static final int ESSENCE_OF_WIND = 7621;
 	private static final int WIND_FISHING_LURE = 7610;
@@ -106,7 +105,7 @@ public class Q00050_LanoscosSpecialBait extends Quest
 			if (getRandom(100) < chance)
 			{
 				st.rewardItems(ESSENCE_OF_WIND, 1);
-				st.playSound("ItemSound.quest_itemget");
+				st.playSound(QuestSound.ITEMSOUND_QUEST_ITEMGET);
 			}
 		}
 		
@@ -126,10 +125,7 @@ public class Q00050_LanoscosSpecialBait extends Quest
 		addStartNpc(LANOSCO);
 		addTalkId(LANOSCO);
 		addKillId(SINGING_WIND);
-		questItemIds = new int[]
-		{
-			ESSENCE_OF_WIND
-		};
+		registerQuestItems(ESSENCE_OF_WIND);
 	}
 	
 	public static void main(String[] args)
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00051_OFullesSpecialBait/Q00051_OFullesSpecialBait.java b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00051_OFullesSpecialBait/Q00051_OFullesSpecialBait.java
index b2fbd29e78..fb01acb067 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00051_OFullesSpecialBait/Q00051_OFullesSpecialBait.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00051_OFullesSpecialBait/Q00051_OFullesSpecialBait.java
@@ -31,7 +31,6 @@ public class Q00051_OFullesSpecialBait extends Quest
 	// NPCs
 	private static final int OFULLE = 31572;
 	private static final int FETTERED_SOUL = 20552;
-	
 	// Items
 	private static final int LOST_BAIT = 7622;
 	private static final int ICY_AIR_LURE = 7611;
@@ -106,7 +105,7 @@ public class Q00051_OFullesSpecialBait extends Quest
 			if (getRandom(100) < chance)
 			{
 				st.rewardItems(LOST_BAIT, 1);
-				st.playSound("ItemSound.quest_itemget");
+				st.playSound(QuestSound.ITEMSOUND_QUEST_ITEMGET);
 			}
 		}
 		
@@ -126,10 +125,7 @@ public class Q00051_OFullesSpecialBait extends Quest
 		addStartNpc(OFULLE);
 		addTalkId(OFULLE);
 		addKillId(FETTERED_SOUL);
-		questItemIds = new int[]
-		{
-			LOST_BAIT
-		};
+		registerQuestItems(LOST_BAIT);
 	}
 	
 	public static void main(String[] args)
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00052_WilliesSpecialBait/Q00052_WilliesSpecialBait.java b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00052_WilliesSpecialBait/Q00052_WilliesSpecialBait.java
index bffc333f6f..97535b74a5 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00052_WilliesSpecialBait/Q00052_WilliesSpecialBait.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00052_WilliesSpecialBait/Q00052_WilliesSpecialBait.java
@@ -31,7 +31,6 @@ public class Q00052_WilliesSpecialBait extends Quest
 	// NPCs
 	private static final int WILLIE = 31574;
 	private static final int TARLK_BASILISK = 20573;
-	
 	// Items
 	private static final int TARLK_EYE = 7623;
 	private static final int EARTH_FISHING_LURE = 7612;
@@ -46,7 +45,6 @@ public class Q00052_WilliesSpecialBait extends Quest
 		}
 		
 		String htmltext = event;
-		
 		switch (event)
 		{
 			case "31574-03.htm":
@@ -99,23 +97,20 @@ public class Q00052_WilliesSpecialBait extends Quest
 		}
 		
 		final QuestState st = partyMember.getQuestState(getName());
-		
 		if (st.getQuestItemsCount(TARLK_EYE) < 100)
 		{
 			float chance = 33 * Config.RATE_QUEST_DROP;
 			if (getRandom(100) < chance)
 			{
 				st.rewardItems(TARLK_EYE, 1);
-				st.playSound("ItemSound.quest_itemget");
+				st.playSound(QuestSound.ITEMSOUND_QUEST_ITEMGET);
 			}
 		}
 		
 		if (st.getQuestItemsCount(TARLK_EYE) >= 100)
 		{
 			st.setCond(2, true);
-			
 		}
-		
 		return super.onKill(npc, player, isPet);
 	}
 	
@@ -126,10 +121,7 @@ public class Q00052_WilliesSpecialBait extends Quest
 		addStartNpc(WILLIE);
 		addTalkId(WILLIE);
 		addKillId(TARLK_BASILISK);
-		questItemIds = new int[]
-		{
-			TARLK_EYE
-		};
+		registerQuestItems(TARLK_EYE);
 	}
 	
 	public static void main(String[] args)
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00053_LinnaeusSpecialBait/Q00053_LinnaeusSpecialBait.java b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00053_LinnaeusSpecialBait/Q00053_LinnaeusSpecialBait.java
index 1cde7099bb..d025acc560 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00053_LinnaeusSpecialBait/Q00053_LinnaeusSpecialBait.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00053_LinnaeusSpecialBait/Q00053_LinnaeusSpecialBait.java
@@ -32,12 +32,11 @@ public class Q00053_LinnaeusSpecialBait extends Quest
 	// NPCs
 	private static final int LINNAEUS = 31577;
 	private static final int CRIMSON_DRAKE = 20670;
-	
 	// Items
 	private static final int CRIMSON_DRAKE_HEART = 7624;
 	private static final int FLAMING_FISHING_LURE = 7613;
 	
-	// Custom setting: wether or not to check for fishing skill level?
+	// Custom setting: whether or not to check for fishing skill level?
 	// default False to require fishing skill level, any other value to ignore fishing
 	// and evaluate char level only.
 	private static final boolean ALT_IGNORE_FISHING = false;
@@ -115,7 +114,7 @@ public class Q00053_LinnaeusSpecialBait extends Quest
 			if (getRandom(100) < chance)
 			{
 				st.rewardItems(CRIMSON_DRAKE_HEART, 1);
-				st.playSound("ItemSound.quest_itemget");
+				st.playSound(QuestSound.ITEMSOUND_QUEST_ITEMGET);
 			}
 		}
 		
@@ -151,10 +150,7 @@ public class Q00053_LinnaeusSpecialBait extends Quest
 		addStartNpc(LINNAEUS);
 		addTalkId(LINNAEUS);
 		addKillId(CRIMSON_DRAKE);
-		questItemIds = new int[]
-		{
-			CRIMSON_DRAKE_HEART
-		};
+		registerQuestItems(CRIMSON_DRAKE_HEART);
 	}
 	
 	public static void main(String[] args)
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00125_TheNameOfEvil1/Q00125_TheNameOfEvil1.java b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00125_TheNameOfEvil1/Q00125_TheNameOfEvil1.java
index 028b0fdd76..4437738c8a 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00125_TheNameOfEvil1/Q00125_TheNameOfEvil1.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00125_TheNameOfEvil1/Q00125_TheNameOfEvil1.java
@@ -457,7 +457,7 @@ public class Q00125_TheNameOfEvil1 extends Quest
 				if (getRandom(1000) < chance)
 				{
 					st.giveItems(ORNITHOMIMUS_CLAW, 1);
-					st.playSound("ItemSound.quest_itemget");
+					st.playSound(QuestSound.ITEMSOUND_QUEST_ITEMGET);
 				}
 			}
 		}
@@ -469,7 +469,7 @@ public class Q00125_TheNameOfEvil1 extends Quest
 				if (getRandom(1000) < chance)
 				{
 					st.giveItems(DEINONYCHUS_BONE, 1);
-					st.playSound("ItemSound.quest_itemget");
+					st.playSound(QuestSound.ITEMSOUND_QUEST_ITEMGET);
 				}
 			}
 		}
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00132_MatrasCuriosity/Q00132_MatrasCuriosity.java b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00132_MatrasCuriosity/Q00132_MatrasCuriosity.java
index d392ae0928..8453732f99 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00132_MatrasCuriosity/Q00132_MatrasCuriosity.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00132_MatrasCuriosity/Q00132_MatrasCuriosity.java
@@ -18,7 +18,6 @@ import com.l2jserver.gameserver.model.actor.L2Npc;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.quest.Quest;
 import com.l2jserver.gameserver.model.quest.QuestState;
-import com.l2jserver.gameserver.model.quest.State;
 
 /**
  * Matras' Curiosity (132)
@@ -26,12 +25,10 @@ import com.l2jserver.gameserver.model.quest.State;
  */
 public final class Q00132_MatrasCuriosity extends Quest
 {
-	
 	// NPCs
 	private static final int MATRAS = 32245;
 	private static final int DEMON_PRINCE = 25540;
 	private static final int RANKU = 25542;
-	
 	// Items
 	private static final int FIRE = 10521;
 	private static final int WATER = 10522;
@@ -57,11 +54,9 @@ public final class Q00132_MatrasCuriosity extends Quest
 		{
 			if (st.isCreated())
 			{
-				st.setState(State.STARTED);
-				st.set("cond", "1");
+				st.startQuest();
 				st.set("rewarded_prince", "1");
 				st.set("rewarded_ranku", "1");
-				st.playSound("ItemSound.quest_accept");
 			}
 			else
 			{
@@ -78,8 +73,7 @@ public final class Q00132_MatrasCuriosity extends Quest
 			st.giveItems(WIND, 1);
 			st.giveItems(DARKNESS, 1);
 			st.giveItems(DIVINITY, 1);
-			st.playSound("ItemSound.quest_finish");
-			st.exitQuest(false);
+			st.exitQuest(false, true);
 		}
 		return htmltext;
 	}
@@ -112,8 +106,7 @@ public final class Q00132_MatrasCuriosity extends Quest
 					{
 						st.takeItems(BLUEPRINT_RANKU, -1);
 						st.takeItems(BLUEPRINT_PRINCE, -1);
-						st.set("cond", "3");
-						st.playSound("ItemSound.quest_middle");
+						st.setCond(3, true);
 						htmltext = "32245-05.htm";
 					}
 					else
@@ -145,12 +138,11 @@ public final class Q00132_MatrasCuriosity extends Quest
 					
 					if (st.hasQuestItems(BLUEPRINT_RANKU))
 					{
-						st.set("cond", "2");
-						st.playSound("ItemSound.quest_middle");
+						st.setCond(2, true);
 					}
 					else
 					{
-						st.playSound("ItemSound.quest_itemget");
+						st.playSound(QuestSound.ITEMSOUND_QUEST_ITEMGET);
 					}
 				}
 				break;
@@ -164,12 +156,11 @@ public final class Q00132_MatrasCuriosity extends Quest
 					
 					if (st.hasQuestItems(BLUEPRINT_PRINCE))
 					{
-						st.set("cond", "2");
-						st.playSound("ItemSound.quest_middle");
+						st.setCond(2, true);
 					}
 					else
 					{
-						st.playSound("ItemSound.quest_itemget");
+						st.playSound(QuestSound.ITEMSOUND_QUEST_ITEMGET);
 					}
 				}
 				break;
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00137_TempleChampionPart1/Q00137_TempleChampionPart1.java b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00137_TempleChampionPart1/Q00137_TempleChampionPart1.java
index d758cea8ca..d1be2814c5 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00137_TempleChampionPart1/Q00137_TempleChampionPart1.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00137_TempleChampionPart1/Q00137_TempleChampionPart1.java
@@ -27,7 +27,6 @@ public class Q00137_TempleChampionPart1 extends Quest
 {
 	// NPCs
 	private static final int SYLVAIN = 30070;
-	
 	private static final int MOBS[] =
 	{
 		20083, // Granite Golem
@@ -37,7 +36,6 @@ public class Q00137_TempleChampionPart1 extends Quest
 		20201, // Ghoul
 		20202, // Dead Seeker
 	};
-	
 	// Items
 	private static final int FRAGMENT = 10340;
 	private static final int EXECUTOR = 10334;
@@ -147,7 +145,7 @@ public class Q00137_TempleChampionPart1 extends Quest
 			}
 			else
 			{
-				st.playSound("ItemSound.quest_itemget");
+				st.playSound(QuestSound.ITEMSOUND_QUEST_ITEMGET);
 			}
 		}
 		return super.onKill(npc, player, isPet);
@@ -159,10 +157,7 @@ public class Q00137_TempleChampionPart1 extends Quest
 		addStartNpc(SYLVAIN);
 		addTalkId(SYLVAIN);
 		addKillId(MOBS);
-		questItemIds = new int[]
-		{
-			FRAGMENT
-		};
+		registerQuestItems(FRAGMENT);
 	}
 	
 	public static void main(String[] args)
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00138_TempleChampionPart2/Q00138_TempleChampionPart2.java b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00138_TempleChampionPart2/Q00138_TempleChampionPart2.java
index 90647542f7..ec667a52d8 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00138_TempleChampionPart2/Q00138_TempleChampionPart2.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00138_TempleChampionPart2/Q00138_TempleChampionPart2.java
@@ -30,7 +30,6 @@ public class Q00138_TempleChampionPart2 extends Quest
 	private static final int PUPINA = 30118;
 	private static final int ANGUS = 30474;
 	private static final int SLA = 30666;
-	
 	private static final int MOBS[] =
 	{
 		20176, // Wyrm
@@ -38,7 +37,6 @@ public class Q00138_TempleChampionPart2 extends Quest
 		20551, // Road Scavenger
 		20552, // Fettered Soul
 	};
-	
 	// Items
 	private static final int MANIFESTO = 10340;
 	private static final int RELIC = 10340;
@@ -220,11 +218,11 @@ public class Q00138_TempleChampionPart2 extends Quest
 			st.giveItems(RELIC, 1);
 			if (st.getQuestItemsCount(RELIC) >= 10)
 			{
-				st.playSound("ItemSound.quest_middle");
+				st.playSound(QuestSound.ITEMSOUND_QUEST_MIDDLE);
 			}
 			else
 			{
-				st.playSound("ItemSound.quest_itemget");
+				st.playSound(QuestSound.ITEMSOUND_QUEST_ITEMGET);
 			}
 		}
 		return super.onKill(npc, player, isPet);
@@ -236,13 +234,7 @@ public class Q00138_TempleChampionPart2 extends Quest
 		addStartNpc(SYLVAIN);
 		addTalkId(SYLVAIN, PUPINA, ANGUS, SLA);
 		addKillId(MOBS);
-		questItemIds = new int[]
-		{
-			MANIFESTO,
-			RELIC,
-			ANGUS_REC,
-			PUPINA_REC
-		};
+		registerQuestItems(MANIFESTO, RELIC, ANGUS_REC, PUPINA_REC);
 	}
 	
 	public static void main(String[] args)
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00146_TheZeroHour/Q00146_TheZeroHour.java b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00146_TheZeroHour/Q00146_TheZeroHour.java
index bdfdfde904..b73ce113a3 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00146_TheZeroHour/Q00146_TheZeroHour.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00146_TheZeroHour/Q00146_TheZeroHour.java
@@ -28,11 +28,11 @@ import com.l2jserver.gameserver.model.quest.State;
  */
 public class Q00146_TheZeroHour extends Quest
 {
-	// Npc
-	private static final int Kahman = 31554;
-	private static final int QueenShyeed = 25671;
+	// NPC
+	private static final int KAHMAN = 31554;
+	private static final int QUEEN_SHYEED = 25671;
 	// Item
-	private static final int Fang = 14859;
+	private static final int FANG = 14859;
 	
 	@Override
 	public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
@@ -45,9 +45,7 @@ public class Q00146_TheZeroHour extends Quest
 		
 		if (event.equalsIgnoreCase("31554-03.htm"))
 		{
-			st.set("cond", "1");
-			st.setState(State.STARTED);
-			st.playSound("ItemSound.quest_accept");
+			st.startQuest();
 		}
 		return event;
 	}
@@ -83,7 +81,7 @@ public class Q00146_TheZeroHour extends Quest
 				}
 				break;
 			case State.STARTED:
-				if (st.getInt("cond") == 1)
+				if (st.isCond(1))
 				{
 					htmltext = "31554-06.html";
 				}
@@ -91,9 +89,8 @@ public class Q00146_TheZeroHour extends Quest
 				{
 					st.giveItems(14849, 1);
 					st.addExpAndSp(154616, 12500);
-					st.takeItems(Fang, 1);
-					st.playSound("ItemSound.quest_finish");
-					st.exitQuest(false);
+					st.takeItems(FANG, 1);
+					st.exitQuest(false, true);
 					htmltext = "31554-05.html";
 				}
 				break;
@@ -107,17 +104,15 @@ public class Q00146_TheZeroHour extends Quest
 	@Override
 	public String onKill(L2Npc npc, L2PcInstance player, boolean isPet)
 	{
-		L2PcInstance partyMember = getRandomPartyMember(player, "1");
-		if (partyMember == null)
+		final L2PcInstance partyMember = getRandomPartyMember(player, "1");
+		if (partyMember != null)
 		{
-			return null;
-		}
-		QuestState st = partyMember.getQuestState(getName());
-		if (!st.hasQuestItems(Fang))
-		{
-			st.giveItems(Fang, 1);
-			st.set("cond", "2");
-			st.playSound("ItemSound.quest_middle");
+			final QuestState st = partyMember.getQuestState(getName());
+			if (!st.hasQuestItems(FANG))
+			{
+				st.giveItems(FANG, 1);
+				st.setCond(2, true);
+			}
 		}
 		return null;
 	}
@@ -125,14 +120,10 @@ public class Q00146_TheZeroHour extends Quest
 	public Q00146_TheZeroHour(int questId, String name, String descr)
 	{
 		super(questId, name, descr);
-		addStartNpc(Kahman);
-		addTalkId(Kahman);
-		addKillId(QueenShyeed);
-		
-		questItemIds = new int[]
-		{
-			Fang
-		};
+		addStartNpc(KAHMAN);
+		addTalkId(KAHMAN);
+		addKillId(QUEEN_SHYEED);
+		registerQuestItems(FANG);
 	}
 	
 	public static void main(String[] args)
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00147_PathtoBecominganEliteMercenary/Q00147_PathtoBecominganEliteMercenary.java b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00147_PathtoBecominganEliteMercenary/Q00147_PathtoBecominganEliteMercenary.java
index 58cf660781..af9c855774 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00147_PathtoBecominganEliteMercenary/Q00147_PathtoBecominganEliteMercenary.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00147_PathtoBecominganEliteMercenary/Q00147_PathtoBecominganEliteMercenary.java
@@ -66,9 +66,7 @@ public class Q00147_PathtoBecominganEliteMercenary extends Quest
 		}
 		else if (event.equalsIgnoreCase("elite-04.htm"))
 		{
-			st.setState(State.STARTED);
-			st.set("cond", "1");
-			st.playSound("ItemSound.quest_accept");
+			st.startQuest();
 		}
 		return htmltext;
 	}
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00148_PathtoBecominganExaltedMercenary/Q00148_PathtoBecominganExaltedMercenary.java b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00148_PathtoBecominganExaltedMercenary/Q00148_PathtoBecominganExaltedMercenary.java
index e388e1d63a..ad80acf76d 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00148_PathtoBecominganExaltedMercenary/Q00148_PathtoBecominganExaltedMercenary.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00148_PathtoBecominganExaltedMercenary/Q00148_PathtoBecominganExaltedMercenary.java
@@ -62,9 +62,7 @@ public class Q00148_PathtoBecominganExaltedMercenary extends Quest
 		}
 		else if (event.equalsIgnoreCase("exalted-03.htm"))
 		{
-			st.setState(State.STARTED);
-			st.set("cond", "1");
-			st.playSound("ItemSound.quest_accept");
+			st.startQuest();
 		}
 		return htmltext;
 	}
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00153_DeliverGoods/Q00153_DeliverGoods.java b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00153_DeliverGoods/Q00153_DeliverGoods.java
index a4d73c663d..fa795723ca 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00153_DeliverGoods/Q00153_DeliverGoods.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00153_DeliverGoods/Q00153_DeliverGoods.java
@@ -28,64 +28,48 @@ import com.l2jserver.gameserver.model.quest.State;
 public class Q00153_DeliverGoods extends Quest
 {
 	// NPCs
-	private static final int JacksonId = 30002;
-	private static final int SilviaId = 30003;
-	private static final int ArnoldId = 30041;
-	private static final int RantId = 30054;
+	private static final int JACKSON_ID = 30002;
+	private static final int SILVIA_ID = 30003;
+	private static final int ARNOLD_ID = 30041;
+	private static final int RANT_ID = 30054;
 	// ITEMs
-	private static final int DeliveryListId = 1012;
-	private static final int HeavyWoodBoxId = 1013;
-	private static final int ClothBundleId = 1014;
-	private static final int ClayPotId = 1015;
-	private static final int JacksonsReceipt = 1016;
-	private static final int SilviasReceipt = 1017;
-	private static final int RantsReceipt = 1018;
+	private static final int DELIVERY_LIST_ID = 1012;
+	private static final int HEAVY_WOOD_BOX_ID = 1013;
+	private static final int CLOTH_BUNDLE_ID = 1014;
+	private static final int CLAY_POT_ID = 1015;
+	private static final int JACKSONS_RECEIPT_ID = 1016;
+	private static final int SILVIAS_RECEIPT_ID = 1017;
+	private static final int RANTS_RECEIPT_ID = 1018;
 	
 	// REWARDs
-	private static final int SoulshotNoGradeId = 1835; // You get 3 Soulshots no grade.
-	private static final int RingofKnowledgeId = 875;
-	private static final int XpRewardAmount = 600;
+	private static final int SOULSHOT_NO_GRADE_ID = 1835; // You get 3 Soulshots no grade.
+	private static final int RING_OF_KNOWLEDGE_ID = 875;
+	private static final int XP_REWARD_AMOUNT = 600;
 	
 	public Q00153_DeliverGoods(int questId, String name, String descr)
 	{
 		super(questId, name, descr);
 		
-		questItemIds = new int[]
-		{
-			DeliveryListId,
-			HeavyWoodBoxId,
-			ClothBundleId,
-			ClayPotId,
-			JacksonsReceipt,
-			SilviasReceipt,
-			RantsReceipt
-		};
-		addStartNpc(ArnoldId);
-		addTalkId(JacksonId);
-		addTalkId(SilviaId);
-		addTalkId(ArnoldId);
-		addTalkId(RantId);
+		addStartNpc(ARNOLD_ID, JACKSON_ID, SILVIA_ID, ARNOLD_ID, RANT_ID);
+		registerQuestItems(DELIVERY_LIST_ID, HEAVY_WOOD_BOX_ID, CLOTH_BUNDLE_ID, CLAY_POT_ID, JACKSONS_RECEIPT_ID, SILVIAS_RECEIPT_ID, RANTS_RECEIPT_ID);
 	}
 	
 	@Override
 	public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
 	{
-		String htmltext = event;
 		final QuestState st = player.getQuestState(getName());
-		if ((st != null) && (npc.getNpcId() == ArnoldId))
+		if ((st != null) && (npc.getNpcId() == ARNOLD_ID))
 		{
 			if (event.equalsIgnoreCase("30041-02.html"))
 			{
-				st.setState(State.STARTED);
-				st.set("cond", "1");
-				st.playSound("ItemSound.quest_accept");
-				st.giveItems(DeliveryListId, 1);
-				st.giveItems(HeavyWoodBoxId, 1);
-				st.giveItems(ClothBundleId, 1);
-				st.giveItems(ClayPotId, 1);
+				st.startQuest();
+				st.giveItems(DELIVERY_LIST_ID, 1);
+				st.giveItems(HEAVY_WOOD_BOX_ID, 1);
+				st.giveItems(CLOTH_BUNDLE_ID, 1);
+				st.giveItems(CLAY_POT_ID, 1);
 			}
 		}
-		return htmltext;
+		return event;
 	}
 	
 	@Override
@@ -95,7 +79,7 @@ public class Q00153_DeliverGoods extends Quest
 		final QuestState st = player.getQuestState(getName());
 		if (st != null)
 		{
-			if (npc.getNpcId() == ArnoldId)
+			if (npc.getNpcId() == ARNOLD_ID)
 			{
 				switch (st.getState())
 				{
@@ -103,23 +87,22 @@ public class Q00153_DeliverGoods extends Quest
 						htmltext = (player.getLevel() >= 2) ? "30041-01.htm" : "30041-00.htm";
 						break;
 					case State.STARTED:
-						final int cond = st.getInt("cond");
-						if (cond == 1)
+						if (st.isCond(1))
 						{
 							htmltext = "30041-03.html";
 						}
-						else if (cond == 2)
+						else if (st.isCond(2))
 						{
-							htmltext = "30041-04.html";
-							st.takeItems(DeliveryListId, -1);
-							st.takeItems(JacksonsReceipt, -1);
-							st.takeItems(SilviasReceipt, -1);
-							st.takeItems(RantsReceipt, -1);
+							st.takeItems(DELIVERY_LIST_ID, -1);
+							st.takeItems(JACKSONS_RECEIPT_ID, -1);
+							st.takeItems(SILVIAS_RECEIPT_ID, -1);
+							st.takeItems(RANTS_RECEIPT_ID, -1);
 							// On retail it gives 2 rings but one at the time.
-							st.giveItems(RingofKnowledgeId, 1);
-							st.giveItems(RingofKnowledgeId, 1);
-							st.addExpAndSp(XpRewardAmount, 0);
+							st.giveItems(RING_OF_KNOWLEDGE_ID, 1);
+							st.giveItems(RING_OF_KNOWLEDGE_ID, 1);
+							st.addExpAndSp(XP_REWARD_AMOUNT, 0);
 							st.exitQuest(false);
+							htmltext = "30041-04.html";
 						}
 						break;
 					case State.COMPLETED:
@@ -129,40 +112,40 @@ public class Q00153_DeliverGoods extends Quest
 			}
 			else
 			{
-				if (npc.getNpcId() == JacksonId)
+				if (npc.getNpcId() == JACKSON_ID)
 				{
-					if (st.hasQuestItems(HeavyWoodBoxId))
+					if (st.hasQuestItems(HEAVY_WOOD_BOX_ID))
 					{
+						st.takeItems(HEAVY_WOOD_BOX_ID, -1);
+						st.giveItems(JACKSONS_RECEIPT_ID, 1);
 						htmltext = "30002-01.html";
-						st.takeItems(HeavyWoodBoxId, -1);
-						st.giveItems(JacksonsReceipt, 1);
 					}
 					else
 					{
 						htmltext = "30002-02.html";
 					}
 				}
-				else if (npc.getNpcId() == SilviaId)
+				else if (npc.getNpcId() == SILVIA_ID)
 				{
-					if (st.hasQuestItems(ClothBundleId))
+					if (st.hasQuestItems(CLOTH_BUNDLE_ID))
 					{
+						st.takeItems(CLOTH_BUNDLE_ID, -1);
+						st.giveItems(SILVIAS_RECEIPT_ID, 1);
+						st.giveItems(SOULSHOT_NO_GRADE_ID, 3);
 						htmltext = "30003-01.html";
-						st.takeItems(ClothBundleId, -1);
-						st.giveItems(SilviasReceipt, 1);
-						st.giveItems(SoulshotNoGradeId, 3);
 					}
 					else
 					{
 						htmltext = "30003-02.html";
 					}
 				}
-				else if (npc.getNpcId() == RantId)
+				else if (npc.getNpcId() == RANT_ID)
 				{
-					if (st.hasQuestItems(ClayPotId))
+					if (st.hasQuestItems(CLAY_POT_ID))
 					{
+						st.takeItems(CLAY_POT_ID, -1);
+						st.giveItems(RANTS_RECEIPT_ID, 1);
 						htmltext = "30054-01.html";
-						st.takeItems(ClayPotId, -1);
-						st.giveItems(RantsReceipt, 1);
 					}
 					else
 					{
@@ -170,10 +153,9 @@ public class Q00153_DeliverGoods extends Quest
 					}
 				}
 				
-				if ((st.getInt("cond") == 1) && st.hasQuestItems(JacksonsReceipt) && st.hasQuestItems(SilviasReceipt) && st.hasQuestItems(RantsReceipt))
+				if (st.isCond(1) && st.hasQuestItems(JACKSONS_RECEIPT_ID) && st.hasQuestItems(SILVIAS_RECEIPT_ID) && st.hasQuestItems(RANTS_RECEIPT_ID))
 				{
-					st.set("cond", "2");
-					st.playSound("ItemSound.quest_middle");
+					st.setCond(2, true);
 				}
 			}
 		}
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00179_IntoTheLargeCavern/Q00179_IntoTheLargeCavern.java b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00179_IntoTheLargeCavern/Q00179_IntoTheLargeCavern.java
index 833ff408b8..39c46e362b 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00179_IntoTheLargeCavern/Q00179_IntoTheLargeCavern.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00179_IntoTheLargeCavern/Q00179_IntoTheLargeCavern.java
@@ -47,9 +47,7 @@ public class Q00179_IntoTheLargeCavern extends Quest
 		{
 			if (event.equalsIgnoreCase("32138-03.html"))
 			{
-				st.setState(State.STARTED);
-				st.set("cond", "1");
-				st.playSound("ItemSound.quest_accept");
+				st.startQuest();
 			}
 		}
 		else if (npc.getNpcId() == _nornil)
@@ -58,16 +56,14 @@ public class Q00179_IntoTheLargeCavern extends Quest
 			{
 				st.giveItems(391, 1);
 				st.giveItems(413, 1);
-				st.playSound("ItemSound.quest_finish");
-				st.exitQuest(false);
+				st.exitQuest(false, true);
 			}
 			else if (event.equalsIgnoreCase("32258-09.html"))
 			{
 				st.giveItems(847, 2);
 				st.giveItems(890, 2);
 				st.giveItems(910, 1);
-				st.playSound("ItemSound.quest_finish");
-				st.exitQuest(false);
+				st.exitQuest(false, true);
 			}
 		}
 		return htmltext;
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00182_NewRecruits/Q00182_NewRecruits.java b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00182_NewRecruits/Q00182_NewRecruits.java
index ded2d15646..e043520869 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00182_NewRecruits/Q00182_NewRecruits.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00182_NewRecruits/Q00182_NewRecruits.java
@@ -47,9 +47,7 @@ public class Q00182_NewRecruits extends Quest
 		{
 			if (event.equalsIgnoreCase("32138-03.html"))
 			{
-				st.setState(State.STARTED);
-				st.set("cond", "1");
-				st.playSound("ItemSound.quest_accept");
+				st.startQuest();
 			}
 		}
 		else if (npc.getNpcId() == _nornil)
@@ -57,14 +55,12 @@ public class Q00182_NewRecruits extends Quest
 			if (event.equalsIgnoreCase("32258-04.html"))
 			{
 				st.giveItems(847, 2);
-				st.playSound("ItemSound.quest_finish");
-				st.exitQuest(false);
+				st.exitQuest(false, true);
 			}
 			else if (event.equalsIgnoreCase("32258-05.html"))
 			{
 				st.giveItems(890, 2);
-				st.playSound("ItemSound.quest_finish");
-				st.exitQuest(false);
+				st.exitQuest(false, true);
 			}
 		}
 		return htmltext;
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00193_SevenSignsDyingMessage/Q00193_SevenSignsDyingMessage.java b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00193_SevenSignsDyingMessage/Q00193_SevenSignsDyingMessage.java
index 66f452591b..baea9e867e 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00193_SevenSignsDyingMessage/Q00193_SevenSignsDyingMessage.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00193_SevenSignsDyingMessage/Q00193_SevenSignsDyingMessage.java
@@ -332,7 +332,7 @@ public class Q00193_SevenSignsDyingMessage extends Quest
 		if (npc.isInsideRadius(player, 1500, true, false))
 		{
 			st.giveItems(SCULPTURE_OF_DOUBT, 1);
-			st.playSound("ItemSound.quest_finish");
+			st.playSound(QuestSound.ITEMSOUND_QUEST_FINISH);
 			st.setCond(5);
 		}
 		
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00194_SevenSignsMammonsContract/Q00194_SevenSignsMammonsContract.java b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00194_SevenSignsMammonsContract/Q00194_SevenSignsMammonsContract.java
index 1a2ba216a3..10f966bfe1 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00194_SevenSignsMammonsContract/Q00194_SevenSignsMammonsContract.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00194_SevenSignsMammonsContract/Q00194_SevenSignsMammonsContract.java
@@ -88,7 +88,7 @@ public class Q00194_SevenSignsMammonsContract extends Quest
 				if (st.isCond(1))
 				{
 					htmltext = event;
-					st.playSound("ItemSound.quest_middle");
+					st.playSound(QuestSound.ITEMSOUND_QUEST_MIDDLE);
 				}
 				break;
 			}
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00197_SevenSignsTheSacredBookOfSeal/Q00197_SevenSignsTheSacredBookOfSeal.java b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00197_SevenSignsTheSacredBookOfSeal/Q00197_SevenSignsTheSacredBookOfSeal.java
index 07fb50013b..7ac656498c 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00197_SevenSignsTheSacredBookOfSeal/Q00197_SevenSignsTheSacredBookOfSeal.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00197_SevenSignsTheSacredBookOfSeal/Q00197_SevenSignsTheSacredBookOfSeal.java
@@ -356,7 +356,7 @@ public class Q00197_SevenSignsTheSacredBookOfSeal extends Quest
 		if (npc.isInsideRadius(player, 1500, true, false))
 		{
 			st.giveItems(SCULPTURE_OF_DOUBT, 1);
-			st.playSound("ItemSound.quest_finish");
+			st.playSound(QuestSound.ITEMSOUND_QUEST_FINISH);
 			st.setCond(4);
 		}
 		
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00198_SevenSignsEmbryo/Q00198_SevenSignsEmbryo.java b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00198_SevenSignsEmbryo/Q00198_SevenSignsEmbryo.java
index e1ed821f39..4e5c95cb23 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00198_SevenSignsEmbryo/Q00198_SevenSignsEmbryo.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00198_SevenSignsEmbryo/Q00198_SevenSignsEmbryo.java
@@ -272,7 +272,7 @@ public class Q00198_SevenSignsEmbryo extends Quest
 		if (npc.isInsideRadius(player, 1500, true, false))
 		{
 			st.giveItems(SCULPTURE_OF_DOUBT, 1);
-			st.playSound("ItemSound.quest_finish");
+			st.playSound(QuestSound.ITEMSOUND_QUEST_FINISH);
 			st.setCond(2);
 		}
 		
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00240_ImTheOnlyOneYouCanTrust/Q00240_ImTheOnlyOneYouCanTrust.java b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00240_ImTheOnlyOneYouCanTrust/Q00240_ImTheOnlyOneYouCanTrust.java
index 13717c6284..ba28a44248 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00240_ImTheOnlyOneYouCanTrust/Q00240_ImTheOnlyOneYouCanTrust.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00240_ImTheOnlyOneYouCanTrust/Q00240_ImTheOnlyOneYouCanTrust.java
@@ -28,7 +28,6 @@ public class Q00240_ImTheOnlyOneYouCanTrust extends Quest
 {
 	// NPC
 	private static final int KINTAIJIN = 32640;
-	
 	// Monster
 	private static final int[] MOBS =
 	{
@@ -50,7 +49,6 @@ public class Q00240_ImTheOnlyOneYouCanTrust extends Quest
 		22632,
 		22633
 	};
-	
 	// Item
 	private static final int STAKATOFANGS = 14879;
 	
@@ -127,7 +125,7 @@ public class Q00240_ImTheOnlyOneYouCanTrust extends Quest
 		}
 		else
 		{
-			st.playSound("ItemSound.quest_itemget");
+			st.playSound(QuestSound.ITEMSOUND_QUEST_ITEMGET);
 		}
 		return super.onKill(npc, player, isPet);
 	}
@@ -138,11 +136,7 @@ public class Q00240_ImTheOnlyOneYouCanTrust extends Quest
 		addStartNpc(KINTAIJIN);
 		addTalkId(KINTAIJIN);
 		addKillId(MOBS);
-		
-		questItemIds = new int[]
-		{
-			STAKATOFANGS
-		};
+		registerQuestItems(STAKATOFANGS);
 	}
 	
 	public static void main(String[] args)
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00241_PossessorOfAPreciousSoul1/Q00241_PossessorOfAPreciousSoul1.java b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00241_PossessorOfAPreciousSoul1/Q00241_PossessorOfAPreciousSoul1.java
index 1e7655f130..14d23f1c87 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00241_PossessorOfAPreciousSoul1/Q00241_PossessorOfAPreciousSoul1.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00241_PossessorOfAPreciousSoul1/Q00241_PossessorOfAPreciousSoul1.java
@@ -385,7 +385,7 @@ public class Q00241_PossessorOfAPreciousSoul1 extends Quest
 					}
 					else
 					{
-						st.playSound("ItemSound.quest_itemget");
+						st.playSound(QuestSound.ITEMSOUND_QUEST_ITEMGET);
 					}
 				}
 				break;
@@ -405,7 +405,7 @@ public class Q00241_PossessorOfAPreciousSoul1 extends Quest
 					}
 					else
 					{
-						st.playSound("ItemSound.quest_itemget");
+						st.playSound(QuestSound.ITEMSOUND_QUEST_ITEMGET);
 					}
 				}
 				break;
@@ -419,15 +419,7 @@ public class Q00241_PossessorOfAPreciousSoul1 extends Quest
 		addStartNpc(TALIEN);
 		addTalkId(TALIEN, STEDMIEL, GABRIELLE, GILMORE, KANTABILON, RAHORAKTI, CARADINE, KASSANDRA, VIRGIL, OGMAR);
 		addKillId(BARAHAM, MALRUK_SUCCUBUS_1, MALRUK_SUCCUBUS_TUREN_1, MALRUK_SUCCUBUS_2, MALRUK_SUCCUBUS_TUREN_2, TAIK_ORC_SUPPLY_LEADER);
-		questItemIds = new int[]
-		{
-			LEGEND_OF_SEVENTEEN,
-			MALRUK_SUCCUBUS_CLAW,
-			ECHO_CRYSTAL,
-			POETRY_BOOK,
-			CRIMSON_MOSS,
-			RAHORAKTIS_MEDICINE
-		};
+		registerQuestItems(LEGEND_OF_SEVENTEEN, MALRUK_SUCCUBUS_CLAW, ECHO_CRYSTAL, POETRY_BOOK, CRIMSON_MOSS, RAHORAKTIS_MEDICINE);
 	}
 	
 	public static void main(String[] args)
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00242_PossessorOfAPreciousSoul2/Q00242_PossessorOfAPreciousSoul2.java b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00242_PossessorOfAPreciousSoul2/Q00242_PossessorOfAPreciousSoul2.java
index 132c2fc100..2afcb5ed73 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00242_PossessorOfAPreciousSoul2/Q00242_PossessorOfAPreciousSoul2.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00242_PossessorOfAPreciousSoul2/Q00242_PossessorOfAPreciousSoul2.java
@@ -28,7 +28,6 @@ import com.l2jserver.gameserver.model.quest.State;
  */
 public class Q00242_PossessorOfAPreciousSoul2 extends Quest
 {
-	
 	// NPCs
 	private static final int VIRGIL = 31742;
 	private static final int KASSANDRA = 31743;
@@ -40,16 +39,13 @@ public class Q00242_PossessorOfAPreciousSoul2 extends Quest
 	private static final int ANGEL_CORPSE = 31752;
 	private static final int KALIS = 30759;
 	private static final int MATILD = 30738;
-	
 	private static final int RESTRAINER_OF_GLORY = 27317;
-	
 	// Items
 	private static final int VIRGILS_LETTER = 7677;
 	private static final int GOLDEN_HAIR = 7590;
 	private static final int ORB_OF_BINDING = 7595;
 	private static final int SORCERY_INGREDIENT = 7596;
 	private static final int CARADINE_LETTER = 7678;
-	
 	// Rewards
 	private static final int CHANCE_FOR_HAIR = 20;
 	
@@ -264,7 +260,7 @@ public class Q00242_PossessorOfAPreciousSoul2 extends Quest
 						{
 							st.setCond(10);
 						}
-						st.playSound("ItemSound.quest_middle");
+						st.playSound(QuestSound.ITEMSOUND_QUEST_MIDDLE);
 						npc.setTarget(player);
 						npc.doCast(SkillTable.getInstance().getInfo(4546, 1));
 					}
@@ -315,7 +311,7 @@ public class Q00242_PossessorOfAPreciousSoul2 extends Quest
 		if (st.isCond(9) && (st.getQuestItemsCount(ORB_OF_BINDING) < 4))
 		{
 			st.giveItems(ORB_OF_BINDING, 1);
-			st.playSound("ItemSound.quest_itemget");
+			st.playSound(QuestSound.ITEMSOUND_QUEST_ITEMGET);
 		}
 		if (st.getQuestItemsCount(ORB_OF_BINDING) >= 4)
 		{
@@ -330,12 +326,7 @@ public class Q00242_PossessorOfAPreciousSoul2 extends Quest
 		addStartNpc(VIRGIL);
 		addTalkId(VIRGIL, KASSANDRA, OGMAR, MYSTERIOUS_KNIGHT, ANGEL_CORPSE, KALIS, MATILD, FALLEN_UNICORN, CORNERSTONE, PURE_UNICORN);
 		addKillId(RESTRAINER_OF_GLORY);
-		questItemIds = new int[]
-		{
-			GOLDEN_HAIR,
-			ORB_OF_BINDING,
-			SORCERY_INGREDIENT
-		};
+		registerQuestItems(GOLDEN_HAIR, ORB_OF_BINDING, SORCERY_INGREDIENT);
 	}
 	
 	public static void main(String[] args)
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00246_PossessorOfAPreciousSoul3/Q00246_PossessorOfAPreciousSoul3.java b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00246_PossessorOfAPreciousSoul3/Q00246_PossessorOfAPreciousSoul3.java
index ba86faaff8..a02978c395 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00246_PossessorOfAPreciousSoul3/Q00246_PossessorOfAPreciousSoul3.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00246_PossessorOfAPreciousSoul3/Q00246_PossessorOfAPreciousSoul3.java
@@ -32,7 +32,6 @@ public class Q00246_PossessorOfAPreciousSoul3 extends Quest
 	private static final int LADD = 30721;
 	private static final int CARADINE = 31740;
 	private static final int OSSIAN = 31741;
-	
 	private static final int PILGRIM_OF_SPLENDOR = 21541;
 	private static final int JUDGE_OF_SPLENDOR = 21544;
 	private static final int BARAKIEL = 25325;
@@ -45,7 +44,6 @@ public class Q00246_PossessorOfAPreciousSoul3 extends Quest
 		21539, // Wailing of Splendor
 		21540, // Wailing of Splendor
 	};
-	
 	// Items
 	private static final int CARADINE_LETTER = 7678;
 	private static final int CARADINE_LETTER_LAST = 7679;
@@ -54,7 +52,6 @@ public class Q00246_PossessorOfAPreciousSoul3 extends Quest
 	private static final int RAIN_SONG = 7593;
 	private static final int RELIC_BOX = 7594;
 	private static final int FRAGMENTS = 21725;
-	
 	// Rewards
 	private static final int CHANCE_FOR_DROP = 30;
 	private static final int CHANCE_FOR_DROP_FRAGMENTS = 60;
@@ -236,7 +233,7 @@ public class Q00246_PossessorOfAPreciousSoul3 extends Quest
 							}
 							else
 							{
-								st.playSound("ItemSound.quest_itemget");
+								st.playSound(QuestSound.ITEMSOUND_QUEST_ITEMGET);
 							}
 						}
 					}
@@ -260,7 +257,7 @@ public class Q00246_PossessorOfAPreciousSoul3 extends Quest
 							}
 							else
 							{
-								st.playSound("ItemSound.quest_itemget");
+								st.playSound(QuestSound.ITEMSOUND_QUEST_ITEMGET);
 							}
 						}
 					}
@@ -310,7 +307,7 @@ public class Q00246_PossessorOfAPreciousSoul3 extends Quest
 						st.giveItems(FRAGMENTS, 1);
 						if (st.getQuestItemsCount(FRAGMENTS) < 100)
 						{
-							st.playSound("ItemSound.quest_itemget");
+							st.playSound(QuestSound.ITEMSOUND_QUEST_ITEMGET);
 						}
 						else
 						{
@@ -330,14 +327,7 @@ public class Q00246_PossessorOfAPreciousSoul3 extends Quest
 		addTalkId(LADD, CARADINE, OSSIAN);
 		addKillId(PILGRIM_OF_SPLENDOR, JUDGE_OF_SPLENDOR, BARAKIEL);
 		addKillId(MOBS);
-		questItemIds = new int[]
-		{
-			WATERBINDER,
-			EVERGREEN,
-			FRAGMENTS,
-			RAIN_SONG,
-			RELIC_BOX
-		};
+		registerQuestItems(WATERBINDER, EVERGREEN, FRAGMENTS, RAIN_SONG, RELIC_BOX);
 	}
 	
 	public static void main(String[] args)
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00247_PossessorOfAPreciousSoul4/Q00247_PossessorOfAPreciousSoul4.java b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00247_PossessorOfAPreciousSoul4/Q00247_PossessorOfAPreciousSoul4.java
index 0272c08d67..dbe12316f3 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00247_PossessorOfAPreciousSoul4/Q00247_PossessorOfAPreciousSoul4.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00247_PossessorOfAPreciousSoul4/Q00247_PossessorOfAPreciousSoul4.java
@@ -30,14 +30,14 @@ import com.l2jserver.gameserver.network.serverpackets.SocialAction;
  */
 public class Q00247_PossessorOfAPreciousSoul4 extends Quest
 {
-	
 	// NPCs
 	private static final int CARADINE = 31740;
 	private static final int LADY_OF_LAKE = 31745;
-	
 	// Items
 	private static final int CARADINE_LETTER_LAST = 7679;
 	private static final int NOBLESS_TIARA = 7694;
+	// Location
+	private static final Location CARADINE_LOC = new Location(143209, 43968, -3038);
 	
 	@Override
 	public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
@@ -62,7 +62,7 @@ public class Q00247_PossessorOfAPreciousSoul4 extends Quest
 				{
 					st.setCond(2, true);
 					st.takeItems(CARADINE_LETTER_LAST, -1);
-					player.teleToLocation(new Location(143209, 43968, -3038), 0);
+					player.teleToLocation(CARADINE_LOC, 0);
 				}
 				break;
 			case "31745-5.html":
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00249_PoisonedPlainsOfTheLizardmen/Q00249_PoisonedPlainsOfTheLizardmen.java b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00249_PoisonedPlainsOfTheLizardmen/Q00249_PoisonedPlainsOfTheLizardmen.java
index 8b06d00ba7..9451e6fe3b 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00249_PoisonedPlainsOfTheLizardmen/Q00249_PoisonedPlainsOfTheLizardmen.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00249_PoisonedPlainsOfTheLizardmen/Q00249_PoisonedPlainsOfTheLizardmen.java
@@ -45,17 +45,14 @@ public class Q00249_PoisonedPlainsOfTheLizardmen extends Quest
 		{
 			if (event.equalsIgnoreCase("30196-03.htm"))
 			{
-				st.setState(State.STARTED);
-				st.set("cond", "1");
-				st.playSound("ItemSound.quest_accept");
+				st.startQuest();
 			}
 		}
 		else if ((npc.getNpcId() == _johnny) && event.equalsIgnoreCase("32744-03.htm"))
 		{
 			st.giveAdena(83056, true);
 			st.addExpAndSp(477496, 58743);
-			st.playSound("ItemSound.quest_finish");
-			st.exitQuest(false);
+			st.exitQuest(false, true);
 		}
 		return htmltext;
 	}
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00250_WatchWhatYouEat/Q00250_WatchWhatYouEat.java b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00250_WatchWhatYouEat/Q00250_WatchWhatYouEat.java
index c0cf4d878b..4438575c51 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00250_WatchWhatYouEat/Q00250_WatchWhatYouEat.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00250_WatchWhatYouEat/Q00250_WatchWhatYouEat.java
@@ -28,9 +28,9 @@ import com.l2jserver.gameserver.model.quest.State;
 public class Q00250_WatchWhatYouEat extends Quest
 {
 	// NPCs
-	private static final int _sally = 32743;
+	private static final int SALLY = 32743;
 	// Mobs - Items
-	private static final int[][] _mobs =
+	private static final int[][] MOBS =
 	{
 		{
 			18864,
@@ -57,20 +57,17 @@ public class Q00250_WatchWhatYouEat extends Quest
 			return htmltext;
 		}
 		
-		if (npc.getNpcId() == _sally)
+		if (npc.getNpcId() == SALLY)
 		{
 			if (event.equalsIgnoreCase("32743-03.htm"))
 			{
-				st.setState(State.STARTED);
-				st.set("cond", "1");
-				st.playSound("ItemSound.quest_accept");
+				st.startQuest();
 			}
 			else if (event.equalsIgnoreCase("32743-end.htm"))
 			{
 				st.giveAdena(135661, true);
 				st.addExpAndSp(698334, 76369);
-				st.playSound("ItemSound.quest_finish");
-				st.exitQuest(false);
+				st.exitQuest(false, true);
 			}
 			else if (event.equalsIgnoreCase("32743-22.html") && st.isCompleted())
 			{
@@ -90,7 +87,7 @@ public class Q00250_WatchWhatYouEat extends Quest
 			return htmltext;
 		}
 		
-		if (npc.getNpcId() == _sally)
+		if (npc.getNpcId() == SALLY)
 		{
 			switch (st.getState())
 			{
@@ -105,16 +102,16 @@ public class Q00250_WatchWhatYouEat extends Quest
 					}
 					break;
 				case State.STARTED:
-					if (st.getInt("cond") == 1)
+					if (st.isCond(1))
 					{
 						htmltext = "32743-04.htm";
 					}
-					else if (st.getInt("cond") == 2)
+					else if (st.isCond(2))
 					{
-						if (st.hasQuestItems(_mobs[0][1]) && st.hasQuestItems(_mobs[1][1]) && st.hasQuestItems(_mobs[2][1]))
+						if (st.hasQuestItems(MOBS[0][1]) && st.hasQuestItems(MOBS[1][1]) && st.hasQuestItems(MOBS[2][1]))
 						{
 							htmltext = "32743-05.htm";
-							for (int items[] : _mobs)
+							for (int items[] : MOBS)
 							{
 								st.takeItems(items[1], -1);
 							}
@@ -141,23 +138,22 @@ public class Q00250_WatchWhatYouEat extends Quest
 		{
 			return null;
 		}
-		if (st.isStarted() && (st.getInt("cond") == 1))
+		if (st.isStarted() && st.isCond(1))
 		{
-			for (int mob[] : _mobs)
+			for (int[] mob : MOBS)
 			{
 				if (npc.getNpcId() == mob[0])
 				{
 					if (!st.hasQuestItems(mob[1]))
 					{
 						st.giveItems(mob[1], 1);
-						st.playSound("ItemSound.quest_itemget");
+						st.playSound(QuestSound.ITEMSOUND_QUEST_ITEMGET);
 					}
 				}
 			}
-			if (st.hasQuestItems(_mobs[0][1]) && st.hasQuestItems(_mobs[1][1]) && st.hasQuestItems(_mobs[2][1]))
+			if (st.hasQuestItems(MOBS[0][1]) && st.hasQuestItems(MOBS[1][1]) && st.hasQuestItems(MOBS[2][1]))
 			{
-				st.set("cond", "2");
-				st.playSound("ItemSound.quest_middle");
+				st.setCond(2, true);
 			}
 		}
 		return null;
@@ -172,7 +168,7 @@ public class Q00250_WatchWhatYouEat extends Quest
 			newQuestState(player);
 		}
 		
-		if (npc.getNpcId() == _sally)
+		if (npc.getNpcId() == SALLY)
 		{
 			return "32743-20.html";
 		}
@@ -184,21 +180,14 @@ public class Q00250_WatchWhatYouEat extends Quest
 	{
 		super(questId, name, descr);
 		
-		questItemIds = new int[]
+		addStartNpc(SALLY);
+		addFirstTalkId(SALLY);
+		addTalkId(SALLY);
+		for (int[] mob : MOBS)
 		{
-			15493,
-			15494,
-			15495
-		};
-		
-		addStartNpc(_sally);
-		addFirstTalkId(_sally);
-		addTalkId(_sally);
-		
-		for (int i[] : _mobs)
-		{
-			addKillId(i[0]);
+			addKillId(mob[0]);
 		}
+		registerQuestItems(15493, 15494, 15495);
 	}
 	
 	public static void main(String[] args)
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00251_NoSecrets/Q00251_NoSecrets.java b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00251_NoSecrets/Q00251_NoSecrets.java
index 48ccd7b339..c47c1e41e0 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00251_NoSecrets/Q00251_NoSecrets.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00251_NoSecrets/Q00251_NoSecrets.java
@@ -130,7 +130,7 @@ public class Q00251_NoSecrets extends Quest
 				}
 				else
 				{
-					st.playSound("ItemSound.quest_itemget");
+					st.playSound(QuestSound.ITEMSOUND_QUEST_ITEMGET);
 				}
 			}
 			else if (Util.contains(MOBS2, npcId) && (getRandom(100) < 5) && (st.getQuestItemsCount(TABLE) < 5))
@@ -142,7 +142,7 @@ public class Q00251_NoSecrets extends Quest
 				}
 				else
 				{
-					st.playSound("ItemSound.quest_itemget");
+					st.playSound(QuestSound.ITEMSOUND_QUEST_ITEMGET);
 				}
 			}
 		}
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00252_ItSmellsDelicious/Q00252_ItSmellsDelicious.java b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00252_ItSmellsDelicious/Q00252_ItSmellsDelicious.java
index f4ca6cb2bf..ef2336b272 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00252_ItSmellsDelicious/Q00252_ItSmellsDelicious.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00252_ItSmellsDelicious/Q00252_ItSmellsDelicious.java
@@ -73,9 +73,7 @@ public class Q00252_ItSmellsDelicious extends Quest
 		{
 			if (event.equalsIgnoreCase("30200-05.htm"))
 			{
-				st.set("cond", "1");
-				st.setState(State.STARTED);
-				st.playSound("ItemSound.quest_accept");
+				st.startQuest();
 			}
 			else if (event.equalsIgnoreCase("30200-08.htm"))
 			{
@@ -83,8 +81,7 @@ public class Q00252_ItSmellsDelicious extends Quest
 				st.takeItems(MAHUM_COOKBOOK, -1);
 				st.giveItems(57, 147656);
 				st.addExpAndSp(716238, 78324);
-				st.playSound("ItemSound.quest_finish");
-				st.exitQuest(false);
+				st.exitQuest(false, true);
 			}
 		}
 		return htmltext;
@@ -145,12 +142,11 @@ public class Q00252_ItSmellsDelicious extends Quest
 			if (st != null)
 			{
 				st.giveItems(MAHUM_DIARY, 1);
-				st.playSound("ItemSound.quest_itemget");
+				st.playSound(QuestSound.ITEMSOUND_QUEST_ITEMGET);
 				
 				if ((st.getQuestItemsCount(MAHUM_DIARY) >= 10) && (st.getQuestItemsCount(MAHUM_COOKBOOK) >= 5))
 				{
-					st.set("cond", "2");
-					st.playSound("ItemSound.quest_middle");
+					st.setCond(2, true);
 				}
 			}
 		}
@@ -160,12 +156,11 @@ public class Q00252_ItSmellsDelicious extends Quest
 			if ((st != null) && st.isStarted() && (st.getInt("cond") == 1) && (st.getQuestItemsCount(MAHUM_COOKBOOK) < 5) && (getRandom(1000) < 360))
 			{
 				st.giveItems(MAHUM_COOKBOOK, 1);
-				st.playSound("ItemSound.quest_itemget");
+				st.playSound(QuestSound.ITEMSOUND_QUEST_ITEMGET);
 				
 				if ((st.getQuestItemsCount(MAHUM_DIARY) >= 10) && (st.getQuestItemsCount(MAHUM_COOKBOOK) >= 5))
 				{
-					st.set("cond", "2");
-					st.playSound("ItemSound.quest_middle");
+					st.setCond(2, true);
 				}
 			}
 		}
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00270_TheOneWhoEndsSilence/Q00270_TheOneWhoEndsSilence.java b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00270_TheOneWhoEndsSilence/Q00270_TheOneWhoEndsSilence.java
index c6718897d0..b591459155 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00270_TheOneWhoEndsSilence/Q00270_TheOneWhoEndsSilence.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00270_TheOneWhoEndsSilence/Q00270_TheOneWhoEndsSilence.java
@@ -151,7 +151,7 @@ public class Q00270_TheOneWhoEndsSilence extends Quest
 						rewardScroll(st, 1);
 					}
 					htmltext = "32757-09.html";
-					st.playSound("ItemSound.quest_middle");
+					st.playSound(QuestSound.ITEMSOUND_QUEST_MIDDLE);
 					st.takeItems(TATTERED_MONK_CLOTHES, 100);
 				}
 				else
@@ -174,7 +174,7 @@ public class Q00270_TheOneWhoEndsSilence extends Quest
 					}
 					rewardScroll(st, 2);
 					htmltext = "32757-09.html";
-					st.playSound("ItemSound.quest_middle");
+					st.playSound(QuestSound.ITEMSOUND_QUEST_MIDDLE);
 					st.takeItems(TATTERED_MONK_CLOTHES, 200);
 				}
 				else
@@ -191,7 +191,7 @@ public class Q00270_TheOneWhoEndsSilence extends Quest
 					st.giveItems(10397 + getRandom(9), 1);
 					rewardScroll(st, 3);
 					htmltext = "32757-09.html";
-					st.playSound("ItemSound.quest_middle");
+					st.playSound(QuestSound.ITEMSOUND_QUEST_MIDDLE);
 					st.takeItems(TATTERED_MONK_CLOTHES, 300);
 				}
 				else
@@ -224,7 +224,7 @@ public class Q00270_TheOneWhoEndsSilence extends Quest
 						rewardScroll(st, 1);
 					}
 					htmltext = "32757-09.html";
-					st.playSound("ItemSound.quest_middle");
+					st.playSound(QuestSound.ITEMSOUND_QUEST_MIDDLE);
 					st.takeItems(TATTERED_MONK_CLOTHES, 400);
 				}
 				else
@@ -251,7 +251,7 @@ public class Q00270_TheOneWhoEndsSilence extends Quest
 					}
 					rewardScroll(st, 2);
 					htmltext = "32757-09.html";
-					st.playSound("ItemSound.quest_middle");
+					st.playSound(QuestSound.ITEMSOUND_QUEST_MIDDLE);
 					st.takeItems(TATTERED_MONK_CLOTHES, 300);
 				}
 				else
@@ -366,7 +366,7 @@ public class Q00270_TheOneWhoEndsSilence extends Quest
 			{
 				final QuestState qs = player.getQuestState(getName());
 				qs.giveItems(TATTERED_MONK_CLOTHES, count);
-				qs.playSound("ItemSound.quest_itemget");
+				qs.playSound(QuestSound.ITEMSOUND_QUEST_ITEMGET);
 			}
 		}
 	}
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00278_HomeSecurity/Q00278_HomeSecurity.java b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00278_HomeSecurity/Q00278_HomeSecurity.java
index cfc411c340..59120001c9 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00278_HomeSecurity/Q00278_HomeSecurity.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00278_HomeSecurity/Q00278_HomeSecurity.java
@@ -53,9 +53,7 @@ public class Q00278_HomeSecurity extends Quest
 		}
 		else if (event.equalsIgnoreCase("31537-04.htm"))
 		{
-			st.set("cond", "1");
-			st.playSound("ItemSound.quest_accept");
-			st.setState(State.STARTED);
+			st.startQuest();
 		}
 		else if (event.equalsIgnoreCase("31537-07.html"))
 		{
@@ -116,8 +114,7 @@ public class Q00278_HomeSecurity extends Quest
 			
 			st.takeItems(SelMahumMane, -1);
 			st.unset("cond");
-			st.playSound("ItemSound.quest_finish");
-			st.exitQuest(true);
+			st.exitQuest(true, true);
 			htmltext = "31537-07.html";
 		}
 		return htmltext;
@@ -175,12 +172,11 @@ public class Q00278_HomeSecurity extends Quest
 						st.giveItems(SelMahumMane, 1);
 						if (st.getQuestItemsCount(SelMahumMane) >= 300)
 						{
-							st.set("cond", "2");
-							st.playSound("ItemSound.quest_middle");
+							st.setCond(2, true);
 						}
 						else
 						{
-							st.playSound("ItemSound.quest_itemget");
+							st.playSound(QuestSound.ITEMSOUND_QUEST_ITEMGET);
 						}
 					}
 					break;
@@ -191,14 +187,13 @@ public class Q00278_HomeSecurity extends Quest
 						i1 = getRandom(6) + 1;
 						if ((i1 + st.getQuestItemsCount(SelMahumMane)) >= 300)
 						{
-							st.set("cond", "2");
-							st.playSound("ItemSound.quest_middle");
 							st.giveItems(SelMahumMane, (300 - st.getQuestItemsCount(SelMahumMane)));
+							st.setCond(2, true);
 						}
 						else
 						{
 							st.giveItems(SelMahumMane, i1);
-							st.playSound("ItemSound.quest_itemget");
+							st.playSound(QuestSound.ITEMSOUND_QUEST_ITEMGET);
 						}
 					}
 					else
@@ -206,14 +201,13 @@ public class Q00278_HomeSecurity extends Quest
 						i1 = (getRandom(5) + 1);
 						if ((i1 + st.getQuestItemsCount(SelMahumMane)) >= 300)
 						{
-							st.set("cond", "2");
-							st.playSound("ItemSound.quest_middle");
 							st.giveItems(SelMahumMane, (300 - st.getQuestItemsCount(SelMahumMane)));
+							st.setCond(2, true);
 						}
 						else
 						{
 							st.giveItems(SelMahumMane, i1);
-							st.playSound("ItemSound.quest_itemget");
+							st.playSound(QuestSound.ITEMSOUND_QUEST_ITEMGET);
 						}
 					}
 					break;
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00279_TargetOfOpportunity/Q00279_TargetOfOpportunity.java b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00279_TargetOfOpportunity/Q00279_TargetOfOpportunity.java
index 9bd0ff70f8..e08582416d 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00279_TargetOfOpportunity/Q00279_TargetOfOpportunity.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00279_TargetOfOpportunity/Q00279_TargetOfOpportunity.java
@@ -129,7 +129,7 @@ public final class Q00279_TargetOfOpportunity extends Quest
 				}
 				else
 				{
-					st.playSound("ItemSound.quest_itemget");
+					st.playSound(QuestSound.ITEMSOUND_QUEST_ITEMGET);
 				}
 			}
 		}
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00289_NoMoreSoupForYou/Q00289_NoMoreSoupForYou.java b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00289_NoMoreSoupForYou/Q00289_NoMoreSoupForYou.java
index 96f19304db..229582583d 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00289_NoMoreSoupForYou/Q00289_NoMoreSoupForYou.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00289_NoMoreSoupForYou/Q00289_NoMoreSoupForYou.java
@@ -163,11 +163,6 @@ public class Q00289_NoMoreSoupForYou extends Quest
 		}
 	}
 	
-	public static void main(String[] args)
-	{
-		new Q00289_NoMoreSoupForYou(289, Q00289_NoMoreSoupForYou.class.getSimpleName(), "No More Soup For You");
-	}
-	
 	@Override
 	public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
 	{
@@ -184,9 +179,7 @@ public class Q00289_NoMoreSoupForYou extends Quest
 		{
 			if (event.equalsIgnoreCase("30200-03.htm"))
 			{
-				st.set("cond", "1");
-				st.setState(State.STARTED);
-				st.playSound("ItemSound.quest_accept");
+				st.startQuest();
 			}
 			else if (event.equalsIgnoreCase("30200-05.htm"))
 			{
@@ -194,7 +187,7 @@ public class Q00289_NoMoreSoupForYou extends Quest
 				{
 					st.giveItems(WEAPONS[c][0], WEAPONS[c][1]);
 					st.takeItems(SOUP, 500);
-					st.playSound("ItemSound.quest_accept");
+					st.playSound(QuestSound.ITEMSOUND_QUEST_MIDDLE);
 					htmltext = "30200-04.htm";
 				}
 				else
@@ -208,7 +201,7 @@ public class Q00289_NoMoreSoupForYou extends Quest
 				{
 					st.giveItems(ARMORS[b][0], ARMORS[b][1]);
 					st.takeItems(SOUP, 100);
-					st.playSound("ItemSound.quest_accept");
+					st.playSound(QuestSound.ITEMSOUND_QUEST_MIDDLE);
 					htmltext = "30200-04.htm";
 				}
 				else
@@ -275,8 +268,13 @@ public class Q00289_NoMoreSoupForYou extends Quest
 		if (Util.contains(MOBS, npcId))
 		{
 			st.giveItems(SOUP, 1 * RATE);
-			st.playSound("ItemSound.quest_itemget");
+			st.playSound(QuestSound.ITEMSOUND_QUEST_ITEMGET);
 		}
 		return super.onKill(npc, player, isPet);
 	}
+	
+	public static void main(String[] args)
+	{
+		new Q00289_NoMoreSoupForYou(289, Q00289_NoMoreSoupForYou.class.getSimpleName(), "No More Soup For You");
+	}
 }
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00290_ThreatRemoval/Q00290_ThreatRemoval.java b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00290_ThreatRemoval/Q00290_ThreatRemoval.java
index f392ce876d..67b9c7f7ec 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00290_ThreatRemoval/Q00290_ThreatRemoval.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00290_ThreatRemoval/Q00290_ThreatRemoval.java
@@ -217,7 +217,7 @@ public class Q00290_ThreatRemoval extends Quest
 		if (getRandom(1000) < chance)
 		{
 			st.rewardItems(SEL_MAHUM_ID_TAG, 1);
-			st.playSound("ItemSound.quest_itemget");
+			st.playSound(QuestSound.ITEMSOUND_QUEST_ITEMGET);
 		}
 		
 		return super.onKill(npc, player, isPet);
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00309_ForAGoodCause/Q00309_ForAGoodCause.java b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00309_ForAGoodCause/Q00309_ForAGoodCause.java
index 00c8be0c81..3eba46667f 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00309_ForAGoodCause/Q00309_ForAGoodCause.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00309_ForAGoodCause/Q00309_ForAGoodCause.java
@@ -18,7 +18,6 @@ import com.l2jserver.gameserver.model.actor.L2Npc;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.quest.Quest;
 import com.l2jserver.gameserver.model.quest.QuestState;
-import com.l2jserver.gameserver.model.quest.State;
 import com.l2jserver.gameserver.network.serverpackets.RadarControl;
 import com.l2jserver.gameserver.util.Util;
 
@@ -31,7 +30,6 @@ public class Q00309_ForAGoodCause extends Quest
 {
 	// NPC's
 	private static final int ATRA = 32647;
-	
 	// Mobs
 	private static final int CONTAMINATED_MUCROKIAN = 22654;
 	private static final int CHANGED_MUCROKIAN = 22655;
@@ -42,20 +40,16 @@ public class Q00309_ForAGoodCause extends Quest
 		22652,
 		22653
 	};
-	
 	// Quest Items
 	private static final int MUCROKIAN_HIDE = 14873;
 	private static final int FALLEN_MUCROKIAN_HIDE = 14874;
-	
 	private static final int MUCROKIAN_HIDE_CHANCE = 50;
 	private static final int FALLEN_HIDE_CHANCE = 50;
-	
 	// Rewards
 	private static final int REC_DYNASTY_EARRINGS_70 = 9985;
 	private static final int REC_DYNASTY_NECKLACE_70 = 9986;
 	private static final int REC_DYNASTY_RING_70 = 9987;
 	private static final int REC_DYNASTY_SIGIL_60 = 10115;
-	
 	private static final int REC_MOIRAI_CIRCLET_60 = 15777;
 	private static final int REC_MOIRAI_TUNIC_60 = 15780;
 	private static final int REC_MOIRAI_STOCKINGS_60 = 15783;
@@ -65,7 +59,6 @@ public class Q00309_ForAGoodCause extends Quest
 	private static final int REC_MOIRAI_EARRING_70 = 15814;
 	private static final int REC_MOIRAI_NECKLACE_70 = 15813;
 	private static final int REC_MOIRAI_RING_70 = 15812;
-	
 	private static final int[] MOIRAI_PIECES =
 	{
 		15647,
@@ -91,9 +84,7 @@ public class Q00309_ForAGoodCause extends Quest
 		String htmltext = event;
 		if (event.equalsIgnoreCase("32647-05.html"))
 		{
-			st.setState(State.STARTED);
-			st.set("cond", "1");
-			st.playSound("ItemSound.quest_accept");
+			st.startQuest();
 			player.sendPacket(new RadarControl(0, 2, 77325, 205773, -3432));
 		}
 		else if (event.equalsIgnoreCase("claimreward"))
@@ -246,8 +237,7 @@ public class Q00309_ForAGoodCause extends Quest
 		}
 		else if (event.equalsIgnoreCase("32647-14.html") || event.equalsIgnoreCase("32647-07.html"))
 		{
-			st.playSound("ItemSound.quest_finish");
-			st.exitQuest(true);
+			st.exitQuest(true, true);
 		}
 		return htmltext;
 	}
@@ -292,17 +282,17 @@ public class Q00309_ForAGoodCause extends Quest
 				if (getRandom(100) < MUCROKIAN_HIDE_CHANCE)
 				{
 					st.giveItems(MUCROKIAN_HIDE, 1);
-					st.playSound("ItemSound.quest_itemget");
+					st.playSound(QuestSound.ITEMSOUND_QUEST_ITEMGET);
 				}
 				else if ((npc.getNpcId() == CHANGED_MUCROKIAN) && (getRandom(100) < FALLEN_HIDE_CHANCE))
 				{
 					st.giveItems(FALLEN_MUCROKIAN_HIDE, 1);
-					st.playSound("ItemSound.quest_itemget");
+					st.playSound(QuestSound.ITEMSOUND_QUEST_ITEMGET);
 				}
 				else if ((npc.getNpcId() == CONTAMINATED_MUCROKIAN) && (getRandom(100) < 10))
 				{
 					st.giveItems(MUCROKIAN_HIDE, 1);
-					st.playSound("ItemSound.quest_itemget");
+					st.playSound(QuestSound.ITEMSOUND_QUEST_ITEMGET);
 				}
 			}
 		}
@@ -315,7 +305,7 @@ public class Q00309_ForAGoodCause extends Quest
 		{
 			st.giveItems(pieces, getRandom(1, 4));
 			st.takeItems(MUCROKIAN_HIDE, event);
-			st.playSound("ItemSound.quest_finish");
+			st.playSound(QuestSound.ITEMSOUND_QUEST_FINISH);
 			return "32647-16.html";
 		}
 		return "32647-15.html";
@@ -327,7 +317,7 @@ public class Q00309_ForAGoodCause extends Quest
 		{
 			st.giveItems(recipe, 1);
 			st.takeItems(takeid, quanty);
-			st.playSound("ItemSound.quest_finish");
+			st.playSound(QuestSound.ITEMSOUND_QUEST_FINISH);
 			return "32647-16.html";
 		}
 		return "32647-15.html";
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00350_EnhanceYourWeapon/Q00350_EnhanceYourWeapon.java b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00350_EnhanceYourWeapon/Q00350_EnhanceYourWeapon.java
index 223abe3d0e..2df5c54b14 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00350_EnhanceYourWeapon/Q00350_EnhanceYourWeapon.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00350_EnhanceYourWeapon/Q00350_EnhanceYourWeapon.java
@@ -360,9 +360,7 @@ public class Q00350_EnhanceYourWeapon extends Quest
 		QuestState st = player.getQuestState(getName());
 		if (event.endsWith("-04.htm"))
 		{
-			st.set("cond", "1");
-			st.setState(State.STARTED);
-			st.playSound("ItemSound.quest_accept");
+			st.startQuest();
 		}
 		else if (event.endsWith("-09.htm"))
 		{
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00376_ExplorationOfTheGiantsCavePart1/Q00376_ExplorationOfTheGiantsCavePart1.java b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00376_ExplorationOfTheGiantsCavePart1/Q00376_ExplorationOfTheGiantsCavePart1.java
index b420b59ec7..851dd0e584 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00376_ExplorationOfTheGiantsCavePart1/Q00376_ExplorationOfTheGiantsCavePart1.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00376_ExplorationOfTheGiantsCavePart1/Q00376_ExplorationOfTheGiantsCavePart1.java
@@ -32,7 +32,6 @@ public class Q00376_ExplorationOfTheGiantsCavePart1 extends Quest
 {
 	// NPC's
 	private static final int SOBLING = 31147;
-	
 	// Items
 	private static final int ANCIENT_PARCHMENT = 14841;
 	private static final int BOOK1 = 14836;
@@ -40,12 +39,10 @@ public class Q00376_ExplorationOfTheGiantsCavePart1 extends Quest
 	private static final int BOOK3 = 14838;
 	private static final int BOOK4 = 14839;
 	private static final int BOOK5 = 14840;
-	
 	// Drop Chance
 	private static final int DROP_CHANCE = 20;
-	
 	// Mobs
-	private static final int[] _mobs =
+	private static final int[] MOBS =
 	{
 		22670,
 		22671,
@@ -56,7 +53,6 @@ public class Q00376_ExplorationOfTheGiantsCavePart1 extends Quest
 		22676,
 		22677
 	};
-	
 	// Rewards
 	private static final int RECIPE_DYNASTY_SWORD_60 = 9967;
 	private static final int RECIPE_DYNASTY_BLADE_60 = 9968;
@@ -83,15 +79,12 @@ public class Q00376_ExplorationOfTheGiantsCavePart1 extends Quest
 		
 		if (event.equalsIgnoreCase("31147-02.htm"))
 		{
-			st.setState(State.STARTED);
-			st.set("cond", "1");
-			st.playSound("ItemSound.quest_accept");
+			st.startQuest();
 			player.sendPacket(new RadarControl(0, 2, 185712, 47414, -4350));
 		}
 		else if (event.equalsIgnoreCase("31147-quit.html"))
 		{
-			st.playSound("ItemSound.quest_finish");
-			st.exitQuest(true);
+			st.exitQuest(true, true);
 		}
 		else if (Util.isDigit(event))
 		{
@@ -173,10 +166,10 @@ public class Q00376_ExplorationOfTheGiantsCavePart1 extends Quest
 			return null;
 		}
 		
-		if ((st.getInt("cond") == 1) && (getRandom(100) < DROP_CHANCE))
+		if (st.isCond(1) && (getRandom(100) < DROP_CHANCE))
 		{
 			st.giveItems(ANCIENT_PARCHMENT, 1);
-			st.playSound("ItemSound.quest_itemget");
+			st.playSound(QuestSound.ITEMSOUND_QUEST_ITEMGET);
 		}
 		return super.onKill(npc, player, isPet);
 	}
@@ -191,7 +184,7 @@ public class Q00376_ExplorationOfTheGiantsCavePart1 extends Quest
 			st.takeItems(BOOK4, rem);
 			st.takeItems(BOOK5, rem);
 			st.giveItems(giveid, qty);
-			st.playSound("ItemSound.quest_finish");
+			st.playSound(QuestSound.ITEMSOUND_QUEST_FINISH);
 			return "31147-ok.html";
 		}
 		return "31147-no.html";
@@ -203,12 +196,8 @@ public class Q00376_ExplorationOfTheGiantsCavePart1 extends Quest
 		
 		addStartNpc(SOBLING);
 		addTalkId(SOBLING);
-		addKillId(_mobs);
-		
-		questItemIds = new int[]
-		{
-			ANCIENT_PARCHMENT
-		};
+		addKillId(MOBS);
+		registerQuestItems(ANCIENT_PARCHMENT);
 	}
 	
 	public static void main(String[] args)
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00377_ExplorationOfTheGiantsCavePart2/Q00377_ExplorationOfTheGiantsCavePart2.java b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00377_ExplorationOfTheGiantsCavePart2/Q00377_ExplorationOfTheGiantsCavePart2.java
index 17935f111e..e08f278123 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00377_ExplorationOfTheGiantsCavePart2/Q00377_ExplorationOfTheGiantsCavePart2.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00377_ExplorationOfTheGiantsCavePart2/Q00377_ExplorationOfTheGiantsCavePart2.java
@@ -30,10 +30,8 @@ import com.l2jserver.gameserver.util.Util;
  */
 public class Q00377_ExplorationOfTheGiantsCavePart2 extends Quest
 {
-	
 	// NPC's
 	private static final int SOBLING = 31147;
-	
 	// Items
 	private static final int TITAN_ANCIENT_BOOK = 14847;
 	private static final int BOOK1 = 14842;
@@ -41,12 +39,10 @@ public class Q00377_ExplorationOfTheGiantsCavePart2 extends Quest
 	private static final int BOOK3 = 14844;
 	private static final int BOOK4 = 14845;
 	private static final int BOOK5 = 14846;
-	
 	// Drop Chance
 	private static final int DROP_CHANCE = 50;
-	
 	// Mobs
-	private static final int[] _mobs =
+	private static final int[] MOBS =
 	{
 		22661,
 		22662,
@@ -58,7 +54,6 @@ public class Q00377_ExplorationOfTheGiantsCavePart2 extends Quest
 		22668,
 		22669
 	};
-	
 	// Rewards
 	private static final int OBLIVION = 9625;
 	private static final int DISCIPLINE = 9626;
@@ -78,15 +73,12 @@ public class Q00377_ExplorationOfTheGiantsCavePart2 extends Quest
 		
 		if (event.equalsIgnoreCase("31147-02.htm"))
 		{
-			st.setState(State.STARTED);
-			st.set("cond", "1");
-			st.playSound("ItemSound.quest_accept");
+			st.startQuest();
 			player.sendPacket(new RadarControl(0, 2, -113360, -244676, -15536));
 		}
 		else if (event.equalsIgnoreCase("31147-quit.html"))
 		{
-			st.playSound("ItemSound.quest_finish");
-			st.exitQuest(true);
+			st.exitQuest(true, true);
 		}
 		else if (Util.isDigit(event))
 		{
@@ -151,7 +143,7 @@ public class Q00377_ExplorationOfTheGiantsCavePart2 extends Quest
 		if ((st.getInt("cond") == 1) && (getRandom(100) < DROP_CHANCE))
 		{
 			st.giveItems(TITAN_ANCIENT_BOOK, 1);
-			st.playSound("ItemSound.quest_itemget");
+			st.playSound(QuestSound.ITEMSOUND_QUEST_ITEMGET);
 		}
 		return super.onKill(npc, player, isPet);
 	}
@@ -166,7 +158,7 @@ public class Q00377_ExplorationOfTheGiantsCavePart2 extends Quest
 			st.takeItems(BOOK4, rem);
 			st.takeItems(BOOK5, rem);
 			st.giveItems(giveid, qty);
-			st.playSound("ItemSound.quest_finish");
+			st.playSound(QuestSound.ITEMSOUND_QUEST_FINISH);
 			return "31147-ok.html";
 		}
 		return "31147-no.html";
@@ -178,12 +170,8 @@ public class Q00377_ExplorationOfTheGiantsCavePart2 extends Quest
 		
 		addStartNpc(SOBLING);
 		addTalkId(SOBLING);
-		addKillId(_mobs);
-		
-		questItemIds = new int[]
-		{
-			TITAN_ANCIENT_BOOK
-		};
+		addKillId(MOBS);
+		registerQuestItems(TITAN_ANCIENT_BOOK);
 	}
 	
 	public static void main(String[] args)
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00401_PathToWarrior/Q00401_PathToWarrior.java b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00401_PathToWarrior/Q00401_PathToWarrior.java
index 47114c8c2e..190a5055c1 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00401_PathToWarrior/Q00401_PathToWarrior.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00401_PathToWarrior/Q00401_PathToWarrior.java
@@ -38,7 +38,6 @@ public class Q00401_PathToWarrior extends Quest
 	private static final int SIMPLONSLETTER = 1143;
 	private static final int POISONSPIDERLEG = 1144;
 	private static final int MEDALLIONOFWARRIOR = 1145;
-	
 	// Npc
 	private static final int AURON = 30010;
 	private static final int SIMPLON = 30253;
@@ -55,7 +54,6 @@ public class Q00401_PathToWarrior extends Quest
 	{
 		String htmltext = event;
 		QuestState st = player.getQuestState(getName());
-		
 		if (st == null)
 		{
 			return htmltext;
@@ -250,7 +248,7 @@ public class Q00401_PathToWarrior extends Quest
 						if (getRandom(10) < 4)
 						{
 							st.giveItems(RUSTEDBRONZESWORD1, 1);
-							st.playSound("ItemSound.quest_itemget");
+							st.playSound(QuestSound.ITEMSOUND_QUEST_ITEMGET);
 						}
 					}
 					if (st.getQuestItemsCount(RUSTEDBRONZESWORD1) == 10)
@@ -267,7 +265,7 @@ public class Q00401_PathToWarrior extends Quest
 					if (st.getQuestItemsCount(POISONSPIDERLEG) < 20)
 					{
 						st.giveItems(POISONSPIDERLEG, 1);
-						st.playSound("ItemSound.quest_itemget");
+						st.playSound(QuestSound.ITEMSOUND_QUEST_ITEMGET);
 					}
 					
 					if (st.getQuestItemsCount(POISONSPIDERLEG) == 20)
@@ -289,17 +287,7 @@ public class Q00401_PathToWarrior extends Quest
 		addTalkId(AURON);
 		addTalkId(SIMPLON);
 		addKillId(MONSTERS);
-		
-		questItemIds = new int[]
-		{
-			AURONSLETTER,
-			WARRIORGUILDMARK,
-			RUSTEDBRONZESWORD1,
-			RUSTEDBRONZESWORD2,
-			RUSTEDBRONZESWORD3,
-			SIMPLONSLETTER,
-			POISONSPIDERLEG
-		};
+		registerQuestItems(AURONSLETTER, WARRIORGUILDMARK, RUSTEDBRONZESWORD1, RUSTEDBRONZESWORD2, RUSTEDBRONZESWORD3, SIMPLONSLETTER, POISONSPIDERLEG);
 	}
 	
 	public static void main(String[] args)
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00423_TakeYourBestShot/Q00423_TakeYourBestShot.java b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00423_TakeYourBestShot/Q00423_TakeYourBestShot.java
index 7a3de4963c..cc38d436d4 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00423_TakeYourBestShot/Q00423_TakeYourBestShot.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00423_TakeYourBestShot/Q00423_TakeYourBestShot.java
@@ -68,9 +68,7 @@ public class Q00423_TakeYourBestShot extends Quest
 		{
 			if (event.equalsIgnoreCase("32744-04.htm"))
 			{
-				st.setState(State.STARTED);
-				st.set("cond", "1");
-				st.playSound("ItemSound.quest_accept");
+				st.startQuest();
 			}
 			else if (event.equalsIgnoreCase("32744-quit.htm"))
 			{
@@ -144,9 +142,8 @@ public class Q00423_TakeYourBestShot extends Quest
 			else if ((st.getState() == State.STARTED) && (st.getInt("cond") == 2))
 			{
 				st.giveItems(_seer_ugoros_pass, 1);
-				st.playSound("ItemSound.quest_finish");
 				st.unset("cond");
-				st.exitQuest(true);
+				st.exitQuest(true, true);
 				htmltext = "32740-04.htm";
 			}
 		}
@@ -185,8 +182,7 @@ public class Q00423_TakeYourBestShot extends Quest
 		}
 		else if ((npc.getNpcId() == _tanta_guard) && (st.getInt("cond") == 1))
 		{
-			st.set("cond", "2");
-			st.playSound("ItemSound.quest_middle");
+			st.setCond(2, true);
 		}
 		return null;
 	}
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00432_BirthdayPartySong/Q00432_BirthdayPartySong.java b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00432_BirthdayPartySong/Q00432_BirthdayPartySong.java
index ccb49f7abb..f1b2e52ead 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00432_BirthdayPartySong/Q00432_BirthdayPartySong.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00432_BirthdayPartySong/Q00432_BirthdayPartySong.java
@@ -109,7 +109,7 @@ public class Q00432_BirthdayPartySong extends Quest
 			}
 			else
 			{
-				st.playSound("ItemSound.quest_itemget");
+				st.playSound(QuestSound.ITEMSOUND_QUEST_ITEMGET);
 			}
 		}
 		return super.onKill(npc, player, isPet);
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00452_FindingtheLostSoldiers/Q00452_FindingtheLostSoldiers.java b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00452_FindingtheLostSoldiers/Q00452_FindingtheLostSoldiers.java
index 72cd795417..4356a81c54 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00452_FindingtheLostSoldiers/Q00452_FindingtheLostSoldiers.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00452_FindingtheLostSoldiers/Q00452_FindingtheLostSoldiers.java
@@ -137,13 +137,10 @@ public class Q00452_FindingtheLostSoldiers extends Quest
 	{
 		super(questId, name, descr);
 		
-		questItemIds = new int[]
-		{
-			TAG_ID
-		};
 		addStartNpc(JAKAN);
 		addTalkId(JAKAN);
 		addTalkId(SOLDIER_CORPSES);
+		registerQuestItems(TAG_ID);
 	}
 	
 	public static void main(String[] args)
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00453_NotStrongEnoughAlone/Q00453_NotStrongEnoughAlone.java b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00453_NotStrongEnoughAlone/Q00453_NotStrongEnoughAlone.java
index 85e2516aea..6ec6ee0dca 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00453_NotStrongEnoughAlone/Q00453_NotStrongEnoughAlone.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00453_NotStrongEnoughAlone/Q00453_NotStrongEnoughAlone.java
@@ -174,9 +174,8 @@ public class Q00453_NotStrongEnoughAlone extends Quest
 					case 5:
 					{
 						st.giveItems(Reward[Rnd.get(Reward.length)][getRandom(Reward[0].length)], 1);
-						st.playSound("ItemSound.quest_finish");
+						st.exitQuest(QuestType.DAILY, true);
 						htmltext = "32734-14.html";
-						st.exitQuest(QuestType.DAILY);
 						break;
 					}
 				}
@@ -258,7 +257,7 @@ public class Q00453_NotStrongEnoughAlone extends Quest
 				if (i < 15)
 				{
 					st.set(Integer.toString(npcId), Integer.toString(i + 1));
-					st.playSound("ItemSound.quest_itemget");
+					st.playSound(QuestSound.ITEMSOUND_QUEST_ITEMGET);
 				}
 				
 				checkProgress(st, 15, Monsters1[0], Monsters1[1], Monsters1[2], Monsters1[3]);
@@ -287,7 +286,7 @@ public class Q00453_NotStrongEnoughAlone extends Quest
 				if (i < 20)
 				{
 					st.set(Integer.toString(npcId), Integer.toString(i + 1));
-					st.playSound("ItemSound.quest_itemget");
+					st.playSound(QuestSound.ITEMSOUND_QUEST_ITEMGET);
 				}
 				
 				checkProgress(st, 20, Monsters2[0], Monsters2[1], Monsters2[2]);
@@ -315,7 +314,7 @@ public class Q00453_NotStrongEnoughAlone extends Quest
 				if (i < 20)
 				{
 					st.set(Integer.toString(npcId), Integer.toString(i + 1));
-					st.playSound("ItemSound.quest_itemget");
+					st.playSound(QuestSound.ITEMSOUND_QUEST_ITEMGET);
 				}
 				
 				checkProgress(st, 20, Monsters3[0], Monsters3[1], Monsters3[2]);
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00508_AClansReputation/Q00508_AClansReputation.java b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00508_AClansReputation/Q00508_AClansReputation.java
index e7a63b948c..9f632d266d 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00508_AClansReputation/Q00508_AClansReputation.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00508_AClansReputation/Q00508_AClansReputation.java
@@ -137,7 +137,7 @@ public class Q00508_AClansReputation extends Quest
 					if (st.hasQuestItems(REWARD_POINTS.get(raid).get(1)))
 					{
 						htmltext = "30868-" + raid + "b.html";
-						st.playSound("ItemSound.quest_fanfare_1");
+						st.playSound(QuestSound.ITEMSOUND_QUEST_FANFARE_1);
 						st.takeItems(REWARD_POINTS.get(raid).get(1), -1);
 						final int rep = REWARD_POINTS.get(raid).get(2);
 						clan.addReputationScore(rep, true);
@@ -190,7 +190,7 @@ public class Q00508_AClansReputation extends Quest
 				if ((npc.getNpcId() == REWARD_POINTS.get(raid).get(0)) && !st.hasQuestItems(REWARD_POINTS.get(raid).get(1)))
 				{
 					st.rewardItems(REWARD_POINTS.get(raid).get(1), 1);
-					st.playSound("ItemSound.quest_itemget");
+					st.playSound(QuestSound.ITEMSOUND_QUEST_ITEMGET);
 				}
 			}
 		}
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00509_AClansFame/Q00509_AClansFame.java b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00509_AClansFame/Q00509_AClansFame.java
index 387cf7de28..50631ac394 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00509_AClansFame/Q00509_AClansFame.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00509_AClansFame/Q00509_AClansFame.java
@@ -124,7 +124,7 @@ public class Q00509_AClansFame extends Quest
 					if (st.hasQuestItems(REWARD_POINTS.get(raid).get(1)))
 					{
 						htmltext = "31331-" + raid + "b.html";
-						st.playSound("ItemSound.quest_fanfare_1");
+						st.playSound(QuestSound.ITEMSOUND_QUEST_FANFARE_1);
 						st.takeItems(REWARD_POINTS.get(raid).get(1), -1);
 						final int rep = REWARD_POINTS.get(raid).get(2);
 						clan.addReputationScore(rep, true);
@@ -177,7 +177,7 @@ public class Q00509_AClansFame extends Quest
 				if ((npc.getNpcId() == REWARD_POINTS.get(raid).get(0)) && !st.hasQuestItems(REWARD_POINTS.get(raid).get(1)))
 				{
 					st.rewardItems(REWARD_POINTS.get(raid).get(1), 1);
-					st.playSound("ItemSound.quest_itemget");
+					st.playSound(QuestSound.ITEMSOUND_QUEST_ITEMGET);
 				}
 			}
 		}
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00510_AClansPrestige/Q00510_AClansPrestige.java b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00510_AClansPrestige/Q00510_AClansPrestige.java
index 634d21c33f..841c314f28 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00510_AClansPrestige/Q00510_AClansPrestige.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00510_AClansPrestige/Q00510_AClansPrestige.java
@@ -96,7 +96,7 @@ public class Q00510_AClansPrestige extends Quest
 				{
 					int count = (int) st.getQuestItemsCount(TYRANNOSAURUS_CLAW);
 					int reward = (count < 10) ? (30 * count) : (59 + (30 * count));
-					st.playSound("ItemSound.quest_fanfare_1");
+					st.playSound(QuestSound.ITEMSOUND_QUEST_FANFARE_1);
 					st.takeItems(TYRANNOSAURUS_CLAW, -1);
 					clan.addReputationScore(reward, true);
 					player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.CLAN_QUEST_COMPLETED_AND_S1_POINTS_GAINED).addNumber(reward));
@@ -135,7 +135,7 @@ public class Q00510_AClansPrestige extends Quest
 		if ((st != null) && st.isStarted())
 		{
 			st.rewardItems(TYRANNOSAURUS_CLAW, 1);
-			st.playSound("ItemSound.quest_itemget");
+			st.playSound(QuestSound.ITEMSOUND_QUEST_ITEMGET);
 		}
 		return null;
 	}
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00511_AwlUnderFoot/Q00511_AwlUnderFoot.java b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00511_AwlUnderFoot/Q00511_AwlUnderFoot.java
index 591a54ec79..88e243b096 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00511_AwlUnderFoot/Q00511_AwlUnderFoot.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00511_AwlUnderFoot/Q00511_AwlUnderFoot.java
@@ -20,7 +20,6 @@ import java.util.logging.Logger;
 
 import com.l2jserver.gameserver.ThreadPoolManager;
 import com.l2jserver.gameserver.instancemanager.InstanceManager;
-import com.l2jserver.gameserver.instancemanager.InstanceManager.InstanceWorld;
 import com.l2jserver.gameserver.model.L2Party;
 import com.l2jserver.gameserver.model.Location;
 import com.l2jserver.gameserver.model.actor.L2Npc;
@@ -30,6 +29,7 @@ import com.l2jserver.gameserver.model.actor.instance.L2RaidBossInstance;
 import com.l2jserver.gameserver.model.entity.Fort;
 import com.l2jserver.gameserver.model.entity.Instance;
 import com.l2jserver.gameserver.model.holders.SkillHolder;
+import com.l2jserver.gameserver.model.instancezone.InstanceWorld;
 import com.l2jserver.gameserver.model.quest.Quest;
 import com.l2jserver.gameserver.model.quest.QuestState;
 import com.l2jserver.gameserver.model.quest.State;
@@ -46,6 +46,7 @@ public final class Q00511_AwlUnderFoot extends Quest
 	
 	protected class FAUWorld extends InstanceWorld
 	{
+		
 	}
 	
 	public static class FortDungeon
@@ -157,7 +158,7 @@ public final class Q00511_AwlUnderFoot extends Quest
 				player.sendPacket(SystemMessageId.ALREADY_ENTERED_ANOTHER_INSTANCE_CANT_ENTER);
 				return "";
 			}
-			teleportPlayer(player, coords, world.instanceId);
+			teleportPlayer(player, coords, world.getInstanceId());
 			return "";
 		}
 		// New instance
@@ -175,9 +176,9 @@ public final class Q00511_AwlUnderFoot extends Quest
 		Instance ins = InstanceManager.getInstance().getInstance(instanceId);
 		ins.setSpawnLoc(new Location(player));
 		world = new FAUWorld();
-		world.instanceId = instanceId;
-		world.templateId = dungeon.getInstanceId();
-		world.status = 0;
+		world.setInstanceId(instanceId);
+		world.setTemplateId(dungeon.getInstanceId());
+		world.setStatus(0);
 		dungeon.setReEnterTime(System.currentTimeMillis() + REENTERTIME);
 		InstanceManager.getInstance().addWorld(world);
 		log.info("Fortress AwlUnderFoot started " + template + " Instance: " + instanceId + " created by player: " + player.getName());
@@ -187,14 +188,14 @@ public final class Q00511_AwlUnderFoot extends Quest
 		if (player.getParty() == null)
 		{
 			teleportPlayer(player, coords, instanceId);
-			world.allowed.add(player.getObjectId());
+			world.addAllowed(player.getObjectId());
 		}
 		else
 		{
 			for (L2PcInstance partyMember : party.getMembers())
 			{
 				teleportPlayer(partyMember, coords, instanceId);
-				world.allowed.add(partyMember.getObjectId());
+				world.addAllowed(partyMember.getObjectId());
 				if (partyMember.getQuestState(getName()) == null)
 				{
 					newQuestState(partyMember);
@@ -219,11 +220,11 @@ public final class Q00511_AwlUnderFoot extends Quest
 			try
 			{
 				int spawnId;
-				if (_world.status == 0)
+				if (_world.getStatus() == 0)
 				{
 					spawnId = RAIDS1[getRandom(RAIDS1.length)];
 				}
-				else if (_world.status == 1)
+				else if (_world.getStatus() == 1)
 				{
 					spawnId = RAIDS2[getRandom(RAIDS2.length)];
 				}
@@ -231,7 +232,7 @@ public final class Q00511_AwlUnderFoot extends Quest
 				{
 					spawnId = RAIDS3[getRandom(RAIDS3.length)];
 				}
-				L2Npc raid = addSpawn(spawnId, 53319, 245814, -6576, 0, false, 0, false, _world.instanceId);
+				L2Npc raid = addSpawn(spawnId, 53319, 245814, -6576, 0, false, 0, false, _world.getInstanceId());
 				if (raid instanceof L2RaidBossInstance)
 				{
 					((L2RaidBossInstance) raid).setUseRaidCurse(false);
@@ -281,17 +282,16 @@ public final class Q00511_AwlUnderFoot extends Quest
 				return getHtm(player.getHtmlPrefix(), "FortressWarden-05.htm").replace("%player%", partyMember.getName());
 			}
 		}
-		
 		return null;
 	}
 	
 	private void rewardPlayer(L2PcInstance player)
 	{
 		QuestState st = player.getQuestState(getName());
-		if (st.getInt("cond") == 1)
+		if (st.isCond(1))
 		{
 			st.giveItems(DL_MARK, 140);
-			st.playSound("ItemSound.quest_itemget");
+			st.playSound(QuestSound.ITEMSOUND_QUEST_ITEMGET);
 		}
 	}
 	
@@ -313,20 +313,16 @@ public final class Q00511_AwlUnderFoot extends Quest
 			st = newQuestState(player);
 		}
 		
-		int cond = st.getInt("cond");
 		if (event.equalsIgnoreCase("FortressWarden-10.htm"))
 		{
-			if (cond == 0)
+			if (st.isCond(0))
 			{
-				st.set("cond", "1");
-				st.setState(State.STARTED);
-				st.playSound("ItemSound.quest_accept");
+				st.startQuest();
 			}
 		}
 		else if (event.equalsIgnoreCase("FortressWarden-15.htm"))
 		{
-			st.playSound("ItemSound.quest_finish");
-			st.exitQuest(true);
+			st.exitQuest(true, true);
 		}
 		return htmltext;
 	}
@@ -430,13 +426,13 @@ public final class Q00511_AwlUnderFoot extends Quest
 					rewardPlayer(player);
 				}
 				
-				Instance instanceObj = InstanceManager.getInstance().getInstance(world.instanceId);
+				Instance instanceObj = InstanceManager.getInstance().getInstance(world.getInstanceId());
 				instanceObj.setDuration(360000);
 				instanceObj.removeNpcs();
 			}
 			else
 			{
-				world.status++;
+				world.incStatus();
 				ThreadPoolManager.getInstance().scheduleGeneral(new spawnRaid(world), RAID_SPAWN_DELAY);
 			}
 		}
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00551_OlympiadStarter/Q00551_OlympiadStarter.java b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00551_OlympiadStarter/Q00551_OlympiadStarter.java
index 01bd174d61..7d3fbd6f2a 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00551_OlympiadStarter/Q00551_OlympiadStarter.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00551_OlympiadStarter/Q00551_OlympiadStarter.java
@@ -45,12 +45,7 @@ public class Q00551_OlympiadStarter extends Quest
 		
 		addStartNpc(MANAGER);
 		addTalkId(MANAGER);
-		questItemIds = new int[]
-		{
-			CERT_3,
-			CERT_5,
-			CERT_10
-		};
+		registerQuestItems(CERT_3, CERT_5, CERT_10);
 		setOlympiadUse(true);
 	}
 	
@@ -66,9 +61,7 @@ public class Q00551_OlympiadStarter extends Quest
 		
 		if (event.equalsIgnoreCase("31688-03.html"))
 		{
-			st.setState(State.STARTED);
-			st.set("cond", "1");
-			st.playSound("ItemSound.quest_accept");
+			st.startQuest();
 		}
 		else if (event.equalsIgnoreCase("31688-04.html"))
 		{
@@ -80,8 +73,7 @@ public class Q00551_OlympiadStarter extends Quest
 				{
 					st.giveItems(MEDAL_OF_GLORY, 3);
 				}
-				st.playSound("ItemSound.quest_finish");
-				st.exitQuest(QuestType.DAILY);
+				st.exitQuest(QuestType.DAILY, true);
 			}
 			else
 			{
@@ -129,11 +121,10 @@ public class Q00551_OlympiadStarter extends Quest
 			final long count = st.getQuestItemsCount(CERT_3) + st.getQuestItemsCount(CERT_5) + st.getQuestItemsCount(CERT_10);
 			if (count == 3)
 			{
-				htmltext = "31688-04.html"; // reusing the same html
+				htmltext = "31688-04.html";
 				st.giveItems(OLY_CHEST, 4);
 				st.giveItems(MEDAL_OF_GLORY, 5);
-				st.playSound("ItemSound.quest_finish");
-				st.exitQuest(QuestType.DAILY);
+				st.exitQuest(QuestType.DAILY, true);
 			}
 			else
 			{
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00552_OlympiadVeteran/Q00552_OlympiadVeteran.java b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00552_OlympiadVeteran/Q00552_OlympiadVeteran.java
index 4ff64f2fe7..2444fbb4fc 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00552_OlympiadVeteran/Q00552_OlympiadVeteran.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00552_OlympiadVeteran/Q00552_OlympiadVeteran.java
@@ -65,9 +65,7 @@ public class Q00552_OlympiadVeteran extends Quest
 		
 		if (event.equalsIgnoreCase("31688-03.html"))
 		{
-			st.setState(State.STARTED);
-			st.set("cond", "1");
-			st.playSound("ItemSound.quest_accept");
+			st.startQuest();
 		}
 		else if (event.equalsIgnoreCase("31688-04.html"))
 		{
@@ -76,8 +74,7 @@ public class Q00552_OlympiadVeteran extends Quest
 			if (count > 0)
 			{
 				st.giveItems(OLY_CHEST, count);
-				st.playSound("ItemSound.quest_finish");
-				st.exitQuest(QuestType.DAILY);
+				st.exitQuest(QuestType.DAILY, true);
 			}
 			else
 			{
@@ -126,10 +123,9 @@ public class Q00552_OlympiadVeteran extends Quest
 			
 			if (count == 3)
 			{
-				htmltext = "31688-04.html"; // reusing the same html
+				htmltext = "31688-04.html";
 				st.giveItems(OLY_CHEST, 4);
-				st.playSound("ItemSound.quest_finish");
-				st.exitQuest(QuestType.DAILY);
+				st.exitQuest(QuestType.DAILY, true);
 			}
 			else
 			{
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00553_OlympiadUndefeated/Q00553_OlympiadUndefeated.java b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00553_OlympiadUndefeated/Q00553_OlympiadUndefeated.java
index 71043a73ea..2c79abf1bc 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00553_OlympiadUndefeated/Q00553_OlympiadUndefeated.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00553_OlympiadUndefeated/Q00553_OlympiadUndefeated.java
@@ -45,12 +45,7 @@ public class Q00553_OlympiadUndefeated extends Quest
 		
 		addStartNpc(MANAGER);
 		addTalkId(MANAGER);
-		questItemIds = new int[]
-		{
-			WIN_CONF_2,
-			WIN_CONF_5,
-			WIN_CONF_10
-		};
+		registerQuestItems(WIN_CONF_2, WIN_CONF_5, WIN_CONF_10);
 		setOlympiadUse(true);
 	}
 	
@@ -66,9 +61,7 @@ public class Q00553_OlympiadUndefeated extends Quest
 		
 		if (event.equalsIgnoreCase("31688-03.html"))
 		{
-			st.setState(State.STARTED);
-			st.set("cond", "1");
-			st.playSound("ItemSound.quest_accept");
+			st.startQuest();
 		}
 		else if (event.equalsIgnoreCase("31688-04.html"))
 		{
@@ -81,8 +74,7 @@ public class Q00553_OlympiadUndefeated extends Quest
 				{
 					st.giveItems(MEDAL_OF_GLORY, 3);
 				}
-				st.playSound("ItemSound.quest_finish");
-				st.exitQuest(QuestType.DAILY);
+				st.exitQuest(QuestType.DAILY, true);
 			}
 			else
 			{
@@ -130,11 +122,10 @@ public class Q00553_OlympiadUndefeated extends Quest
 			final long count = st.getQuestItemsCount(WIN_CONF_2) + st.getQuestItemsCount(WIN_CONF_5) + st.getQuestItemsCount(WIN_CONF_10);
 			if ((count == 3) && (st.getInt("cond") == 2))
 			{
-				htmltext = "31688-04.html";
 				st.giveItems(OLY_CHEST, 4);
 				st.giveItems(MEDAL_OF_GLORY, 5);
-				st.playSound("ItemSound.quest_finish");
-				st.exitQuest(QuestType.DAILY);
+				st.exitQuest(QuestType.DAILY, true);
+				htmltext = "31688-04.html";
 			}
 			else
 			{
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00601_WatchingEyes/Q00601_WatchingEyes.java b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00601_WatchingEyes/Q00601_WatchingEyes.java
index feaa03ef40..80a35b6ca3 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00601_WatchingEyes/Q00601_WatchingEyes.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00601_WatchingEyes/Q00601_WatchingEyes.java
@@ -144,7 +144,7 @@ public class Q00601_WatchingEyes extends Quest
 			}
 			else
 			{
-				st.playSound("ItemSound.quest_itemget");
+				st.playSound(QuestSound.ITEMSOUND_QUEST_ITEMGET);
 			}
 		}
 		
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00602_ShadowOfLight/Q00602_ShadowOfLight.java b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00602_ShadowOfLight/Q00602_ShadowOfLight.java
index 19b167c53b..cc126da669 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00602_ShadowOfLight/Q00602_ShadowOfLight.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00602_ShadowOfLight/Q00602_ShadowOfLight.java
@@ -151,7 +151,7 @@ public class Q00602_ShadowOfLight extends Quest
 			}
 			else
 			{
-				st.playSound("ItemSound.quest_itemget");
+				st.playSound(QuestSound.ITEMSOUND_QUEST_ITEMGET);
 			}
 		}
 		return super.onKill(npc, player, isPet);
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00637_ThroughOnceMore/Q00637_ThroughOnceMore.java b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00637_ThroughOnceMore/Q00637_ThroughOnceMore.java
index 5b9ae1eced..a91e02f84f 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00637_ThroughOnceMore/Q00637_ThroughOnceMore.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00637_ThroughOnceMore/Q00637_ThroughOnceMore.java
@@ -49,11 +49,7 @@ public final class Q00637_ThroughOnceMore extends Quest
 		addStartNpc(FLAURON);
 		addTalkId(FLAURON);
 		addKillId(MOBS);
-		
-		questItemIds = new int[]
-		{
-			NECRO_HEART
-		};
+		registerQuestItems(NECRO_HEART);
 	}
 	
 	@Override
@@ -150,7 +146,7 @@ public final class Q00637_ThroughOnceMore extends Quest
 					}
 					else
 					{
-						st.playSound("ItemSound.quest_itemget");
+						st.playSound(QuestSound.ITEMSOUND_QUEST_ITEMGET);
 					}
 					
 					st.giveItems(NECRO_HEART, numItems);
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00641_AttackSailren/Q00641_AttackSailren.java b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00641_AttackSailren/Q00641_AttackSailren.java
index f4df99789a..1d7b66bb09 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00641_AttackSailren/Q00641_AttackSailren.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00641_AttackSailren/Q00641_AttackSailren.java
@@ -111,7 +111,7 @@ public class Q00641_AttackSailren extends Quest
 				st.giveItems(GAZKH_FRAGMENT, 1);
 				if (st.getQuestItemsCount(GAZKH_FRAGMENT) < 30)
 				{
-					st.playSound("ItemSound.quest_itemget");
+					st.playSound(QuestSound.ITEMSOUND_QUEST_ITEMGET);
 				}
 				else
 				{
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00642_APowerfulPrimevalCreature/Q00642_APowerfulPrimevalCreature.java b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00642_APowerfulPrimevalCreature/Q00642_APowerfulPrimevalCreature.java
index 64397ae7a6..b5fa411319 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00642_APowerfulPrimevalCreature/Q00642_APowerfulPrimevalCreature.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00642_APowerfulPrimevalCreature/Q00642_APowerfulPrimevalCreature.java
@@ -134,13 +134,13 @@ public class Q00642_APowerfulPrimevalCreature extends Quest
 			if (getRandom(1000) < chance)
 			{
 				st.rewardItems(DINOSAUR_TISSUE, 1);
-				st.playSound("ItemSound.quest_itemget");
+				st.playSound(QuestSound.ITEMSOUND_QUEST_ITEMGET);
 			}
 		}
 		else if (npcId == ANCIENT_EGG)
 		{
 			st.rewardItems(DINOSAUR_EGG, 1);
-			st.playSound("ItemSound.quest_itemget");
+			st.playSound(QuestSound.ITEMSOUND_QUEST_ITEMGET);
 		}
 		return super.onKill(npc, player, isPet);
 	}
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00690_JudesRequest/Q00690_JudesRequest.java b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00690_JudesRequest/Q00690_JudesRequest.java
index 504e33bde6..7f9565fcb2 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00690_JudesRequest/Q00690_JudesRequest.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00690_JudesRequest/Q00690_JudesRequest.java
@@ -73,9 +73,7 @@ public class Q00690_JudesRequest extends Quest
 		
 		if (event.equalsIgnoreCase("32356-03.htm"))
 		{
-			st.set("cond", "1");
-			st.setState(State.STARTED);
-			st.playSound("ItemSound.quest_accept");
+			st.startQuest();
 		}
 		else if (event.equalsIgnoreCase("32356-07.htm"))
 		{
@@ -83,7 +81,7 @@ public class Q00690_JudesRequest extends Quest
 			{
 				st.giveItems(REWARDS[0][getRandom(REWARDS[0].length)], 1);
 				st.takeItems(EVIL_WEAPON, 200);
-				st.playSound("ItemSound.quest_middle");
+				st.playSound(QuestSound.ITEMSOUND_QUEST_MIDDLE);
 				htmltext = "32356-07.htm";
 			}
 			else
@@ -94,8 +92,7 @@ public class Q00690_JudesRequest extends Quest
 		else if (event.equalsIgnoreCase("32356-08.htm"))
 		{
 			st.takeItems(EVIL_WEAPON, -1);
-			st.playSound("ItemSound.quest_finish");
-			st.exitQuest(true);
+			st.exitQuest(true, true);
 		}
 		else if (event.equalsIgnoreCase("32356-09.htm"))
 		{
@@ -103,7 +100,7 @@ public class Q00690_JudesRequest extends Quest
 			{
 				st.giveItems(REWARDS[1][getRandom(REWARDS[1].length)], 1);
 				st.takeItems(EVIL_WEAPON, 5);
-				st.playSound("ItemSound.quest_middle");
+				st.playSound(QuestSound.ITEMSOUND_QUEST_MIDDLE);
 				htmltext = "32356-09.htm";
 			}
 			else
@@ -183,7 +180,7 @@ public class Q00690_JudesRequest extends Quest
 		if (getRandom(1000) <= chance)
 		{
 			st.giveItems(EVIL_WEAPON, Math.max(chance / 1000, 1));
-			st.playSound("ItemSound.quest_itemget");
+			st.playSound(QuestSound.ITEMSOUND_QUEST_ITEMGET);
 		}
 		return null;
 	}
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00691_MatrasSuspiciousRequest/Q00691_MatrasSuspiciousRequest.java b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00691_MatrasSuspiciousRequest/Q00691_MatrasSuspiciousRequest.java
index c8549d3e45..130ca12759 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00691_MatrasSuspiciousRequest/Q00691_MatrasSuspiciousRequest.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00691_MatrasSuspiciousRequest/Q00691_MatrasSuspiciousRequest.java
@@ -81,9 +81,7 @@ public final class Q00691_MatrasSuspiciousRequest extends Quest
 		{
 			if (player.getLevel() >= 76)
 			{
-				st.setState(State.STARTED);
-				st.set("cond", "1");
-				st.playSound("ItemSound.quest_accept");
+				st.startQuest();
 			}
 			else
 			{
@@ -115,8 +113,7 @@ public final class Q00691_MatrasSuspiciousRequest extends Quest
 		else if (event.equalsIgnoreCase("32245-12.htm"))
 		{
 			st.giveItems(57, (st.getInt("submitted_gems") * 10000));
-			st.playSound("IItemSound.quest_finish");
-			st.exitQuest(true);
+			st.exitQuest(true, true);
 		}
 		return htmltext;
 	}
@@ -177,7 +174,7 @@ public final class Q00691_MatrasSuspiciousRequest extends Quest
 		if (getRandom(1000) <= chance)
 		{
 			st.giveItems(RED_GEM, numItems);
-			st.playSound("ItemSound.quest_itemget");
+			st.playSound(QuestSound.ITEMSOUND_QUEST_ITEMGET);
 		}
 		return null;
 	}
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00692_HowtoOpposeEvil/Q00692_HowtoOpposeEvil.java b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00692_HowtoOpposeEvil/Q00692_HowtoOpposeEvil.java
index ccd0ea6ea9..702ae16770 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00692_HowtoOpposeEvil/Q00692_HowtoOpposeEvil.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00692_HowtoOpposeEvil/Q00692_HowtoOpposeEvil.java
@@ -23,7 +23,6 @@ import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.holders.ItemHolder;
 import com.l2jserver.gameserver.model.quest.Quest;
 import com.l2jserver.gameserver.model.quest.QuestState;
-import com.l2jserver.gameserver.model.quest.State;
 
 /**
  * How to Oppose Evil (692)
@@ -122,9 +121,7 @@ public final class Q00692_HowtoOpposeEvil extends Quest
 		}
 		if (event.equalsIgnoreCase("32549-03.htm"))
 		{
-			st.set("cond", "1");
-			st.setState(State.STARTED);
-			st.playSound("ItemSound.quest_accept");
+			st.startQuest();
 		}
 		else if (event.equalsIgnoreCase("32550-04.htm"))
 		{
@@ -249,7 +246,7 @@ public final class Q00692_HowtoOpposeEvil extends Quest
 			if (numItems > 0)
 			{
 				st.giveItems(_questMobs.get(npcId).getId(), numItems);
-				st.playSound("ItemSound.quest_itemget");
+				st.playSound(QuestSound.ITEMSOUND_QUEST_ITEMGET);
 			}
 		}
 		return null;
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00702_ATrapForRevenge/Q00702_ATrapForRevenge.java b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00702_ATrapForRevenge/Q00702_ATrapForRevenge.java
index 4f97d93a42..518f18b737 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00702_ATrapForRevenge/Q00702_ATrapForRevenge.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00702_ATrapForRevenge/Q00702_ATrapForRevenge.java
@@ -61,9 +61,7 @@ public class Q00702_ATrapForRevenge extends Quest
 		
 		if (event.equalsIgnoreCase("32563-04.htm"))
 		{
-			st.set("cond", "1");
-			st.setState(State.STARTED);
-			st.playSound("ItemSound.quest_accept");
+			st.startQuest();
 		}
 		else if (event.equalsIgnoreCase("32563-07.html"))
 		{
@@ -89,8 +87,7 @@ public class Q00702_ATrapForRevenge extends Quest
 		}
 		else if (event.equalsIgnoreCase("32563-14.html"))
 		{
-			st.playSound("ItemSound.quest_finish");
-			st.exitQuest(true);
+			st.exitQuest(true, true);
 		}
 		else if (event.equalsIgnoreCase("32557-03.html"))
 		{
@@ -116,13 +113,11 @@ public class Q00702_ATrapForRevenge extends Quest
 		}
 		else if (event.equalsIgnoreCase("32555-03.html"))
 		{
-			st.set("cond", "2");
-			st.playSound("ItemSound.quest_middle");
+			st.setCond(2, true);
 		}
 		else if (event.equalsIgnoreCase("32555-05.html"))
 		{
-			st.playSound("ItemSound.quest_finish");
-			st.exitQuest(true);
+			st.exitQuest(true, true);
 		}
 		else if (event.equalsIgnoreCase("32555-06.html"))
 		{
@@ -401,7 +396,7 @@ public class Q00702_ATrapForRevenge extends Quest
 				st.giveItems(VariantDrakeWingHorns, count);
 				break;
 		}
-		st.playSound("ItemSound.quest_itemget");
+		st.playSound(QuestSound.ITEMSOUND_QUEST_ITEMGET);
 		return null;
 	}
 	
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q10267_JourneyToGracia/Q10267_JourneyToGracia.java b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q10267_JourneyToGracia/Q10267_JourneyToGracia.java
index fe6b455c4b..03cf14e49a 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q10267_JourneyToGracia/Q10267_JourneyToGracia.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q10267_JourneyToGracia/Q10267_JourneyToGracia.java
@@ -31,7 +31,6 @@ public class Q10267_JourneyToGracia extends Quest
 	private static final int ORVEN = 30857;
 	private static final int KEUCEREUS = 32548;
 	private static final int PAPIKU = 32564;
-	
 	// Items
 	private static final int LETTER = 13810;
 	
@@ -113,10 +112,7 @@ public class Q10267_JourneyToGracia extends Quest
 		super(questId, name, descr);
 		addStartNpc(ORVEN);
 		addTalkId(ORVEN, KEUCEREUS, PAPIKU);
-		questItemIds = new int[]
-		{
-			LETTER
-		};
+		registerQuestItems(LETTER);
 	}
 	
 	public static void main(String[] args)
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q10268_ToTheSeedOfInfinity/Q10268_ToTheSeedOfInfinity.java b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q10268_ToTheSeedOfInfinity/Q10268_ToTheSeedOfInfinity.java
index 2f6685cb81..f618dbdacc 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q10268_ToTheSeedOfInfinity/Q10268_ToTheSeedOfInfinity.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q10268_ToTheSeedOfInfinity/Q10268_ToTheSeedOfInfinity.java
@@ -30,7 +30,6 @@ public class Q10268_ToTheSeedOfInfinity extends Quest
 	// NPCs
 	private static final int KEUCEREUS = 32548;
 	private static final int TEPIOS = 32603;
-	
 	// Items
 	private static final int INTRODUCTION = 13811;
 	
@@ -102,10 +101,7 @@ public class Q10268_ToTheSeedOfInfinity extends Quest
 		super(questId, name, descr);
 		addStartNpc(KEUCEREUS);
 		addTalkId(KEUCEREUS, TEPIOS);
-		questItemIds = new int[]
-		{
-			INTRODUCTION
-		};
+		registerQuestItems(INTRODUCTION);
 	}
 	
 	public static void main(String[] args)
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q10269_ToTheSeedOfDestruction/Q10269_ToTheSeedOfDestruction.java b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q10269_ToTheSeedOfDestruction/Q10269_ToTheSeedOfDestruction.java
index 497557fb4c..bd49b95c98 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q10269_ToTheSeedOfDestruction/Q10269_ToTheSeedOfDestruction.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q10269_ToTheSeedOfDestruction/Q10269_ToTheSeedOfDestruction.java
@@ -30,7 +30,6 @@ public class Q10269_ToTheSeedOfDestruction extends Quest
 	// NPCs
 	private static final int KEUCEREUS = 32548;
 	private static final int ALLENOS = 32526;
-	
 	// Items
 	private static final int INTRODUCTION = 13812;
 	
@@ -102,10 +101,7 @@ public class Q10269_ToTheSeedOfDestruction extends Quest
 		super(questId, name, descr);
 		addStartNpc(KEUCEREUS);
 		addTalkId(KEUCEREUS, ALLENOS);
-		questItemIds = new int[]
-		{
-			INTRODUCTION
-		};
+		registerQuestItems(INTRODUCTION);
 	}
 	
 	public static void main(String[] args)
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q10271_TheEnvelopingDarkness/Q10271_TheEnvelopingDarkness.java b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q10271_TheEnvelopingDarkness/Q10271_TheEnvelopingDarkness.java
index 7f1327e7a1..5955ed0eb5 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q10271_TheEnvelopingDarkness/Q10271_TheEnvelopingDarkness.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q10271_TheEnvelopingDarkness/Q10271_TheEnvelopingDarkness.java
@@ -53,7 +53,7 @@ public class Q10271_TheEnvelopingDarkness extends Quest
 						htmltext = ((player.getLevel() >= 75) && (st != null) && st.isCompleted()) ? "32560-01.htm" : "32560-02.html";
 						break;
 					case State.STARTED:
-						switch (st.getInt("cond"))
+						switch (st.getCond())
 						{
 							case 1:
 								htmltext = "32560-05.html"; // TODO this html should most probably be different
@@ -85,7 +85,7 @@ public class Q10271_TheEnvelopingDarkness extends Quest
 				}
 				else if (st.isStarted())
 				{
-					switch (st.getInt("cond"))
+					switch (st.getCond())
 					{
 						case 1:
 							htmltext = "32556-01.html";
@@ -109,7 +109,7 @@ public class Q10271_TheEnvelopingDarkness extends Quest
 				}
 				else if (st.isStarted())
 				{
-					switch (st.getInt("cond"))
+					switch (st.getCond())
 					{
 						case 2:
 							htmltext = "32528-01.html";
@@ -162,10 +162,7 @@ public class Q10271_TheEnvelopingDarkness extends Quest
 		super(questId, name, descr);
 		addStartNpc(ORBYU);
 		addTalkId(ORBYU, EL, MEDIBAL_CORPSE);
-		questItemIds = new int[]
-		{
-			MEDIBAL_DOCUMENT
-		};
+		registerQuestItems(MEDIBAL_DOCUMENT);
 	}
 	
 	public static void main(String[] args)
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q10272_LightFragment/Q10272_LightFragment.java b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q10272_LightFragment/Q10272_LightFragment.java
index f6a7392a4a..26c2e5d78d 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q10272_LightFragment/Q10272_LightFragment.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q10272_LightFragment/Q10272_LightFragment.java
@@ -308,7 +308,7 @@ public class Q10272_LightFragment extends Quest
 					if (numItems > 0)
 					{
 						st.giveItems(FRAGMENT_POWDER, numItems);
-						st.playSound("ItemSound.quest_itemget");
+						st.playSound(QuestSound.ITEMSOUND_QUEST_ITEMGET);
 					}
 				}
 			}
@@ -322,11 +322,7 @@ public class Q10272_LightFragment extends Quest
 		addStartNpc(ORBYU);
 		addTalkId(ORBYU, ARTIUS, GINBY, LELRIKIA, LEKON);
 		addKillId(MOBS);
-		questItemIds = new int[]
-		{
-			FRAGMENT_POWDER,
-			LIGHT_FRAGMENT_POWDER,
-		};
+		registerQuestItems(FRAGMENT_POWDER, LIGHT_FRAGMENT_POWDER);
 	}
 	
 	public static void main(String[] args)
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q10273_GoodDayToFly/Q10273_GoodDayToFly.java b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q10273_GoodDayToFly/Q10273_GoodDayToFly.java
index fa980127a4..77379e2197 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q10273_GoodDayToFly/Q10273_GoodDayToFly.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q10273_GoodDayToFly/Q10273_GoodDayToFly.java
@@ -14,13 +14,12 @@
  */
 package quests.Q10273_GoodDayToFly;
 
-import com.l2jserver.gameserver.datatables.SkillTable;
 import com.l2jserver.gameserver.model.actor.L2Npc;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jserver.gameserver.model.holders.SkillHolder;
 import com.l2jserver.gameserver.model.quest.Quest;
 import com.l2jserver.gameserver.model.quest.QuestState;
 import com.l2jserver.gameserver.model.quest.State;
-import com.l2jserver.gameserver.model.skills.L2Skill;
 
 /**
  * Good Day to Fly (10273)<br>
@@ -31,7 +30,7 @@ public class Q10273_GoodDayToFly extends Quest
 {
 	// NPCs
 	private static final int LEKON = 32557;
-	
+	// Monsters
 	private static final int[] MOBS =
 	{
 		22614, // Vulture Rider
@@ -40,10 +39,9 @@ public class Q10273_GoodDayToFly extends Quest
 	
 	// Items
 	private static final int MARK = 13856;
-	
 	// Skills
-	private static final L2Skill AuraBirdFalcon = SkillTable.getInstance().getInfo(5982, 1);
-	private static final L2Skill AuraBirdOwl = SkillTable.getInstance().getInfo(5983, 1);
+	private static final SkillHolder AURA_BIRD_FALCON = new SkillHolder(5982, 1);
+	private static final SkillHolder AURA_BIRD_OWL = new SkillHolder(5983, 1);
 	
 	@Override
 	public String onTalk(L2Npc npc, L2PcInstance player)
@@ -109,20 +107,20 @@ public class Q10273_GoodDayToFly extends Quest
 				break;
 			case "32557-09.html":
 				st.set("transform", "1");
-				AuraBirdFalcon.getEffects(player, player);
+				AURA_BIRD_FALCON.getSkill().getEffects(player, player);
 				break;
 			case "32557-10.html":
 				st.set("transform", "2");
-				AuraBirdOwl.getEffects(player, player);
+				AURA_BIRD_OWL.getSkill().getEffects(player, player);
 				break;
 			case "32557-13.html":
 				switch (st.getInt("transform"))
 				{
 					case 1:
-						AuraBirdFalcon.getEffects(player, player);
+						AURA_BIRD_FALCON.getSkill().getEffects(player, player);
 						break;
 					case 2:
-						AuraBirdOwl.getEffects(player, player);
+						AURA_BIRD_OWL.getSkill().getEffects(player, player);
 						break;
 				}
 				break;
@@ -149,7 +147,7 @@ public class Q10273_GoodDayToFly extends Quest
 			}
 			else
 			{
-				st.playSound("ItemSound.quest_itemget");
+				st.playSound(QuestSound.ITEMSOUND_QUEST_ITEMGET);
 			}
 		}
 		return null;
@@ -161,10 +159,7 @@ public class Q10273_GoodDayToFly extends Quest
 		addStartNpc(LEKON);
 		addTalkId(LEKON);
 		addKillId(MOBS);
-		questItemIds = new int[]
-		{
-			MARK
-		};
+		registerQuestItems(MARK);
 	}
 	
 	public static void main(String[] args)
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q10274_CollectingInTheAir/Q10274_CollectingInTheAir.java b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q10274_CollectingInTheAir/Q10274_CollectingInTheAir.java
index 186b3fa6d2..4325f4f34d 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q10274_CollectingInTheAir/Q10274_CollectingInTheAir.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q10274_CollectingInTheAir/Q10274_CollectingInTheAir.java
@@ -33,13 +33,12 @@ public class Q10274_CollectingInTheAir extends Quest
 {
 	// NPCs
 	private static final int LEKON = 32557;
-	
 	// Items
 	private static final int SCROLL = 13844;
 	private static final int RED = 13858;
 	private static final int BLUE = 13859;
 	private static final int GREEN = 13860;
-	
+	// Monsters
 	private static final int MOBS[] =
 	{
 		18684, // Red Star Stone
@@ -142,7 +141,7 @@ public class Q10274_CollectingInTheAir extends Quest
 					st.giveItems(GREEN, 1);
 					break;
 			}
-			st.playSound("ItemSound.quest_itemget");
+			st.playSound(QuestSound.ITEMSOUND_QUEST_ITEMGET);
 			npc.doDie(caster);
 		}
 		return super.onSkillSee(npc, caster, skill, targets, isPet);
@@ -154,13 +153,7 @@ public class Q10274_CollectingInTheAir extends Quest
 		addStartNpc(LEKON);
 		addTalkId(LEKON);
 		addSkillSeeId(MOBS);
-		questItemIds = new int[]
-		{
-			SCROLL,
-			RED,
-			BLUE,
-			GREEN
-		};
+		registerQuestItems(SCROLL, RED, BLUE, GREEN);
 	}
 	
 	public static void main(String[] args)
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q10275_ContainingTheAttributePower/Q10275_ContainingTheAttributePower.java b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q10275_ContainingTheAttributePower/Q10275_ContainingTheAttributePower.java
index 318d48639c..fd8d73589e 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q10275_ContainingTheAttributePower/Q10275_ContainingTheAttributePower.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q10275_ContainingTheAttributePower/Q10275_ContainingTheAttributePower.java
@@ -14,15 +14,14 @@
  */
 package quests.Q10275_ContainingTheAttributePower;
 
-import com.l2jserver.gameserver.datatables.SkillTable;
 import com.l2jserver.gameserver.model.Elementals;
 import com.l2jserver.gameserver.model.actor.L2Npc;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jserver.gameserver.model.holders.SkillHolder;
 import com.l2jserver.gameserver.model.itemcontainer.Inventory;
 import com.l2jserver.gameserver.model.quest.Quest;
 import com.l2jserver.gameserver.model.quest.QuestState;
 import com.l2jserver.gameserver.model.quest.State;
-import com.l2jserver.gameserver.model.skills.L2Skill;
 import com.l2jserver.gameserver.util.Util;
 
 /**
@@ -37,19 +36,16 @@ public class Q10275_ContainingTheAttributePower extends Quest
 	private static final int WEBER = 31307;
 	private static final int YIN = 32325;
 	private static final int YANG = 32326;
-	
 	private static final int WATER = 27380;
 	private static final int AIR = 27381;
-	
 	// Items
 	private static final int YINSWORD = 13845;
 	private static final int YANGSWORD = 13881;
 	private static final int SOULPIECEWATER = 13861;
 	private static final int SOULPIECEAIR = 13862;
-	
 	// Skills
-	private static final L2Skill BlessingOfFire = SkillTable.getInstance().getInfo(2635, 1);
-	private static final L2Skill BlessingOfEarth = SkillTable.getInstance().getInfo(2636, 1);
+	private static final SkillHolder BLESSING_OF_FIRE = new SkillHolder(2635, 1);
+	private static final SkillHolder BLESSING_OF_EARTH = new SkillHolder(2636, 1);
 	
 	@Override
 	public String onTalk(L2Npc npc, L2PcInstance player)
@@ -215,12 +211,12 @@ public class Q10275_ContainingTheAttributePower extends Quest
 				break;
 			case "32325-09.html":
 				st.setCond(5, true);
-				BlessingOfFire.getEffects(player, player);
+				BLESSING_OF_FIRE.getSkill().getEffects(player, player);
 				st.giveItems(YINSWORD, 1, Elementals.FIRE, 10);
 				break;
 			case "32326-09.html":
 				st.setCond(10, true);
-				BlessingOfEarth.getEffects(player, player);
+				BLESSING_OF_EARTH.getSkill().getEffects(player, player);
 				st.giveItems(YANGSWORD, 1, Elementals.EARTH, 10);
 				break;
 		}
@@ -258,7 +254,7 @@ public class Q10275_ContainingTheAttributePower extends Quest
 					}
 					else
 					{
-						st.playSound("ItemSound.quest_itemget");
+						st.playSound(QuestSound.ITEMSOUND_QUEST_ITEMGET);
 					}
 				}
 				break;
@@ -272,7 +268,7 @@ public class Q10275_ContainingTheAttributePower extends Quest
 					}
 					else
 					{
-						st.playSound("ItemSound.quest_itemget");
+						st.playSound(QuestSound.ITEMSOUND_QUEST_ITEMGET);
 					}
 				}
 				break;
@@ -287,13 +283,7 @@ public class Q10275_ContainingTheAttributePower extends Quest
 		addStartNpc(HOLLY, WEBER);
 		addTalkId(HOLLY, WEBER, YIN, YANG);
 		addKillId(AIR, WATER);
-		questItemIds = new int[]
-		{
-			YINSWORD,
-			YANGSWORD,
-			SOULPIECEWATER,
-			SOULPIECEAIR
-		};
+		registerQuestItems(YINSWORD, YANGSWORD, SOULPIECEWATER, SOULPIECEAIR);
 	}
 	
 	public static void main(String[] args)
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q10276_MutatedKaneusGludio/Q10276_MutatedKaneusGludio.java b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q10276_MutatedKaneusGludio/Q10276_MutatedKaneusGludio.java
index 3108c13aaa..4e738e05c4 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q10276_MutatedKaneusGludio/Q10276_MutatedKaneusGludio.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q10276_MutatedKaneusGludio/Q10276_MutatedKaneusGludio.java
@@ -35,7 +35,6 @@ public class Q10276_MutatedKaneusGludio extends Quest
 	private static final int ROHMER = 30344;
 	private static final int TOMLAN_KAMOS = 18554;
 	private static final int OL_ARIOSH = 18555;
-	
 	// Items
 	private static final int TISSUE_TK = 13830;
 	private static final int TISSUE_OA = 13831;
@@ -148,12 +147,12 @@ public class Q10276_MutatedKaneusGludio extends Quest
 		if ((npcId == TOMLAN_KAMOS) && !st.hasQuestItems(TISSUE_TK))
 		{
 			st.giveItems(TISSUE_TK, 1);
-			st.playSound("ItemSound.quest_itemget");
+			st.playSound(QuestSound.ITEMSOUND_QUEST_ITEMGET);
 		}
 		else if ((npcId == OL_ARIOSH) && !st.hasQuestItems(TISSUE_OA))
 		{
 			st.giveItems(TISSUE_OA, 1);
-			st.playSound("ItemSound.quest_itemget");
+			st.playSound(QuestSound.ITEMSOUND_QUEST_ITEMGET);
 		}
 	}
 	
@@ -163,11 +162,7 @@ public class Q10276_MutatedKaneusGludio extends Quest
 		addStartNpc(BATHIS);
 		addTalkId(BATHIS, ROHMER);
 		addKillId(TOMLAN_KAMOS, OL_ARIOSH);
-		questItemIds = new int[]
-		{
-			TISSUE_TK,
-			TISSUE_OA
-		};
+		registerQuestItems(TISSUE_TK, TISSUE_OA);
 	}
 	
 	public static void main(String[] args)
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q10277_MutatedKaneusDion/Q10277_MutatedKaneusDion.java b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q10277_MutatedKaneusDion/Q10277_MutatedKaneusDion.java
index fdf2ae12f1..d809b4e20b 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q10277_MutatedKaneusDion/Q10277_MutatedKaneusDion.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q10277_MutatedKaneusDion/Q10277_MutatedKaneusDion.java
@@ -156,12 +156,12 @@ public class Q10277_MutatedKaneusDion extends Quest
 		if ((npcId == CRIMSON_HATU) && !st.hasQuestItems(TISSUE_CH))
 		{
 			st.giveItems(TISSUE_CH, 1);
-			st.playSound("ItemSound.quest_itemget");
+			st.playSound(QuestSound.ITEMSOUND_QUEST_ITEMGET);
 		}
 		else if ((npcId == SEER_FLOUROS) && !st.hasQuestItems(TISSUE_SF))
 		{
 			st.giveItems(TISSUE_SF, 1);
-			st.playSound("ItemSound.quest_itemget");
+			st.playSound(QuestSound.ITEMSOUND_QUEST_ITEMGET);
 		}
 	}
 	
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q10278_MutatedKaneusHeine/Q10278_MutatedKaneusHeine.java b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q10278_MutatedKaneusHeine/Q10278_MutatedKaneusHeine.java
index 10bd30cbd5..afd7234194 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q10278_MutatedKaneusHeine/Q10278_MutatedKaneusHeine.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q10278_MutatedKaneusHeine/Q10278_MutatedKaneusHeine.java
@@ -30,13 +30,11 @@ import com.l2jserver.gameserver.model.quest.State;
  */
 public class Q10278_MutatedKaneusHeine extends Quest
 {
-	
 	// NPCs
 	private static final int GOSTA = 30916;
 	private static final int MINEVIA = 30907;
 	private static final int BLADE_OTIS = 18562;
 	private static final int WEIRD_BUNEI = 18564;
-	
 	// Items
 	private static final int TISSUE_BO = 13834;
 	private static final int TISSUE_WB = 13835;
@@ -149,12 +147,12 @@ public class Q10278_MutatedKaneusHeine extends Quest
 		if ((npcId == BLADE_OTIS) && !st.hasQuestItems(TISSUE_BO))
 		{
 			st.giveItems(TISSUE_BO, 1);
-			st.playSound("ItemSound.quest_itemget");
+			st.playSound(QuestSound.ITEMSOUND_QUEST_ITEMGET);
 		}
 		else if ((npcId == WEIRD_BUNEI) && !st.hasQuestItems(TISSUE_WB))
 		{
 			st.giveItems(TISSUE_WB, 1);
-			st.playSound("ItemSound.quest_itemget");
+			st.playSound(QuestSound.ITEMSOUND_QUEST_ITEMGET);
 		}
 	}
 	
@@ -164,11 +162,7 @@ public class Q10278_MutatedKaneusHeine extends Quest
 		addStartNpc(GOSTA);
 		addTalkId(GOSTA, MINEVIA);
 		addKillId(BLADE_OTIS, WEIRD_BUNEI);
-		questItemIds = new int[]
-		{
-			TISSUE_BO,
-			TISSUE_WB
-		};
+		registerQuestItems(TISSUE_BO, TISSUE_WB);
 	}
 	
 	public static void main(String[] args)
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q10279_MutatedKaneusOren/Q10279_MutatedKaneusOren.java b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q10279_MutatedKaneusOren/Q10279_MutatedKaneusOren.java
index ac24904b8a..2e58d9d537 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q10279_MutatedKaneusOren/Q10279_MutatedKaneusOren.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q10279_MutatedKaneusOren/Q10279_MutatedKaneusOren.java
@@ -149,12 +149,12 @@ public class Q10279_MutatedKaneusOren extends Quest
 		if ((npcId == KAIM_ABIGORE) && !st.hasQuestItems(TISSUE_KA))
 		{
 			st.giveItems(TISSUE_KA, 1);
-			st.playSound("ItemSound.quest_itemget");
+			st.playSound(QuestSound.ITEMSOUND_QUEST_ITEMGET);
 		}
 		else if ((npcId == KNIGHT_MONTAGNAR) && !st.hasQuestItems(TISSUE_KM))
 		{
 			st.giveItems(TISSUE_KM, 1);
-			st.playSound("ItemSound.quest_itemget");
+			st.playSound(QuestSound.ITEMSOUND_QUEST_ITEMGET);
 		}
 	}
 	
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q10280_MutatedKaneusSchuttgart/Q10280_MutatedKaneusSchuttgart.java b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q10280_MutatedKaneusSchuttgart/Q10280_MutatedKaneusSchuttgart.java
index 8ff03719c5..f6966d407e 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q10280_MutatedKaneusSchuttgart/Q10280_MutatedKaneusSchuttgart.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q10280_MutatedKaneusSchuttgart/Q10280_MutatedKaneusSchuttgart.java
@@ -30,13 +30,11 @@ import com.l2jserver.gameserver.model.quest.State;
  */
 public class Q10280_MutatedKaneusSchuttgart extends Quest
 {
-	
 	// NPCs
 	private static final int VISHOTSKY = 31981;
 	private static final int ATRAXIA = 31972;
 	private static final int VENOMOUS_STORACE = 18571;
 	private static final int KEL_BILETTE = 18573;
-	
 	// Items
 	private static final int TISSUE_VS = 13838;
 	private static final int TISSUE_KB = 13839;
@@ -149,12 +147,12 @@ public class Q10280_MutatedKaneusSchuttgart extends Quest
 		if ((npcId == VENOMOUS_STORACE) && !st.hasQuestItems(TISSUE_VS))
 		{
 			st.giveItems(TISSUE_VS, 1);
-			st.playSound("ItemSound.quest_itemget");
+			st.playSound(QuestSound.ITEMSOUND_QUEST_ITEMGET);
 		}
 		else if ((npcId == KEL_BILETTE) && !st.hasQuestItems(TISSUE_KB))
 		{
 			st.giveItems(TISSUE_KB, 1);
-			st.playSound("ItemSound.quest_itemget");
+			st.playSound(QuestSound.ITEMSOUND_QUEST_ITEMGET);
 		}
 	}
 	
@@ -164,11 +162,7 @@ public class Q10280_MutatedKaneusSchuttgart extends Quest
 		addStartNpc(VISHOTSKY);
 		addTalkId(VISHOTSKY, ATRAXIA);
 		addKillId(VENOMOUS_STORACE, KEL_BILETTE);
-		questItemIds = new int[]
-		{
-			TISSUE_VS,
-			TISSUE_KB
-		};
+		registerQuestItems(TISSUE_VS, TISSUE_KB);
 	}
 	
 	public static void main(String[] args)
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q10281_MutatedKaneusRune/Q10281_MutatedKaneusRune.java b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q10281_MutatedKaneusRune/Q10281_MutatedKaneusRune.java
index 59bde02db8..fe118c67d0 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q10281_MutatedKaneusRune/Q10281_MutatedKaneusRune.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q10281_MutatedKaneusRune/Q10281_MutatedKaneusRune.java
@@ -30,12 +30,10 @@ import com.l2jserver.gameserver.model.quest.State;
  */
 public class Q10281_MutatedKaneusRune extends Quest
 {
-	
 	// NPCs
 	private static final int MATHIAS = 31340;
 	private static final int KAYAN = 31335;
 	private static final int WHITE_ALLOSCE = 18577;
-	
 	// Items
 	private static final int TISSUE_WA = 13840;
 	
@@ -145,7 +143,7 @@ public class Q10281_MutatedKaneusRune extends Quest
 	private final void rewardItem(int npcId, QuestState st)
 	{
 		st.giveItems(TISSUE_WA, 1);
-		st.playSound("ItemSound.quest_itemget");
+		st.playSound(QuestSound.ITEMSOUND_QUEST_ITEMGET);
 	}
 	
 	public Q10281_MutatedKaneusRune(int questId, String name, String descr)
@@ -154,10 +152,7 @@ public class Q10281_MutatedKaneusRune extends Quest
 		addStartNpc(MATHIAS);
 		addTalkId(MATHIAS, KAYAN);
 		addKillId(WHITE_ALLOSCE);
-		questItemIds = new int[]
-		{
-			TISSUE_WA
-		};
+		registerQuestItems(TISSUE_WA);
 	}
 	
 	public static void main(String[] args)
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q10282_ToTheSeedOfAnnihilation/Q10282_ToTheSeedOfAnnihilation.java b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q10282_ToTheSeedOfAnnihilation/Q10282_ToTheSeedOfAnnihilation.java
index d2aac3c3a9..e5e911d395 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q10282_ToTheSeedOfAnnihilation/Q10282_ToTheSeedOfAnnihilation.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q10282_ToTheSeedOfAnnihilation/Q10282_ToTheSeedOfAnnihilation.java
@@ -91,10 +91,8 @@ public class Q10282_ToTheSeedOfAnnihilation extends Quest
 		switch (event)
 		{
 			case "32733-07.htm":
-				st.setState(State.STARTED);
-				st.set("cond", "1");
+				st.startQuest();
 				st.giveItems(SOA_ORDERS, 1);
-				st.playSound("ItemSound.quest_accept");
 				break;
 			case "32734-02.htm":
 				st.addExpAndSp(1148480, 99110);
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q10283_RequestOfIceMerchant/Q10283_RequestOfIceMerchant.java b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q10283_RequestOfIceMerchant/Q10283_RequestOfIceMerchant.java
index 74c3014607..b72fc9c1a5 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q10283_RequestOfIceMerchant/Q10283_RequestOfIceMerchant.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q10283_RequestOfIceMerchant/Q10283_RequestOfIceMerchant.java
@@ -55,14 +55,11 @@ public class Q10283_RequestOfIceMerchant extends Quest
 		{
 			if (event.equalsIgnoreCase("32020-03.htm"))
 			{
-				st.setState(State.STARTED);
-				st.set("cond", "1");
-				st.playSound("ItemSound.quest_accept");
+				st.startQuest();
 			}
 			else if (event.equalsIgnoreCase("32020-07.htm"))
 			{
-				st.set("cond", "2");
-				st.playSound("ItemSound.quest_middle");
+				st.setCond(2, true);
 			}
 		}
 		else if ((npc.getNpcId() == _kier) && event.equalsIgnoreCase("spawn"))
@@ -74,8 +71,7 @@ public class Q10283_RequestOfIceMerchant extends Quest
 		{
 			st.giveItems(57, 190000);
 			st.addExpAndSp(627000, 50300);
-			st.playSound("ItemSound.quest_finish");
-			st.exitQuest(false);
+			st.exitQuest(false, true);
 			npc.deleteMe();
 		}
 		return htmltext;
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q10288_SecretMission/Q10288_SecretMission.java b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q10288_SecretMission/Q10288_SecretMission.java
index a97020fe4e..09fda1759b 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q10288_SecretMission/Q10288_SecretMission.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q10288_SecretMission/Q10288_SecretMission.java
@@ -30,7 +30,6 @@ public class Q10288_SecretMission extends Quest
 	private static final int DOMINIC = 31350;
 	private static final int AQUILANI = 32780;
 	private static final int GREYMORE = 32757;
-	
 	// Items
 	private static final int LETTER = 15529;
 	
@@ -153,10 +152,7 @@ public class Q10288_SecretMission extends Quest
 		addStartNpc(AQUILANI, DOMINIC);
 		addFirstTalkId(AQUILANI);
 		addTalkId(DOMINIC, GREYMORE, AQUILANI);
-		questItemIds = new int[]
-		{
-			LETTER
-		};
+		registerQuestItems(LETTER);
 	}
 	
 	public static void main(String[] args)
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q10289_FadeToBlack/Q10289_FadeToBlack.java b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q10289_FadeToBlack/Q10289_FadeToBlack.java
index f384ffdd3e..f7c8e4fda5 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q10289_FadeToBlack/Q10289_FadeToBlack.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q10289_FadeToBlack/Q10289_FadeToBlack.java
@@ -35,11 +35,9 @@ public class Q10289_FadeToBlack extends Quest
 {
 	// NPCs
 	private static final int GREYMORE = 32757;
-	
 	// Items
 	private static final int MARK_OF_SPLENDOR = 15527;
 	private static final int MARK_OF_DARKNESS = 15528;
-	
 	// Monsters
 	private static final int ANAYS = 25701;
 	
@@ -53,7 +51,6 @@ public class Q10289_FadeToBlack extends Quest
 		}
 		
 		String htmltext = event;
-		
 		switch (event)
 		{
 			case "32757-03.htm":
@@ -287,11 +284,7 @@ public class Q10289_FadeToBlack extends Quest
 		addStartNpc(GREYMORE);
 		addTalkId(GREYMORE);
 		addKillId(ANAYS);
-		questItemIds = new int[]
-		{
-			MARK_OF_SPLENDOR,
-			MARK_OF_DARKNESS
-		};
+		registerQuestItems(MARK_OF_SPLENDOR, MARK_OF_DARKNESS);
 	}
 	
 	public static void main(String[] args)
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q10290_LandDragonConqueror/Q10290_LandDragonConqueror.java b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q10290_LandDragonConqueror/Q10290_LandDragonConqueror.java
index 48d6be714a..48283a5d74 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q10290_LandDragonConqueror/Q10290_LandDragonConqueror.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q10290_LandDragonConqueror/Q10290_LandDragonConqueror.java
@@ -177,11 +177,7 @@ public class Q10290_LandDragonConqueror extends Quest
 		addStartNpc(THEODRIC);
 		addTalkId(THEODRIC);
 		addKillId(ANTHARAS);
-		questItemIds = new int[]
-		{
-			MIRACLE_NECKLACE,
-			SHABBY_NECKLACE
-		};
+		registerQuestItems(MIRACLE_NECKLACE, SHABBY_NECKLACE);
 	}
 	
 	public static void main(String[] args)
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q10291_FireDragonDestroyer/Q10291_FireDragonDestroyer.java b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q10291_FireDragonDestroyer/Q10291_FireDragonDestroyer.java
index 4a2fdf8c6b..be3e4f0bd9 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q10291_FireDragonDestroyer/Q10291_FireDragonDestroyer.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q10291_FireDragonDestroyer/Q10291_FireDragonDestroyer.java
@@ -170,11 +170,7 @@ public class Q10291_FireDragonDestroyer extends Quest
 		addStartNpc(KLEIN);
 		addTalkId(KLEIN);
 		addKillId(VALAKAS);
-		questItemIds = new int[]
-		{
-			POOR_NECKLACE,
-			VALOR_NECKLACE
-		};
+		registerQuestItems(POOR_NECKLACE, VALOR_NECKLACE);
 	}
 	
 	public static void main(String[] args)
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/SagasScripts/SagaOfTheDuelist.java b/L2J_DataPack_BETA/dist/game/data/scripts/quests/SagasScripts/SagaOfTheDuelist.java
index df10166b49..956d8f46f5 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/quests/SagasScripts/SagaOfTheDuelist.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/quests/SagasScripts/SagaOfTheDuelist.java
@@ -133,18 +133,14 @@ public class SagaOfTheDuelist extends SagasSuperClass
 		{
 			String htmltext = getNoQuestMsg(player);
 			QuestState st = player.getQuestState(qn);
-			if (st != null)
+			if ((st != null) && st.isCond(3))
 			{
-				int cond = st.getInt("cond");
-				if (cond == 3)
+				if (!st.hasQuestItems(TOPQUALITYMEAT))
 				{
-					if (!st.hasQuestItems(TOPQUALITYMEAT))
-					{
-						st.giveItems(TOPQUALITYMEAT, 1);
-						return "tunatun_01.htm";
-					}
-					return "tunatun_02.htm";
+					st.giveItems(TOPQUALITYMEAT, 1);
+					return "tunatun_01.htm";
 				}
+				return "tunatun_02.htm";
 			}
 			return htmltext;
 		}
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/SagasScripts/SagasSuperClass.java b/L2J_DataPack_BETA/dist/game/data/scripts/quests/SagasScripts/SagasSuperClass.java
index 750989113a..5576fb1a60 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/quests/SagasScripts/SagasSuperClass.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/quests/SagasScripts/SagasSuperClass.java
@@ -169,21 +169,15 @@ public class SagasSuperClass extends Quest
 	public void registerNPCs()
 	{
 		addStartNpc(NPC[0]);
-		addAttackId(Mob[2]);
-		addAttackId(Mob[1]);
+		addAttackId(Mob[2], Mob[1]);
 		addSkillSeeId(Mob[1]);
 		addFirstTalkId(NPC[4]);
-		for (int npc : NPC)
-		{
-			addTalkId(npc);
-		}
-		for (int mobid : Mob)
-		{
-			addKillId(mobid);
-		}
-		questItemIds = Items.clone();
+		addTalkId(NPC);
+		addKillId(Mob);
+		final int[] questItemIds = Items.clone();
 		questItemIds[0] = 0;
 		questItemIds[2] = 0; // remove Ice Crystal and Divine Stone of Wisdom
+		registerQuestItems(questItemIds);
 		for (int Archon_Minion = 21646; Archon_Minion < 21652; Archon_Minion++)
 		{
 			addKillId(Archon_Minion);
@@ -196,10 +190,7 @@ public class SagasSuperClass extends Quest
 			18216,
 			18218
 		};
-		for (int element : Archon_Hellisha_Norm)
-		{
-			addKillId(element);
-		}
+		addKillId(Archon_Hellisha_Norm);
 		for (int Guardian_Angel = 27214; Guardian_Angel < 27217; Guardian_Angel++)
 		{
 			addKillId(Guardian_Angel);
@@ -341,9 +332,7 @@ public class SagasSuperClass extends Quest
 			}
 			else if (event.equalsIgnoreCase("accept"))
 			{
-				st.set("cond", "1");
-				st.setState(State.STARTED);
-				st.playSound("ItemSound.quest_accept");
+				st.startQuest();
 				st.giveItems(Items[10], 1);
 				htmltext = "0-03.htm";
 			}
@@ -386,7 +375,7 @@ public class SagasSuperClass extends Quest
 				else
 				{
 					st.takeItems(Items[10], -1);
-					st.playSound("ItemSound.quest_middle");
+					st.playSound(QuestSound.ITEMSOUND_QUEST_MIDDLE);
 					st.set("cond", "20");
 					htmltext = "0-08.htm";
 				}
@@ -448,7 +437,7 @@ public class SagasSuperClass extends Quest
 			{
 				st.giveItems(Items[9], 1);
 				st.set("cond", "18");
-				st.playSound("ItemSound.quest_middle");
+				st.playSound(QuestSound.ITEMSOUND_QUEST_MIDDLE);
 				htmltext = "4-011.htm";
 			}
 			else if (event.equalsIgnoreCase("4-3"))
@@ -458,7 +447,7 @@ public class SagasSuperClass extends Quest
 				AutoChat(npc, Text[13].replace("PLAYERNAME", player.getName()));
 				st.set("Quest0", "0");
 				cancelQuestTimer("Mob_2 has despawned", npc, player);
-				st.playSound("ItemSound.quest_middle");
+				st.playSound(QuestSound.ITEMSOUND_QUEST_MIDDLE);
 				DeleteSpawn(st, npc);
 				return null;
 			}
@@ -467,7 +456,7 @@ public class SagasSuperClass extends Quest
 				st.set("cond", "6");
 				st.takeItems(Items[4], 1);
 				Cast(npc, player, 4546, 1);
-				st.playSound("ItemSound.quest_middle");
+				st.playSound(QuestSound.ITEMSOUND_QUEST_MIDDLE);
 				htmltext = "5-02.htm";
 			}
 			else if (event.equalsIgnoreCase("6-1"))
@@ -475,7 +464,7 @@ public class SagasSuperClass extends Quest
 				st.set("cond", "8");
 				st.takeItems(Items[5], 1);
 				Cast(npc, player, 4546, 1);
-				st.playSound("ItemSound.quest_middle");
+				st.playSound(QuestSound.ITEMSOUND_QUEST_MIDDLE);
 				htmltext = "6-03.htm";
 			}
 			else if (event.equalsIgnoreCase("7-1"))
@@ -503,7 +492,7 @@ public class SagasSuperClass extends Quest
 				st.set("cond", "10");
 				st.takeItems(Items[6], 1);
 				Cast(npc, player, 4546, 1);
-				st.playSound("ItemSound.quest_middle");
+				st.playSound(QuestSound.ITEMSOUND_QUEST_MIDDLE);
 				htmltext = "7-06.htm";
 			}
 			else if (event.equalsIgnoreCase("8-1"))
@@ -511,7 +500,7 @@ public class SagasSuperClass extends Quest
 				st.set("cond", "14");
 				st.takeItems(Items[7], 1);
 				Cast(npc, player, 4546, 1);
-				st.playSound("ItemSound.quest_middle");
+				st.playSound(QuestSound.ITEMSOUND_QUEST_MIDDLE);
 				htmltext = "8-02.htm";
 			}
 			else if (event.equalsIgnoreCase("9-1"))
@@ -519,7 +508,7 @@ public class SagasSuperClass extends Quest
 				st.set("cond", "17");
 				st.takeItems(Items[8], 1);
 				Cast(npc, player, 4546, 1);
-				st.playSound("ItemSound.quest_middle");
+				st.playSound(QuestSound.ITEMSOUND_QUEST_MIDDLE);
 				htmltext = "9-03.htm";
 			}
 			else if (event.equalsIgnoreCase("10-1"))
@@ -553,7 +542,7 @@ public class SagasSuperClass extends Quest
 				st.set("cond", "19");
 				st.takeItems(Items[9], 1);
 				Cast(npc, player, 4546, 1);
-				st.playSound("ItemSound.quest_middle");
+				st.playSound(QuestSound.ITEMSOUND_QUEST_MIDDLE);
 				htmltext = "10-06.htm";
 			}
 			else if (event.equalsIgnoreCase("11-9"))
@@ -1119,8 +1108,7 @@ public class SagasSuperClass extends Quest
 						AutoChat(npc, Text[4].replace("PLAYERNAME", st1.getPlayer().getName()));
 						st1.giveItems(Items[8], 1);
 						st1.takeItems(Items[3], -1);
-						st1.set("cond", "16");
-						st1.playSound("ItemSound.quest_middle");
+						st1.setCond(16, true);
 					}
 					
 				}
@@ -1143,9 +1131,8 @@ public class SagasSuperClass extends Quest
 						}
 						else
 						{
-							st1.playSound("ItemSound.quest_middle");
 							st1.giveItems(Items[5], 1);
-							st1.set("cond", "7");
+							st1.setCond(7, true);
 						}
 					}
 					
@@ -1169,8 +1156,7 @@ public class SagasSuperClass extends Quest
 					{
 						AutoChat(npc, Text[12].replace("PLAYERNAME", player.getName()));
 						st.giveItems(Items[6], 1);
-						st.set("cond", "9");
-						st.playSound("ItemSound.quest_middle");
+						st.setCond(9, true);
 					}
 				}
 				cancelQuestTimer("Mob_1 has despawned", npc, st2.getPlayer());
@@ -1186,8 +1172,7 @@ public class SagasSuperClass extends Quest
 						AutoChat(npc, Text[4].replace("PLAYERNAME", player.getName()));
 						st.giveItems(Items[8], 1);
 						st.takeItems(Items[3], -1);
-						st.set("cond", "16");
-						st.playSound("ItemSound.quest_middle");
+						st.setCond(16, true);
 					}
 					else
 					{
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/TerritoryWarScripts/TerritoryWarSuperClass.java b/L2J_DataPack_BETA/dist/game/data/scripts/quests/TerritoryWarScripts/TerritoryWarSuperClass.java
index 07ac33467b..0ff6c8a55f 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/quests/TerritoryWarScripts/TerritoryWarSuperClass.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/quests/TerritoryWarScripts/TerritoryWarSuperClass.java
@@ -304,41 +304,40 @@ public class TerritoryWarSuperClass extends Quest
 	
 	private void handleBecomeMercenaryQuest(L2PcInstance player, boolean catapult)
 	{
-		QuestState _state = player.getQuestState(Q00147_PathtoBecominganEliteMercenary.class.getSimpleName());
-		if ((_state != null) && (_state.getState() == State.STARTED))
+		QuestState st = player.getQuestState(Q00147_PathtoBecominganEliteMercenary.class.getSimpleName());
+		if ((st != null) && (st.getState() == State.STARTED))
 		{
-			int _cond = _state.getInt("cond");
 			if (catapult)
 			{
-				if (_cond == 2)
+				if (st.isCond(2))
 				{
-					_state.setCond(4);
+					st.setCond(4);
 				}
-				else if (_cond == 1)
+				else if (st.isCond(1))
 				{
-					_state.setCond(3);
+					st.setCond(3);
 				}
 			}
 			else
 			{
-				if ((_cond == 1) || (_cond == 3))
+				if (st.isCond(1) || st.isCond(3))
 				{
 					// Get
-					int _kills = _state.getInt("kills");
+					int _kills = st.getInt("kills");
 					// Increase
 					_kills++;
 					// Save
-					_state.set("kills", String.valueOf(_kills));
+					st.set("kills", String.valueOf(_kills));
 					// Check
 					if (_kills >= 10)
 					{
-						if (_cond == 1)
+						if (st.isCond(1))
 						{
-							_state.setCond(2);
+							st.setCond(2);
 						}
-						else if (_cond == 3)
+						else if (st.isCond(3))
 						{
-							_state.setCond(4);
+							st.setCond(4);
 						}
 					}
 				}
@@ -352,9 +351,9 @@ public class TerritoryWarSuperClass extends Quest
 		int cond = 0;
 		// Additional Handle for Quest
 		QuestState _sfh = player.getQuestState("176_StepsForHonor");
-		if ((_sfh != null) && (_sfh.getState() == State.STARTED))
+		if ((_sfh != null) && _sfh.isStarted())
 		{
-			cond = _sfh.getInt("cond");
+			cond = _sfh.getCond();
 			if ((cond == 1) || (cond == 3) || (cond == 5) || (cond == 7))
 			{
 				// Get kills
@@ -507,12 +506,14 @@ public class TerritoryWarSuperClass extends Quest
 				}
 				else
 				{
+					st.setState(State.COMPLETED, false);
 					st.exitQuest(false);
 					for (Quest q : _protectTheScripts.values())
 					{
 						st = player.getQuestState(q.getName());
 						if (st != null)
 						{
+							st.setState(State.COMPLETED, false);
 							st.exitQuest(false);
 						}
 					}
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/village_master/DarkElvenChange1/DarkElvenChange1.java b/L2J_DataPack_BETA/dist/game/data/scripts/village_master/DarkElvenChange1/DarkElvenChange1.java
index c487c9c147..24e1fe7dba 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/village_master/DarkElvenChange1/DarkElvenChange1.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/village_master/DarkElvenChange1/DarkElvenChange1.java
@@ -100,7 +100,7 @@ public class DarkElvenChange1 extends Quest
 						st.takeItems(CLASSES[i][6], -1);
 						player.setClassId(CLASSES[i][0]);
 						player.setBaseClass(CLASSES[i][0]);
-						st.playSound("ItemSound.quest_fanfare_2");
+						st.playSound(QuestSound.ITEMSOUND_QUEST_FANFARE_2);
 						player.broadcastUserInfo();
 						st.exitQuest(false);
 					}
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/village_master/DarkElvenChange2/DarkElvenChange2.java b/L2J_DataPack_BETA/dist/game/data/scripts/village_master/DarkElvenChange2/DarkElvenChange2.java
index d5435fbff1..56efcaf490 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/village_master/DarkElvenChange2/DarkElvenChange2.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/village_master/DarkElvenChange2/DarkElvenChange2.java
@@ -118,7 +118,7 @@ public class DarkElvenChange2 extends Quest
 						st.takeItems(CLASSES[i][6], -1);
 						st.takeItems(CLASSES[i][7], -1);
 						st.takeItems(CLASSES[i][8], -1);
-						st.playSound("ItemSound.quest_fanfare_2");
+						st.playSound(QuestSound.ITEMSOUND_QUEST_FANFARE_2);
 						player.setClassId(CLASSES[i][0]);
 						player.setBaseClass(CLASSES[i][0]);
 						player.broadcastUserInfo();
-- 
GitLab