diff --git a/dist/game/data/scripts/ai/npc/Teleports/StakatoNestTeleporter/StakatoNestTeleporter.java b/dist/game/data/scripts/ai/npc/Teleports/StakatoNestTeleporter/StakatoNestTeleporter.java
index 8ddb833f67d9e6efeda92d65e51ae751020a7dde..d8f04a6299d1a7c36a67c1081513cd1000a8d4fe 100644
--- a/dist/game/data/scripts/ai/npc/Teleports/StakatoNestTeleporter/StakatoNestTeleporter.java
+++ b/dist/game/data/scripts/ai/npc/Teleports/StakatoNestTeleporter/StakatoNestTeleporter.java
@@ -18,13 +18,12 @@
  */
 package ai.npc.Teleports.StakatoNestTeleporter;
 
-import quests.Q00240_ImTheOnlyOneYouCanTrust.Q00240_ImTheOnlyOneYouCanTrust;
-import ai.npc.AbstractNpcAI;
-
 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.quest.QuestState;
+
+import ai.npc.AbstractNpcAI;
+import quests.Q00240_ImTheOnlyOneYouCanTrust.Q00240_ImTheOnlyOneYouCanTrust;
 
 /**
  * Stakato Nest Teleport AI.
@@ -78,8 +77,7 @@ public final class StakatoNestTeleporter extends AbstractNpcAI
 	@Override
 	public String onTalk(L2Npc npc, L2PcInstance player)
 	{
-		QuestState accessQuest = player.getQuestState(Q00240_ImTheOnlyOneYouCanTrust.class.getSimpleName());
-		return (((accessQuest != null) && accessQuest.isCompleted()) ? "32640.htm" : "32640-no.htm");
+		return (player.hasQuestCompleted(Q00240_ImTheOnlyOneYouCanTrust.class.getSimpleName()) ? "32640.htm" : "32640-no.htm");
 	}
 	
 	public static void main(String[] args)
diff --git a/dist/game/data/scripts/hellbound/AI/NPC/Warpgate/Warpgate.java b/dist/game/data/scripts/hellbound/AI/NPC/Warpgate/Warpgate.java
index e39f7ef597bfc4150bb08e7cbc625bd5a9aa31e5..022e5260d306cd5f8e3bc512df40b48fac0b6f5f 100644
--- a/dist/game/data/scripts/hellbound/AI/NPC/Warpgate/Warpgate.java
+++ b/dist/game/data/scripts/hellbound/AI/NPC/Warpgate/Warpgate.java
@@ -18,20 +18,19 @@
  */
 package hellbound.AI.NPC.Warpgate;
 
-import hellbound.HellboundEngine;
-import quests.Q00130_PathToHellbound.Q00130_PathToHellbound;
-import quests.Q00133_ThatsBloodyHot.Q00133_ThatsBloodyHot;
-import ai.npc.AbstractNpcAI;
-
 import com.l2jserver.Config;
 import com.l2jserver.gameserver.model.Location;
 import com.l2jserver.gameserver.model.PcCondOverride;
 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.quest.QuestState;
 import com.l2jserver.gameserver.model.zone.L2ZoneType;
 
+import ai.npc.AbstractNpcAI;
+import hellbound.HellboundEngine;
+import quests.Q00130_PathToHellbound.Q00130_PathToHellbound;
+import quests.Q00133_ThatsBloodyHot.Q00133_ThatsBloodyHot;
+
 /**
  * Warpgate teleport AI.
  * @author _DS_
@@ -122,10 +121,6 @@ public final class Warpgate extends AbstractNpcAI
 		{
 			return true;
 		}
-		
-		final QuestState path_to_hellbound_st = player.getQuestState(Q00130_PathToHellbound.class.getSimpleName());
-		final QuestState thats_bloody_hot_st = player.getQuestState(Q00133_ThatsBloodyHot.class.getSimpleName());
-		
-		return (((path_to_hellbound_st != null) && path_to_hellbound_st.isCompleted()) || ((thats_bloody_hot_st != null) && thats_bloody_hot_st.isCompleted()));
+		return (player.hasQuestCompleted(Q00130_PathToHellbound.class.getSimpleName()) || player.hasQuestCompleted(Q00133_ThatsBloodyHot.class.getSimpleName()));
 	}
 }
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/Q00017_LightAndDarkness/Q00017_LightAndDarkness.java b/dist/game/data/scripts/quests/Q00017_LightAndDarkness/Q00017_LightAndDarkness.java
index 19f5d80a8429d00da8feb71ae44d49458b567f85..43b58b5d49a767b27c9656e377875790462aeb03 100644
--- a/dist/game/data/scripts/quests/Q00017_LightAndDarkness/Q00017_LightAndDarkness.java
+++ b/dist/game/data/scripts/quests/Q00017_LightAndDarkness/Q00017_LightAndDarkness.java
@@ -101,8 +101,7 @@ public class Q00017_LightAndDarkness extends Quest
 				htmltext = getAlreadyCompletedMsg(player);
 				break;
 			case State.CREATED:
-				final QuestState st2 = player.getQuestState(Q00015_SweetWhispers.class.getSimpleName());
-				htmltext = ((st2 != null) && (st2.isCompleted())) ? "31517-00.htm" : "31517-06.html";
+				htmltext = (player.hasQuestCompleted(Q00015_SweetWhispers.class.getSimpleName())) ? "31517-00.htm" : "31517-06.html";
 				break;
 			case State.STARTED:
 				final long blood = st.getQuestItemsCount(BLOOD_OF_SAINT);
diff --git a/dist/game/data/scripts/quests/Q00023_LidiasHeart/Q00023_LidiasHeart.java b/dist/game/data/scripts/quests/Q00023_LidiasHeart/Q00023_LidiasHeart.java
index ea48d814df0306bac977f7f31f107c48c38ef880..a82820cffaf5b8c532b97075b8625840b44f4fd5 100644
--- a/dist/game/data/scripts/quests/Q00023_LidiasHeart/Q00023_LidiasHeart.java
+++ b/dist/game/data/scripts/quests/Q00023_LidiasHeart/Q00023_LidiasHeart.java
@@ -18,9 +18,6 @@
  */
 package quests.Q00023_LidiasHeart;
 
-import quests.Q00022_TragedyInVonHellmannForest.Q00022_TragedyInVonHellmannForest;
-import quests.Q00024_InhabitantsOfTheForestOfTheDead.Q00024_InhabitantsOfTheForestOfTheDead;
-
 import com.l2jserver.gameserver.enums.audio.Sound;
 import com.l2jserver.gameserver.model.Location;
 import com.l2jserver.gameserver.model.actor.L2Npc;
@@ -31,6 +28,9 @@ import com.l2jserver.gameserver.network.NpcStringId;
 import com.l2jserver.gameserver.network.clientpackets.Say2;
 import com.l2jserver.gameserver.network.serverpackets.NpcSay;
 
+import quests.Q00022_TragedyInVonHellmannForest.Q00022_TragedyInVonHellmannForest;
+import quests.Q00024_InhabitantsOfTheForestOfTheDead.Q00024_InhabitantsOfTheForestOfTheDead;
+
 /**
  * Lidia's Heart (23)
  * @author ivantotov
@@ -293,15 +293,7 @@ public final class Q00023_LidiasHeart extends Quest
 		{
 			if (npc.getId() == HIGH_PRIEST_INNOCENTIN)
 			{
-				final QuestState q22 = player.getQuestState(Q00022_TragedyInVonHellmannForest.class.getSimpleName());
-				if ((q22 != null) && q22.isCompleted())
-				{
-					htmltext = "31328-01.htm";
-				}
-				else
-				{
-					htmltext = "31328-01a.html";
-				}
+				htmltext = (player.hasQuestCompleted(Q00022_TragedyInVonHellmannForest.class.getSimpleName())) ? "31328-01.htm" : "31328-01a.html";
 			}
 		}
 		else if (qs.isStarted())
diff --git a/dist/game/data/scripts/quests/Q00024_InhabitantsOfTheForestOfTheDead/Q00024_InhabitantsOfTheForestOfTheDead.java b/dist/game/data/scripts/quests/Q00024_InhabitantsOfTheForestOfTheDead/Q00024_InhabitantsOfTheForestOfTheDead.java
index 21546847ca695565ba1c67afcdbad3ebf41c5247..5f09ab7856b4f8fb6931965fe623be80a9c9af95 100644
--- a/dist/game/data/scripts/quests/Q00024_InhabitantsOfTheForestOfTheDead/Q00024_InhabitantsOfTheForestOfTheDead.java
+++ b/dist/game/data/scripts/quests/Q00024_InhabitantsOfTheForestOfTheDead/Q00024_InhabitantsOfTheForestOfTheDead.java
@@ -75,8 +75,7 @@ public class Q00024_InhabitantsOfTheForestOfTheDead extends Quest
 		{
 			// Dorian
 			case "31389-02.htm":
-				final QuestState qs = player.getQuestState(Q00023_LidiasHeart.class.getSimpleName());
-				if ((player.getLevel() >= 65) && (qs != null) && qs.isCompleted())
+				if ((player.getLevel() >= 65) && player.hasQuestCompleted(Q00023_LidiasHeart.class.getSimpleName()))
 				{
 					st.startQuest();
 					st.giveItems(FLOWER_BOUQUET, 1);
diff --git a/dist/game/data/scripts/quests/Q00025_HidingBehindTheTruth/Q00025_HidingBehindTheTruth.java b/dist/game/data/scripts/quests/Q00025_HidingBehindTheTruth/Q00025_HidingBehindTheTruth.java
index 974c52d8d1f137e7c28a7b1ce1d6d99631603812..b20c6e66dcd048ed901612a2412cf1c7db2ad6ac 100644
--- a/dist/game/data/scripts/quests/Q00025_HidingBehindTheTruth/Q00025_HidingBehindTheTruth.java
+++ b/dist/game/data/scripts/quests/Q00025_HidingBehindTheTruth/Q00025_HidingBehindTheTruth.java
@@ -20,8 +20,6 @@ package quests.Q00025_HidingBehindTheTruth;
 
 import java.util.HashMap;
 
-import quests.Q00024_InhabitantsOfTheForestOfTheDead.Q00024_InhabitantsOfTheForestOfTheDead;
-
 import com.l2jserver.gameserver.ai.CtrlIntention;
 import com.l2jserver.gameserver.enums.audio.Sound;
 import com.l2jserver.gameserver.model.Location;
@@ -36,6 +34,8 @@ import com.l2jserver.gameserver.network.clientpackets.Say2;
 import com.l2jserver.gameserver.network.serverpackets.NpcSay;
 import com.l2jserver.util.Rnd;
 
+import quests.Q00024_InhabitantsOfTheForestOfTheDead.Q00024_InhabitantsOfTheForestOfTheDead;
+
 /**
  * Hiding Behind the Truth (25)
  * @author Joxit
@@ -119,8 +119,7 @@ public class Q00025_HidingBehindTheTruth extends Quest
 			}
 			case "31349-03.html":
 			{
-				final QuestState q24 = player.getQuestState(Q00024_InhabitantsOfTheForestOfTheDead.class.getSimpleName());
-				if (qs.isCreated() && (q24 != null) && q24.isCompleted() && (player.getLevel() >= MIN_LVL))
+				if (qs.isCreated() && player.hasQuestCompleted(Q00024_InhabitantsOfTheForestOfTheDead.class.getSimpleName()) && (player.getLevel() >= MIN_LVL))
 				{
 					qs.setMemoState(1);
 					qs.startQuest();
diff --git a/dist/game/data/scripts/quests/Q00027_ChestCaughtWithABaitOfWind/Q00027_ChestCaughtWithABaitOfWind.java b/dist/game/data/scripts/quests/Q00027_ChestCaughtWithABaitOfWind/Q00027_ChestCaughtWithABaitOfWind.java
index f5ce4b353a271210e028bab7029212d485d7c27e..85bcc217dc74e74df4eba506d0abd1e6a0a3e5b1 100644
--- a/dist/game/data/scripts/quests/Q00027_ChestCaughtWithABaitOfWind/Q00027_ChestCaughtWithABaitOfWind.java
+++ b/dist/game/data/scripts/quests/Q00027_ChestCaughtWithABaitOfWind/Q00027_ChestCaughtWithABaitOfWind.java
@@ -97,14 +97,9 @@ public class Q00027_ChestCaughtWithABaitOfWind extends Quest
 				htmltext = getAlreadyCompletedMsg(player);
 				break;
 			case State.CREATED:
-				final QuestState qs = player.getQuestState(Q00050_LanoscosSpecialBait.class.getSimpleName());
 				if (npc.getId() == LANOSCO)
 				{
-					htmltext = "31570-02.htm";
-					if (qs != null)
-					{
-						htmltext = ((player.getLevel() >= 27) && qs.isCompleted()) ? "31570-01.htm" : htmltext;
-					}
+					htmltext = ((player.getLevel() >= 27) && player.hasQuestCompleted(Q00050_LanoscosSpecialBait.class.getSimpleName())) ? "31570-01.htm" : "31570-02.htm";
 				}
 				break;
 			case State.STARTED:
diff --git a/dist/game/data/scripts/quests/Q00028_ChestCaughtWithABaitOfIcyAir/Q00028_ChestCaughtWithABaitOfIcyAir.java b/dist/game/data/scripts/quests/Q00028_ChestCaughtWithABaitOfIcyAir/Q00028_ChestCaughtWithABaitOfIcyAir.java
index c22a4f58fa8455835aaacb11f46564978a9d85fa..8ffd46d6561363d2878b912ee7ea3cab70b3c13a 100644
--- a/dist/game/data/scripts/quests/Q00028_ChestCaughtWithABaitOfIcyAir/Q00028_ChestCaughtWithABaitOfIcyAir.java
+++ b/dist/game/data/scripts/quests/Q00028_ChestCaughtWithABaitOfIcyAir/Q00028_ChestCaughtWithABaitOfIcyAir.java
@@ -98,14 +98,9 @@ public class Q00028_ChestCaughtWithABaitOfIcyAir extends Quest
 				htmltext = getAlreadyCompletedMsg(player);
 				break;
 			case State.CREATED:
-				final QuestState qs = player.getQuestState(Q00051_OFullesSpecialBait.class.getSimpleName());
 				if (npcId == OFULLE)
 				{
-					htmltext = "31572-02.htm";
-					if (qs != null)
-					{
-						htmltext = ((player.getLevel() >= 36) && qs.isCompleted()) ? "31572-01.htm" : htmltext;
-					}
+					htmltext = ((player.getLevel() >= 36) && player.hasQuestCompleted(Q00051_OFullesSpecialBait.class.getSimpleName())) ? "31572-01.htm" : "31572-02.htm";
 				}
 				break;
 			case State.STARTED:
diff --git a/dist/game/data/scripts/quests/Q00029_ChestCaughtWithABaitOfEarth/Q00029_ChestCaughtWithABaitOfEarth.java b/dist/game/data/scripts/quests/Q00029_ChestCaughtWithABaitOfEarth/Q00029_ChestCaughtWithABaitOfEarth.java
index fd066729406437580c00112bd19ea4bdc6858e7b..43a36f57382351a4c3706e7d6f710bf00610b1f7 100644
--- a/dist/game/data/scripts/quests/Q00029_ChestCaughtWithABaitOfEarth/Q00029_ChestCaughtWithABaitOfEarth.java
+++ b/dist/game/data/scripts/quests/Q00029_ChestCaughtWithABaitOfEarth/Q00029_ChestCaughtWithABaitOfEarth.java
@@ -98,14 +98,9 @@ public class Q00029_ChestCaughtWithABaitOfEarth extends Quest
 				htmltext = getAlreadyCompletedMsg(player);
 				break;
 			case State.CREATED:
-				final QuestState qs = player.getQuestState(Q00052_WilliesSpecialBait.class.getSimpleName());
 				if (npcId == WILLIE)
 				{
-					htmltext = "31574-02.htm";
-					if (qs != null)
-					{
-						htmltext = ((player.getLevel() >= 48) && qs.isCompleted()) ? "31574-01.htm" : htmltext;
-					}
+					htmltext = ((player.getLevel() >= 48) && player.hasQuestCompleted(Q00052_WilliesSpecialBait.class.getSimpleName())) ? "31574-01.htm" : "31574-02.htm";
 				}
 				break;
 			case State.STARTED:
diff --git a/dist/game/data/scripts/quests/Q00030_ChestCaughtWithABaitOfFire/Q00030_ChestCaughtWithABaitOfFire.java b/dist/game/data/scripts/quests/Q00030_ChestCaughtWithABaitOfFire/Q00030_ChestCaughtWithABaitOfFire.java
index 3bdd34e4ff8e3715392661fdad22d76b00bd9309..fe286b8b7e3a8b3cfc62405169a7e8af51942032 100644
--- a/dist/game/data/scripts/quests/Q00030_ChestCaughtWithABaitOfFire/Q00030_ChestCaughtWithABaitOfFire.java
+++ b/dist/game/data/scripts/quests/Q00030_ChestCaughtWithABaitOfFire/Q00030_ChestCaughtWithABaitOfFire.java
@@ -97,14 +97,9 @@ public class Q00030_ChestCaughtWithABaitOfFire extends Quest
 				htmltext = getAlreadyCompletedMsg(player);
 				break;
 			case State.CREATED:
-				final QuestState qs = player.getQuestState(Q00053_LinnaeusSpecialBait.class.getSimpleName());
 				if (npcId == LINNAEUS)
 				{
-					htmltext = "31577-00.htm";
-					if (qs != null)
-					{
-						htmltext = ((player.getLevel() >= 61) && qs.isCompleted()) ? "31577-01.htm" : htmltext;
-					}
+					htmltext = ((player.getLevel() >= 61) && player.hasQuestCompleted(Q00053_LinnaeusSpecialBait.class.getSimpleName())) ? "31577-01.htm" : "31577-00.htm";
 				}
 				break;
 			case State.STARTED:
diff --git a/dist/game/data/scripts/quests/Q00045_ToTalkingIsland/Q00045_ToTalkingIsland.java b/dist/game/data/scripts/quests/Q00045_ToTalkingIsland/Q00045_ToTalkingIsland.java
index 97778a66d628809001bb385dff80ee19df5d7f81..5079ac885150d7b10308f3bd7220b2e8d526af67 100644
--- a/dist/game/data/scripts/quests/Q00045_ToTalkingIsland/Q00045_ToTalkingIsland.java
+++ b/dist/game/data/scripts/quests/Q00045_ToTalkingIsland/Q00045_ToTalkingIsland.java
@@ -204,8 +204,7 @@ public final class Q00045_ToTalkingIsland extends Quest
 						}
 						else
 						{
-							st = talker.getQuestState(Q00006_StepIntoTheFuture.class.getSimpleName());
-							if ((st != null) && st.isCompleted() && st.hasQuestItems(MARK_OF_TRAVELER))
+							if (talker.hasQuestCompleted(Q00006_StepIntoTheFuture.class.getSimpleName()) && st.hasQuestItems(MARK_OF_TRAVELER))
 							{
 								htmltext = "30097-01.htm";
 							}
diff --git a/dist/game/data/scripts/quests/Q00046_OnceMoreInTheArmsOfTheMotherTree/Q00046_OnceMoreInTheArmsOfTheMotherTree.java b/dist/game/data/scripts/quests/Q00046_OnceMoreInTheArmsOfTheMotherTree/Q00046_OnceMoreInTheArmsOfTheMotherTree.java
index 6eec368407aaa43d714397df24414cb079a3a00a..cb5aea7a97cd3ff65e67622c70887e99a4f5d260 100644
--- a/dist/game/data/scripts/quests/Q00046_OnceMoreInTheArmsOfTheMotherTree/Q00046_OnceMoreInTheArmsOfTheMotherTree.java
+++ b/dist/game/data/scripts/quests/Q00046_OnceMoreInTheArmsOfTheMotherTree/Q00046_OnceMoreInTheArmsOfTheMotherTree.java
@@ -204,8 +204,7 @@ public final class Q00046_OnceMoreInTheArmsOfTheMotherTree extends Quest
 						}
 						else
 						{
-							st = talker.getQuestState(Q00007_ATripBegins.class.getSimpleName());
-							if ((st != null) && st.isCompleted() && st.hasQuestItems(MARK_OF_TRAVELER))
+							if (talker.hasQuestCompleted(Q00007_ATripBegins.class.getSimpleName()) && st.hasQuestItems(MARK_OF_TRAVELER))
 							{
 								htmltext = "30097-01.htm";
 							}
diff --git a/dist/game/data/scripts/quests/Q00047_IntoTheDarkElvenForest/Q00047_IntoTheDarkElvenForest.java b/dist/game/data/scripts/quests/Q00047_IntoTheDarkElvenForest/Q00047_IntoTheDarkElvenForest.java
index f41e350dcf4712bc1cacf5dc4c2314feb235a510..2c606895afcce504e1a7f0d4397157ee665b1869 100644
--- a/dist/game/data/scripts/quests/Q00047_IntoTheDarkElvenForest/Q00047_IntoTheDarkElvenForest.java
+++ b/dist/game/data/scripts/quests/Q00047_IntoTheDarkElvenForest/Q00047_IntoTheDarkElvenForest.java
@@ -204,8 +204,7 @@ public final class Q00047_IntoTheDarkElvenForest extends Quest
 						}
 						else
 						{
-							st = talker.getQuestState(Q00008_AnAdventureBegins.class.getSimpleName());
-							if ((st != null) && st.isCompleted() && st.hasQuestItems(MARK_OF_TRAVELER))
+							if (talker.hasQuestCompleted(Q00008_AnAdventureBegins.class.getSimpleName()) && st.hasQuestItems(MARK_OF_TRAVELER))
 							{
 								htmltext = "30097-01.htm";
 							}
diff --git a/dist/game/data/scripts/quests/Q00048_ToTheImmortalPlateau/Q00048_ToTheImmortalPlateau.java b/dist/game/data/scripts/quests/Q00048_ToTheImmortalPlateau/Q00048_ToTheImmortalPlateau.java
index 13987aefd8721b84541a3815d42acf14b78c3a9d..35963b6d43d323bfab3fc32023728f55fbbc38f8 100644
--- a/dist/game/data/scripts/quests/Q00048_ToTheImmortalPlateau/Q00048_ToTheImmortalPlateau.java
+++ b/dist/game/data/scripts/quests/Q00048_ToTheImmortalPlateau/Q00048_ToTheImmortalPlateau.java
@@ -204,8 +204,7 @@ public final class Q00048_ToTheImmortalPlateau extends Quest
 						}
 						else
 						{
-							st = talker.getQuestState(Q00009_IntoTheCityOfHumans.class.getSimpleName());
-							if ((st != null) && st.isCompleted() && st.hasQuestItems(MARK_OF_TRAVELER))
+							if (talker.hasQuestCompleted(Q00009_IntoTheCityOfHumans.class.getSimpleName()) && st.hasQuestItems(MARK_OF_TRAVELER))
 							{
 								htmltext = "30097-01.htm";
 							}
diff --git a/dist/game/data/scripts/quests/Q00049_TheRoadHome/Q00049_TheRoadHome.java b/dist/game/data/scripts/quests/Q00049_TheRoadHome/Q00049_TheRoadHome.java
index 323d743100e4bd3ed83153fb3d077ea067798985..f34c4769707281c63e56c080460f10250eaaa29f 100644
--- a/dist/game/data/scripts/quests/Q00049_TheRoadHome/Q00049_TheRoadHome.java
+++ b/dist/game/data/scripts/quests/Q00049_TheRoadHome/Q00049_TheRoadHome.java
@@ -204,8 +204,7 @@ public final class Q00049_TheRoadHome extends Quest
 						}
 						else
 						{
-							st = talker.getQuestState(Q00010_IntoTheWorld.class.getSimpleName());
-							if ((st != null) && st.isCompleted() && st.hasQuestItems(MARK_OF_TRAVELER))
+							if (talker.hasQuestCompleted(Q00010_IntoTheWorld.class.getSimpleName()) && st.hasQuestItems(MARK_OF_TRAVELER))
 							{
 								htmltext = "30097-01.htm";
 							}
diff --git a/dist/game/data/scripts/quests/Q00060_GoodWorksReward/Q00060_GoodWorksReward.java b/dist/game/data/scripts/quests/Q00060_GoodWorksReward/Q00060_GoodWorksReward.java
index 85b6abfb57fb33e814345ade1cd2815c15d02d25..c2533015136b4a07b25a6d335670b85e66abf48e 100644
--- a/dist/game/data/scripts/quests/Q00060_GoodWorksReward/Q00060_GoodWorksReward.java
+++ b/dist/game/data/scripts/quests/Q00060_GoodWorksReward/Q00060_GoodWorksReward.java
@@ -226,36 +226,17 @@ public final class Q00060_GoodWorksReward extends Quest
 			{
 				if (qs.isMemoState(10))
 				{
-					final QuestState q211 = player.getQuestState(Q00211_TrialOfTheChallenger.class.getSimpleName());
-					final QuestState q212 = player.getQuestState(Q00212_TrialOfDuty.class.getSimpleName());
-					final QuestState q213 = player.getQuestState(Q00213_TrialOfTheSeeker.class.getSimpleName());
-					final QuestState q214 = player.getQuestState(Q00214_TrialOfTheScholar.class.getSimpleName());
-					final QuestState q215 = player.getQuestState(Q00215_TrialOfThePilgrim.class.getSimpleName());
-					final QuestState q216 = player.getQuestState(Q00216_TrialOfTheGuildsman.class.getSimpleName());
-					final QuestState q217 = player.getQuestState(Q00217_TestimonyOfTrust.class.getSimpleName());
-					final QuestState q218 = player.getQuestState(Q00218_TestimonyOfLife.class.getSimpleName());
-					final QuestState q219 = player.getQuestState(Q00219_TestimonyOfFate.class.getSimpleName());
-					final QuestState q220 = player.getQuestState(Q00220_TestimonyOfGlory.class.getSimpleName());
-					final QuestState q221 = player.getQuestState(Q00221_TestimonyOfProsperity.class.getSimpleName());
-					final QuestState q222 = player.getQuestState(Q00222_TestOfTheDuelist.class.getSimpleName());
-					final QuestState q223 = player.getQuestState(Q00223_TestOfTheChampion.class.getSimpleName());
-					final QuestState q224 = player.getQuestState(Q00224_TestOfSagittarius.class.getSimpleName());
-					final QuestState q225 = player.getQuestState(Q00225_TestOfTheSearcher.class.getSimpleName());
-					final QuestState q226 = player.getQuestState(Q00226_TestOfTheHealer.class.getSimpleName());
-					final QuestState q227 = player.getQuestState(Q00227_TestOfTheReformer.class.getSimpleName());
-					final QuestState q228 = player.getQuestState(Q00228_TestOfMagus.class.getSimpleName());
-					final QuestState q229 = player.getQuestState(Q00229_TestOfWitchcraft.class.getSimpleName());
-					final QuestState q230 = player.getQuestState(Q00230_TestOfTheSummoner.class.getSimpleName());
-					final QuestState q231 = player.getQuestState(Q00231_TestOfTheMaestro.class.getSimpleName());
-					final QuestState q232 = player.getQuestState(Q00232_TestOfTheLord.class.getSimpleName());
-					final QuestState q233 = player.getQuestState(Q00233_TestOfTheWarSpirit.class.getSimpleName());
-					if (((q211 != null) && q211.isCompleted()) || ((q212 != null) && q212.isCompleted()) || ((q213 != null) && q213.isCompleted()) || ((q214 != null) && q214.isCompleted()) || ((q215 != null) && q215.isCompleted()) || ((q216 != null) && q216.isCompleted()))
-					{
-						if (((q217 != null) && q217.isCompleted()) || ((q218 != null) && q218.isCompleted()) || ((q219 != null) && q219.isCompleted()) || ((q220 != null) && q220.isCompleted()) || ((q221 != null) && q221.isCompleted()))
+					if (player.hasQuestCompleted(Q00211_TrialOfTheChallenger.class.getSimpleName()) || player.hasQuestCompleted(Q00212_TrialOfDuty.class.getSimpleName()) || player.hasQuestCompleted(Q00213_TrialOfTheSeeker.class.getSimpleName())
+						|| player.hasQuestCompleted(Q00214_TrialOfTheScholar.class.getSimpleName()) || player.hasQuestCompleted(Q00215_TrialOfThePilgrim.class.getSimpleName()) || player.hasQuestCompleted(Q00216_TrialOfTheGuildsman.class.getSimpleName()))
+					{
+						if (player.hasQuestCompleted(Q00217_TestimonyOfTrust.class.getSimpleName()) || player.hasQuestCompleted(Q00218_TestimonyOfLife.class.getSimpleName()) || player.hasQuestCompleted(Q00219_TestimonyOfFate.class.getSimpleName())
+							|| player.hasQuestCompleted(Q00220_TestimonyOfGlory.class.getSimpleName()) || player.hasQuestCompleted(Q00221_TestimonyOfProsperity.class.getSimpleName()))
 						{
 							
-							if (((q222 != null) && q222.isCompleted()) || ((q223 != null) && q223.isCompleted()) || ((q224 != null) && q224.isCompleted()) || ((q225 != null) && q225.isCompleted()) || ((q226 != null) && q226.isCompleted()) || ((q227 != null) && q227.isCompleted())
-								|| ((q228 != null) && q228.isCompleted()) || ((q229 != null) && q229.isCompleted()) || ((q230 != null) && q230.isCompleted()) || ((q231 != null) && q231.isCompleted()) || ((q232 != null) && q232.isCompleted()) || ((q233 != null) && q233.isCompleted()))
+							if (player.hasQuestCompleted(Q00222_TestOfTheDuelist.class.getSimpleName()) || player.hasQuestCompleted(Q00223_TestOfTheChampion.class.getSimpleName()) || player.hasQuestCompleted(Q00224_TestOfSagittarius.class.getSimpleName())
+								|| player.hasQuestCompleted(Q00225_TestOfTheSearcher.class.getSimpleName()) || player.hasQuestCompleted(Q00226_TestOfTheHealer.class.getSimpleName()) || player.hasQuestCompleted(Q00227_TestOfTheReformer.class.getSimpleName())
+								|| player.hasQuestCompleted(Q00228_TestOfMagus.class.getSimpleName()) || player.hasQuestCompleted(Q00229_TestOfWitchcraft.class.getSimpleName()) || player.hasQuestCompleted(Q00230_TestOfTheSummoner.class.getSimpleName())
+								|| player.hasQuestCompleted(Q00231_TestOfTheMaestro.class.getSimpleName()) || player.hasQuestCompleted(Q00232_TestOfTheLord.class.getSimpleName()) || player.hasQuestCompleted(Q00233_TestOfTheWarSpirit.class.getSimpleName()))
 							{
 								qs.setMemoStateEx(1, 3);
 							}
@@ -264,8 +245,10 @@ public final class Q00060_GoodWorksReward extends Quest
 								qs.setMemoStateEx(1, 2);
 							}
 						}
-						else if (((q222 != null) && q222.isCompleted()) || ((q223 != null) && q223.isCompleted()) || ((q224 != null) && q224.isCompleted()) || ((q225 != null) && q225.isCompleted()) || ((q226 != null) && q226.isCompleted()) || ((q227 != null) && q227.isCompleted())
-							|| ((q228 != null) && q228.isCompleted()) || ((q229 != null) && q229.isCompleted()) || ((q230 != null) && q230.isCompleted()) || ((q231 != null) && q231.isCompleted()) || ((q232 != null) && q232.isCompleted()) || ((q233 != null) && q233.isCompleted()))
+						else if (player.hasQuestCompleted(Q00222_TestOfTheDuelist.class.getSimpleName()) || player.hasQuestCompleted(Q00223_TestOfTheChampion.class.getSimpleName()) || player.hasQuestCompleted(Q00224_TestOfSagittarius.class.getSimpleName())
+							|| player.hasQuestCompleted(Q00225_TestOfTheSearcher.class.getSimpleName()) || player.hasQuestCompleted(Q00226_TestOfTheHealer.class.getSimpleName()) || player.hasQuestCompleted(Q00227_TestOfTheReformer.class.getSimpleName())
+							|| player.hasQuestCompleted(Q00228_TestOfMagus.class.getSimpleName()) || player.hasQuestCompleted(Q00229_TestOfWitchcraft.class.getSimpleName()) || player.hasQuestCompleted(Q00230_TestOfTheSummoner.class.getSimpleName())
+							|| player.hasQuestCompleted(Q00231_TestOfTheMaestro.class.getSimpleName()) || player.hasQuestCompleted(Q00232_TestOfTheLord.class.getSimpleName()) || player.hasQuestCompleted(Q00233_TestOfTheWarSpirit.class.getSimpleName()))
 						{
 							qs.setMemoStateEx(1, 2);
 						}
@@ -274,10 +257,13 @@ public final class Q00060_GoodWorksReward extends Quest
 							qs.setMemoStateEx(1, 1);
 						}
 					}
-					else if (((q217 != null) && q217.isCompleted()) || ((q218 != null) && q218.isCompleted()) || ((q219 != null) && q219.isCompleted()) || ((q220 != null) && q220.isCompleted()) || ((q221 != null) && q221.isCompleted()))
+					else if (player.hasQuestCompleted(Q00217_TestimonyOfTrust.class.getSimpleName()) || player.hasQuestCompleted(Q00218_TestimonyOfLife.class.getSimpleName()) || player.hasQuestCompleted(Q00219_TestimonyOfFate.class.getSimpleName())
+						|| player.hasQuestCompleted(Q00220_TestimonyOfGlory.class.getSimpleName()) || player.hasQuestCompleted(Q00221_TestimonyOfProsperity.class.getSimpleName()))
 					{
-						if (((q222 != null) && q222.isCompleted()) || ((q223 != null) && q223.isCompleted()) || ((q224 != null) && q224.isCompleted()) || ((q225 != null) && q225.isCompleted()) || ((q226 != null) && q226.isCompleted()) || ((q227 != null) && q227.isCompleted())
-							|| ((q228 != null) && q228.isCompleted()) || ((q229 != null) && q229.isCompleted()) || ((q230 != null) && q230.isCompleted()) || ((q231 != null) && q231.isCompleted()) || ((q232 != null) && q232.isCompleted()) || ((q233 != null) && q233.isCompleted()))
+						if (player.hasQuestCompleted(Q00222_TestOfTheDuelist.class.getSimpleName()) || player.hasQuestCompleted(Q00223_TestOfTheChampion.class.getSimpleName()) || player.hasQuestCompleted(Q00224_TestOfSagittarius.class.getSimpleName())
+							|| player.hasQuestCompleted(Q00225_TestOfTheSearcher.class.getSimpleName()) || player.hasQuestCompleted(Q00226_TestOfTheHealer.class.getSimpleName()) || player.hasQuestCompleted(Q00227_TestOfTheReformer.class.getSimpleName())
+							|| player.hasQuestCompleted(Q00228_TestOfMagus.class.getSimpleName()) || player.hasQuestCompleted(Q00229_TestOfWitchcraft.class.getSimpleName()) || player.hasQuestCompleted(Q00230_TestOfTheSummoner.class.getSimpleName())
+							|| player.hasQuestCompleted(Q00231_TestOfTheMaestro.class.getSimpleName()) || player.hasQuestCompleted(Q00232_TestOfTheLord.class.getSimpleName()) || player.hasQuestCompleted(Q00233_TestOfTheWarSpirit.class.getSimpleName()))
 						{
 							qs.setMemoStateEx(1, 2);
 						}
@@ -286,8 +272,10 @@ public final class Q00060_GoodWorksReward extends Quest
 							qs.setMemoStateEx(1, 1);
 						}
 					}
-					else if (((q222 != null) && q222.isCompleted()) || ((q223 != null) && q223.isCompleted()) || ((q224 != null) && q224.isCompleted()) || ((q225 != null) && q225.isCompleted()) || ((q226 != null) && q226.isCompleted()) || ((q227 != null) && q227.isCompleted())
-						|| ((q228 != null) && q228.isCompleted()) || ((q229 != null) && q229.isCompleted()) || ((q230 != null) && q230.isCompleted()) || ((q231 != null) && q231.isCompleted()) || ((q232 != null) && q232.isCompleted()) || ((q233 != null) && q233.isCompleted()))
+					else if (player.hasQuestCompleted(Q00222_TestOfTheDuelist.class.getSimpleName()) || player.hasQuestCompleted(Q00223_TestOfTheChampion.class.getSimpleName()) || player.hasQuestCompleted(Q00224_TestOfSagittarius.class.getSimpleName())
+						|| player.hasQuestCompleted(Q00225_TestOfTheSearcher.class.getSimpleName()) || player.hasQuestCompleted(Q00226_TestOfTheHealer.class.getSimpleName()) || player.hasQuestCompleted(Q00227_TestOfTheReformer.class.getSimpleName())
+						|| player.hasQuestCompleted(Q00228_TestOfMagus.class.getSimpleName()) || player.hasQuestCompleted(Q00229_TestOfWitchcraft.class.getSimpleName()) || player.hasQuestCompleted(Q00230_TestOfTheSummoner.class.getSimpleName())
+						|| player.hasQuestCompleted(Q00231_TestOfTheMaestro.class.getSimpleName()) || player.hasQuestCompleted(Q00232_TestOfTheLord.class.getSimpleName()) || player.hasQuestCompleted(Q00233_TestOfTheWarSpirit.class.getSimpleName()))
 					{
 						qs.setMemoStateEx(1, 1);
 					}
diff --git a/dist/game/data/scripts/quests/Q00114_ResurrectionOfAnOldManager/Q00114_ResurrectionOfAnOldManager.java b/dist/game/data/scripts/quests/Q00114_ResurrectionOfAnOldManager/Q00114_ResurrectionOfAnOldManager.java
index 135d883abbff401b6b762bac2a23631b9cdc8e2e..6422804b579150632bb596312f09aeec65324a6f 100644
--- a/dist/game/data/scripts/quests/Q00114_ResurrectionOfAnOldManager/Q00114_ResurrectionOfAnOldManager.java
+++ b/dist/game/data/scripts/quests/Q00114_ResurrectionOfAnOldManager/Q00114_ResurrectionOfAnOldManager.java
@@ -366,8 +366,7 @@ public class Q00114_ResurrectionOfAnOldManager extends Quest
 				switch (st.getState())
 				{
 					case State.CREATED:
-						final QuestState prev = player.getQuestState(Q00121_PavelTheGiant.class.getSimpleName());
-						if ((prev != null) && prev.isCompleted())
+						if (player.hasQuestCompleted(Q00121_PavelTheGiant.class.getSimpleName()))
 						{
 							htmltext = (player.getLevel() >= 70) ? "32041-02.htm" : "32041-03.htm";
 						}
diff --git a/dist/game/data/scripts/quests/Q00120_PavelsLastResearch/Q00120_PavelsLastResearch.java b/dist/game/data/scripts/quests/Q00120_PavelsLastResearch/Q00120_PavelsLastResearch.java
index 2b2ab7a071cf334e0ff0f03f54995f05d9a438c7..2e62e988119ea16551395867bb6e29addac29764 100644
--- a/dist/game/data/scripts/quests/Q00120_PavelsLastResearch/Q00120_PavelsLastResearch.java
+++ b/dist/game/data/scripts/quests/Q00120_PavelsLastResearch/Q00120_PavelsLastResearch.java
@@ -90,7 +90,7 @@ public final class Q00120_PavelsLastResearch extends Quest
 			}
 			case "quest_accept":
 			{
-				if (qs.isCreated() && checkQ114(player))
+				if (qs.isCreated() && player.hasQuestCompleted(Q00114_ResurrectionOfAnOldManager.class.getSimpleName()))
 				{
 					if (player.getLevel() >= 70)
 					{
@@ -1166,7 +1166,7 @@ public final class Q00120_PavelsLastResearch extends Quest
 			{
 				if (qs.isCreated())
 				{
-					if (checkQ114(player))
+					if (player.hasQuestCompleted(Q00114_ResurrectionOfAnOldManager.class.getSimpleName()))
 					{
 						html = "32046-01.htm";
 					}
@@ -1249,7 +1249,7 @@ public final class Q00120_PavelsLastResearch extends Quest
 				}
 				else
 				{
-					if (checkQ114(player))
+					if (player.hasQuestCompleted(Q00114_ResurrectionOfAnOldManager.class.getSimpleName()))
 					{
 						html = getAlreadyCompletedMsg(player);
 					}
@@ -1531,10 +1531,4 @@ public final class Q00120_PavelsLastResearch extends Quest
 		
 		return html;
 	}
-	
-	private static boolean checkQ114(L2PcInstance player)
-	{
-		final QuestState q114 = player.getQuestState(Q00114_ResurrectionOfAnOldManager.class.getSimpleName());
-		return ((q114 != null) && q114.isCompleted());
-	}
 }
diff --git a/dist/game/data/scripts/quests/Q00125_TheNameOfEvil1/Q00125_TheNameOfEvil1.java b/dist/game/data/scripts/quests/Q00125_TheNameOfEvil1/Q00125_TheNameOfEvil1.java
index 6d60632f6451688916e99484828521e4d761c8a3..cabff25ee439c0eb58db9eeca479f6b57afced41 100644
--- a/dist/game/data/scripts/quests/Q00125_TheNameOfEvil1/Q00125_TheNameOfEvil1.java
+++ b/dist/game/data/scripts/quests/Q00125_TheNameOfEvil1/Q00125_TheNameOfEvil1.java
@@ -305,8 +305,7 @@ public class Q00125_TheNameOfEvil1 extends Quest
 						}
 						else
 						{
-							st = player.getQuestState(Q00124_MeetingTheElroki.class.getSimpleName());
-							htmltext = ((st != null) && st.isCompleted()) ? "32114-01.htm" : "32114-01b.htm";
+							htmltext = (player.hasQuestCompleted(Q00124_MeetingTheElroki.class.getSimpleName())) ? "32114-01.htm" : "32114-01b.htm";
 						}
 						break;
 					case State.STARTED:
diff --git a/dist/game/data/scripts/quests/Q00126_TheNameOfEvil2/Q00126_TheNameOfEvil2.java b/dist/game/data/scripts/quests/Q00126_TheNameOfEvil2/Q00126_TheNameOfEvil2.java
index b49bafea826cc052c1a1ea18816a5c6dccbabb75..50ff236f1cfa16440eb2a85fecd3ad449eba0b77 100644
--- a/dist/game/data/scripts/quests/Q00126_TheNameOfEvil2/Q00126_TheNameOfEvil2.java
+++ b/dist/game/data/scripts/quests/Q00126_TheNameOfEvil2/Q00126_TheNameOfEvil2.java
@@ -350,8 +350,7 @@ public class Q00126_TheNameOfEvil2 extends Quest
 						}
 						else
 						{
-							st = player.getQuestState(Q00125_TheNameOfEvil1.class.getSimpleName());
-							htmltext = ((st != null) && st.isCompleted()) ? "32115-0a.htm" : "32115-0b.htm";
+							htmltext = (player.hasQuestCompleted(Q00125_TheNameOfEvil1.class.getSimpleName())) ? "32115-0a.htm" : "32115-0b.htm";
 						}
 						break;
 					case State.STARTED:
diff --git a/dist/game/data/scripts/quests/Q00133_ThatsBloodyHot/Q00133_ThatsBloodyHot.java b/dist/game/data/scripts/quests/Q00133_ThatsBloodyHot/Q00133_ThatsBloodyHot.java
index 97bfe1a1ebe53f63922f6973fd63812e29315267..6539459b9c4eeec80952e1a104b1fb5480eadf29 100644
--- a/dist/game/data/scripts/quests/Q00133_ThatsBloodyHot/Q00133_ThatsBloodyHot.java
+++ b/dist/game/data/scripts/quests/Q00133_ThatsBloodyHot/Q00133_ThatsBloodyHot.java
@@ -164,8 +164,7 @@ public class Q00133_ThatsBloodyHot extends Quest
 			{
 				if (npc.getId() == KANIS)
 				{
-					final QuestState qs = player.getQuestState(Q00131_BirdInACage.class.getSimpleName());
-					if ((qs != null) && qs.isCompleted())
+					if (player.hasQuestCompleted(Q00131_BirdInACage.class.getSimpleName()))
 					{
 						htmltext = (player.getLevel() >= MIN_LEVEL) ? "32264-01.htm" : "32264-02.html";
 					}
diff --git a/dist/game/data/scripts/quests/Q00138_TempleChampionPart2/Q00138_TempleChampionPart2.java b/dist/game/data/scripts/quests/Q00138_TempleChampionPart2/Q00138_TempleChampionPart2.java
index 4ebe387d5639b9d77d60eb05f74e78771459d7b5..c5eff3546e24d1b4913d91eb82878f2076411217 100644
--- a/dist/game/data/scripts/quests/Q00138_TempleChampionPart2/Q00138_TempleChampionPart2.java
+++ b/dist/game/data/scripts/quests/Q00138_TempleChampionPart2/Q00138_TempleChampionPart2.java
@@ -163,8 +163,7 @@ public class Q00138_TempleChampionPart2 extends Quest
 						{
 							return getAlreadyCompletedMsg(player);
 						}
-						final QuestState qs = player.getQuestState(Q00137_TempleChampionPart1.class.getSimpleName());
-						htmltext = (player.getLevel() >= 36) ? ((qs != null) && qs.isCompleted()) ? "30070-01.htm" : "30070-00a.htm" : "30070-00.htm";
+						htmltext = (player.getLevel() >= 36) ? (player.hasQuestCompleted(Q00137_TempleChampionPart1.class.getSimpleName())) ? "30070-01.htm" : "30070-00a.htm" : "30070-00.htm";
 						break;
 				}
 				break;
diff --git a/dist/game/data/scripts/quests/Q00139_ShadowFoxPart1/Q00139_ShadowFoxPart1.java b/dist/game/data/scripts/quests/Q00139_ShadowFoxPart1/Q00139_ShadowFoxPart1.java
index 781d6dfd6b6268aba9f281fe6525b80533ac9568..dc9677ebc8ca00eb4d2dcc4e3e9dc5fcd12e0ee3 100644
--- a/dist/game/data/scripts/quests/Q00139_ShadowFoxPart1/Q00139_ShadowFoxPart1.java
+++ b/dist/game/data/scripts/quests/Q00139_ShadowFoxPart1/Q00139_ShadowFoxPart1.java
@@ -148,8 +148,7 @@ public class Q00139_ShadowFoxPart1 extends Quest
 		switch (st.getState())
 		{
 			case State.CREATED:
-				final QuestState qs = player.getQuestState(Q00138_TempleChampionPart2.class.getSimpleName());
-				htmltext = ((qs != null) && qs.isCompleted()) ? "30896-01.htm" : "30896-00.html";
+				htmltext = (player.hasQuestCompleted(Q00138_TempleChampionPart2.class.getSimpleName())) ? "30896-01.htm" : "30896-00.html";
 				break;
 			case State.STARTED:
 				switch (st.getCond())
diff --git a/dist/game/data/scripts/quests/Q00140_ShadowFoxPart2/Q00140_ShadowFoxPart2.java b/dist/game/data/scripts/quests/Q00140_ShadowFoxPart2/Q00140_ShadowFoxPart2.java
index e460f4958d373d640857a69caf5b6adbed26cbf5..3e27dfcb17f69616e5d5212d3136ad4e063bcc44 100644
--- a/dist/game/data/scripts/quests/Q00140_ShadowFoxPart2/Q00140_ShadowFoxPart2.java
+++ b/dist/game/data/scripts/quests/Q00140_ShadowFoxPart2/Q00140_ShadowFoxPart2.java
@@ -161,8 +161,7 @@ public class Q00140_ShadowFoxPart2 extends Quest
 				switch (st.getState())
 				{
 					case State.CREATED:
-						final QuestState qs = player.getQuestState(Q00139_ShadowFoxPart1.class.getSimpleName());
-						htmltext = (player.getLevel() >= MIN_LEVEL) ? ((qs != null) && qs.isCompleted()) ? "30895-01.htm" : "30895-00.htm" : "30895-02.htm";
+						htmltext = (player.getLevel() >= MIN_LEVEL) ? (player.hasQuestCompleted(Q00139_ShadowFoxPart1.class.getSimpleName())) ? "30895-01.htm" : "30895-00.htm" : "30895-02.htm";
 						break;
 					case State.STARTED:
 						switch (st.getCond())
diff --git a/dist/game/data/scripts/quests/Q00141_ShadowFoxPart3/Q00141_ShadowFoxPart3.java b/dist/game/data/scripts/quests/Q00141_ShadowFoxPart3/Q00141_ShadowFoxPart3.java
index 30faf0f7ebfe55a956394d99bbf44a5a9533bf0e..fc2b2e45c9b3a16e74e5f456e3382d464a8d99d8 100644
--- a/dist/game/data/scripts/quests/Q00141_ShadowFoxPart3/Q00141_ShadowFoxPart3.java
+++ b/dist/game/data/scripts/quests/Q00141_ShadowFoxPart3/Q00141_ShadowFoxPart3.java
@@ -153,8 +153,7 @@ public class Q00141_ShadowFoxPart3 extends Quest
 		switch (st.getState())
 		{
 			case State.CREATED:
-				final QuestState qs = player.getQuestState(Q00140_ShadowFoxPart2.class.getSimpleName());
-				htmltext = (player.getLevel() >= MIN_LEVEL) ? ((qs != null) && qs.isCompleted()) ? "30894-01.htm" : "30894-00.html" : "30894-02.htm";
+				htmltext = (player.getLevel() >= MIN_LEVEL) ? (player.hasQuestCompleted(Q00140_ShadowFoxPart2.class.getSimpleName())) ? "30894-01.htm" : "30894-00.html" : "30894-02.htm";
 				break;
 			case State.STARTED:
 				switch (st.getCond())
diff --git a/dist/game/data/scripts/quests/Q00146_TheZeroHour/Q00146_TheZeroHour.java b/dist/game/data/scripts/quests/Q00146_TheZeroHour/Q00146_TheZeroHour.java
index 59860f171d81f38320d6e23fd5fcea9201f7a18f..922e933c71fa1b75c050b23d7e3bc48ce79e567f 100644
--- a/dist/game/data/scripts/quests/Q00146_TheZeroHour/Q00146_TheZeroHour.java
+++ b/dist/game/data/scripts/quests/Q00146_TheZeroHour/Q00146_TheZeroHour.java
@@ -94,15 +94,7 @@ public class Q00146_TheZeroHour extends Quest
 				}
 				else
 				{
-					final QuestState prev = player.getQuestState(Q00109_InSearchOfTheNest.class.getSimpleName());
-					if ((prev != null) && prev.isCompleted())
-					{
-						htmltext = "31554-01a.htm";
-					}
-					else
-					{
-						htmltext = "31554-04.html";
-					}
+					htmltext = (player.hasQuestCompleted(Q00109_InSearchOfTheNest.class.getSimpleName())) ? "31554-01a.htm" : "31554-04.html";
 				}
 				break;
 			case State.STARTED:
diff --git a/dist/game/data/scripts/quests/Q00148_PathtoBecominganExaltedMercenary/Q00148_PathtoBecominganExaltedMercenary.java b/dist/game/data/scripts/quests/Q00148_PathtoBecominganExaltedMercenary/Q00148_PathtoBecominganExaltedMercenary.java
index 31c4d60124888e84eadf9590c7539e76ead74944..4440d5cdd3ae91fa0af747ec3d099ca6291cc6f3 100644
--- a/dist/game/data/scripts/quests/Q00148_PathtoBecominganExaltedMercenary/Q00148_PathtoBecominganExaltedMercenary.java
+++ b/dist/game/data/scripts/quests/Q00148_PathtoBecominganExaltedMercenary/Q00148_PathtoBecominganExaltedMercenary.java
@@ -86,7 +86,6 @@ public class Q00148_PathtoBecominganExaltedMercenary extends Quest
 		switch (st.getState())
 		{
 			case State.CREATED:
-				QuestState _prev = player.getQuestState(Q00147_PathtoBecominganEliteMercenary.class.getSimpleName());
 				if ((player.getClan() != null) && (player.getClan().getCastleId() > 0))
 				{
 					htmltext = "castle.htm";
@@ -97,14 +96,7 @@ public class Q00148_PathtoBecominganExaltedMercenary extends Quest
 				}
 				else
 				{
-					if ((_prev != null) && _prev.isCompleted())
-					{
-						htmltext = "exalted-00a.htm";
-					}
-					else
-					{
-						htmltext = "exalted-00.htm";
-					}
+					htmltext = (player.hasQuestCompleted(Q00147_PathtoBecominganEliteMercenary.class.getSimpleName())) ? "exalted-00a.htm" : "exalted-00.htm";
 				}
 				break;
 			case State.STARTED:
diff --git a/dist/game/data/scripts/quests/Q00173_ToTheIsleOfSouls/Q00173_ToTheIsleOfSouls.java b/dist/game/data/scripts/quests/Q00173_ToTheIsleOfSouls/Q00173_ToTheIsleOfSouls.java
index 32d31d5cd883dff1a429c316dff3d921c9f915f0..f22f91a07cddcb9333179f3b63a62574f9b938f9 100644
--- a/dist/game/data/scripts/quests/Q00173_ToTheIsleOfSouls/Q00173_ToTheIsleOfSouls.java
+++ b/dist/game/data/scripts/quests/Q00173_ToTheIsleOfSouls/Q00173_ToTheIsleOfSouls.java
@@ -96,8 +96,7 @@ public class Q00173_ToTheIsleOfSouls extends Quest
 				switch (st.getState())
 				{
 					case State.CREATED:
-						final QuestState qs = player.getQuestState(Q00172_NewHorizons.class.getSimpleName());
-						htmltext = ((qs != null) && qs.isCompleted() && (player.getRace() == Race.KAMAEL) && st.hasQuestItems(MARK_OF_TRAVELER)) ? "30097-01.htm" : "30097-02.htm";
+						htmltext = (player.hasQuestCompleted(Q00172_NewHorizons.class.getSimpleName()) && (player.getRace() == Race.KAMAEL) && st.hasQuestItems(MARK_OF_TRAVELER)) ? "30097-01.htm" : "30097-02.htm";
 						break;
 					case State.STARTED:
 						htmltext = (st.isCond(1)) ? "30097-04.html" : "30097-05.html";
diff --git a/dist/game/data/scripts/quests/Q00179_IntoTheLargeCavern/Q00179_IntoTheLargeCavern.java b/dist/game/data/scripts/quests/Q00179_IntoTheLargeCavern/Q00179_IntoTheLargeCavern.java
index 57efaa5a28e65e08fb3f897d2aef49e0cb23f7f5..29d35022e75bcbeb7a13c9d8974af498b2bdfcf5 100644
--- a/dist/game/data/scripts/quests/Q00179_IntoTheLargeCavern/Q00179_IntoTheLargeCavern.java
+++ b/dist/game/data/scripts/quests/Q00179_IntoTheLargeCavern/Q00179_IntoTheLargeCavern.java
@@ -100,9 +100,8 @@ public class Q00179_IntoTheLargeCavern extends Quest
 					}
 					else
 					{
-						final QuestState prev = player.getQuestState(Q00178_IconicTrinity.class.getSimpleName());
 						final int level = player.getLevel();
-						if ((prev != null) && prev.isCompleted() && (level >= MIN_LEVEL) && (level <= MAX_LEVEL) && (player.getClassId().level() == 0))
+						if (player.hasQuestCompleted(Q00178_IconicTrinity.class.getSimpleName()) && (level >= MIN_LEVEL) && (level <= MAX_LEVEL) && (player.getClassId().level() == 0))
 						{
 							htmltext = "32138-01.htm";
 						}
diff --git a/dist/game/data/scripts/quests/Q00184_ArtOfPersuasion/Q00184_ArtOfPersuasion.java b/dist/game/data/scripts/quests/Q00184_ArtOfPersuasion/Q00184_ArtOfPersuasion.java
index 15182efd91e2dbe44f4f0144506916571fb9bdfa..725d5aa73f4b428fa258e09693174d31f249af5b 100644
--- a/dist/game/data/scripts/quests/Q00184_ArtOfPersuasion/Q00184_ArtOfPersuasion.java
+++ b/dist/game/data/scripts/quests/Q00184_ArtOfPersuasion/Q00184_ArtOfPersuasion.java
@@ -18,14 +18,14 @@
  */
 package quests.Q00184_ArtOfPersuasion;
 
-import quests.Q00183_RelicExploration.Q00183_RelicExploration;
-import quests.Q00185_NikolasCooperation.Q00185_NikolasCooperation;
-
 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 quests.Q00183_RelicExploration.Q00183_RelicExploration;
+import quests.Q00185_NikolasCooperation.Q00185_NikolasCooperation;
+
 /**
  * Art Of Persuasion (184)
  * @author ivantotov
@@ -208,10 +208,9 @@ public final class Q00184_ArtOfPersuasion extends Quest
 		{
 			if (npc.getId() == MAESTRO_NIKOLA)
 			{
-				final QuestState q183 = player.getQuestState(Q00183_RelicExploration.class.getSimpleName());
 				final QuestState q184 = player.getQuestState(Q00184_ArtOfPersuasion.class.getSimpleName());
 				final QuestState q185 = player.getQuestState(Q00185_NikolasCooperation.class.getSimpleName());
-				if ((q183 != null) && q183.isCompleted() && (q184 != null) && (q185 != null))
+				if (player.hasQuestCompleted(Q00183_RelicExploration.class.getSimpleName()) && (q184 != null) && (q185 != null))
 				{
 					htmltext = (player.getLevel() >= MIN_LEVEL) ? "30621-01.htm" : "30621-02.html";
 				}
diff --git a/dist/game/data/scripts/quests/Q00185_NikolasCooperation/Q00185_NikolasCooperation.java b/dist/game/data/scripts/quests/Q00185_NikolasCooperation/Q00185_NikolasCooperation.java
index f4f223bbfcc46b8666ad4927154f3c619b79062c..c45e11204b3f3f2f992255defecfc1aec6834d40 100644
--- a/dist/game/data/scripts/quests/Q00185_NikolasCooperation/Q00185_NikolasCooperation.java
+++ b/dist/game/data/scripts/quests/Q00185_NikolasCooperation/Q00185_NikolasCooperation.java
@@ -18,14 +18,14 @@
  */
 package quests.Q00185_NikolasCooperation;
 
-import quests.Q00183_RelicExploration.Q00183_RelicExploration;
-import quests.Q00184_ArtOfPersuasion.Q00184_ArtOfPersuasion;
-
 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 quests.Q00183_RelicExploration.Q00183_RelicExploration;
+import quests.Q00184_ArtOfPersuasion.Q00184_ArtOfPersuasion;
+
 /**
  * Nikola's Cooperation (185)
  * @author ivantotov
@@ -208,10 +208,9 @@ public final class Q00185_NikolasCooperation extends Quest
 		{
 			if (npc.getId() == MAESTRO_NIKOLA)
 			{
-				final QuestState q183 = player.getQuestState(Q00183_RelicExploration.class.getSimpleName());
 				final QuestState q184 = player.getQuestState(Q00184_ArtOfPersuasion.class.getSimpleName());
 				final QuestState q185 = player.getQuestState(Q00185_NikolasCooperation.class.getSimpleName());
-				if ((q183 != null) && q183.isCompleted() && (q184 != null) && (q185 != null))
+				if (player.hasQuestCompleted(Q00183_RelicExploration.class.getSimpleName()) && (q184 != null) && (q185 != null))
 				{
 					htmltext = (player.getLevel() >= MIN_LEVEL) ? "30621-01.htm" : "30621-02.html";
 				}
diff --git a/dist/game/data/scripts/quests/Q00186_ContractExecution/Q00186_ContractExecution.java b/dist/game/data/scripts/quests/Q00186_ContractExecution/Q00186_ContractExecution.java
index 3200dfdfa52551986f8b9fe2d115d69fad9d3c9e..f4177c53aa9109d7fb65cd8e695db861873093bf 100644
--- a/dist/game/data/scripts/quests/Q00186_ContractExecution/Q00186_ContractExecution.java
+++ b/dist/game/data/scripts/quests/Q00186_ContractExecution/Q00186_ContractExecution.java
@@ -21,8 +21,6 @@ package quests.Q00186_ContractExecution;
 import java.util.HashMap;
 import java.util.Map;
 
-import quests.Q00184_ArtOfPersuasion.Q00184_ArtOfPersuasion;
-
 import com.l2jserver.gameserver.enums.audio.Sound;
 import com.l2jserver.gameserver.model.actor.L2Npc;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
@@ -30,6 +28,8 @@ import com.l2jserver.gameserver.model.quest.Quest;
 import com.l2jserver.gameserver.model.quest.QuestState;
 import com.l2jserver.gameserver.util.Util;
 
+import quests.Q00184_ArtOfPersuasion.Q00184_ArtOfPersuasion;
+
 /**
  * Contract Execution (186)
  * @author ivantotov
@@ -170,8 +170,7 @@ public final class Q00186_ContractExecution extends Quest
 		{
 			if (npc.getId() == RESEARCHER_LORAIN)
 			{
-				final QuestState q184 = player.getQuestState(Q00184_ArtOfPersuasion.class.getSimpleName());
-				if ((q184 != null) && q184.isCompleted() && hasQuestItems(player, LORAINES_CERTIFICATE))
+				if (player.hasQuestCompleted(Q00184_ArtOfPersuasion.class.getSimpleName()) && hasQuestItems(player, LORAINES_CERTIFICATE))
 				{
 					htmltext = player.getLevel() >= MIN_LEVEL ? "30673-01.htm" : "30673-02.htm";
 				}
diff --git a/dist/game/data/scripts/quests/Q00187_NikolasHeart/Q00187_NikolasHeart.java b/dist/game/data/scripts/quests/Q00187_NikolasHeart/Q00187_NikolasHeart.java
index 45b8bce2804e70560b96bd08a71f91b9a7e65387..4c46d9cbbc3b068b0de60bd191aca0b4fffb2f0c 100644
--- a/dist/game/data/scripts/quests/Q00187_NikolasHeart/Q00187_NikolasHeart.java
+++ b/dist/game/data/scripts/quests/Q00187_NikolasHeart/Q00187_NikolasHeart.java
@@ -18,13 +18,13 @@
  */
 package quests.Q00187_NikolasHeart;
 
-import quests.Q00185_NikolasCooperation.Q00185_NikolasCooperation;
-
 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 quests.Q00185_NikolasCooperation.Q00185_NikolasCooperation;
+
 /**
  * Nikola's Heart (187)
  * @author ivantotov
@@ -128,8 +128,7 @@ public final class Q00187_NikolasHeart extends Quest
 		{
 			if (npc.getId() == RESEARCHER_LORAIN)
 			{
-				final QuestState q185 = player.getQuestState(Q00185_NikolasCooperation.class.getSimpleName());
-				if ((q185 != null) && q185.isCompleted() && hasQuestItems(player, LORAINES_CERTIFICATE))
+				if (player.hasQuestCompleted(Q00185_NikolasCooperation.class.getSimpleName()) && hasQuestItems(player, LORAINES_CERTIFICATE))
 				{
 					htmltext = player.getLevel() >= MIN_LEVEL ? "30673-01.htm" : "30673-02.htm";
 				}
diff --git a/dist/game/data/scripts/quests/Q00188_SealRemoval/Q00188_SealRemoval.java b/dist/game/data/scripts/quests/Q00188_SealRemoval/Q00188_SealRemoval.java
index 2cdc880b35a4d40bfdaa77ac91d175e0b210b6f1..e6965f347a746a2ebc13a85fdce69a92e784bf41 100644
--- a/dist/game/data/scripts/quests/Q00188_SealRemoval/Q00188_SealRemoval.java
+++ b/dist/game/data/scripts/quests/Q00188_SealRemoval/Q00188_SealRemoval.java
@@ -18,16 +18,16 @@
  */
 package quests.Q00188_SealRemoval;
 
-import quests.Q00184_ArtOfPersuasion.Q00184_ArtOfPersuasion;
-import quests.Q00185_NikolasCooperation.Q00185_NikolasCooperation;
-import quests.Q00186_ContractExecution.Q00186_ContractExecution;
-import quests.Q00187_NikolasHeart.Q00187_NikolasHeart;
-
 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 quests.Q00184_ArtOfPersuasion.Q00184_ArtOfPersuasion;
+import quests.Q00185_NikolasCooperation.Q00185_NikolasCooperation;
+import quests.Q00186_ContractExecution.Q00186_ContractExecution;
+import quests.Q00187_NikolasHeart.Q00187_NikolasHeart;
+
 /**
  * Seal Removal (188)
  * @author ivantotov
@@ -139,11 +139,9 @@ public final class Q00188_SealRemoval extends Quest
 			{
 				if (!hasQuestItems(player, LORAINES_CERTIFICATE))
 				{
-					final QuestState q184 = player.getQuestState(Q00184_ArtOfPersuasion.class.getSimpleName());
-					final QuestState q185 = player.getQuestState(Q00185_NikolasCooperation.class.getSimpleName());
 					final QuestState q186 = player.getQuestState(Q00186_ContractExecution.class.getSimpleName());
 					final QuestState q187 = player.getQuestState(Q00187_NikolasHeart.class.getSimpleName());
-					if (((q184 != null) && q184.isCompleted()) || ((q185 != null) && q185.isCompleted() && (q186 == null) && (q187 == null)))
+					if (player.hasQuestCompleted(Q00184_ArtOfPersuasion.class.getSimpleName()) || (player.hasQuestCompleted(Q00185_NikolasCooperation.class.getSimpleName()) && (q186 == null) && (q187 == null)))
 					{
 						htmltext = (player.getLevel() >= MIN_LEVEL) ? "30673-01.htm" : "30673-02.htm";
 					}
diff --git a/dist/game/data/scripts/quests/Q00189_ContractCompletion/Q00189_ContractCompletion.java b/dist/game/data/scripts/quests/Q00189_ContractCompletion/Q00189_ContractCompletion.java
index 94fc01a1db0595fb14691591d301e139df89de47..bea90372a6d644f8aa8ce05e0514c94851e685b8 100644
--- a/dist/game/data/scripts/quests/Q00189_ContractCompletion/Q00189_ContractCompletion.java
+++ b/dist/game/data/scripts/quests/Q00189_ContractCompletion/Q00189_ContractCompletion.java
@@ -18,13 +18,13 @@
  */
 package quests.Q00189_ContractCompletion;
 
-import quests.Q00186_ContractExecution.Q00186_ContractExecution;
-
 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 quests.Q00186_ContractExecution.Q00186_ContractExecution;
+
 /**
  * Contract Completion (189)
  * @author ivantotov
@@ -129,8 +129,7 @@ public final class Q00189_ContractCompletion extends Quest
 		{
 			if (npc.getId() == BLUEPRINT_SELLER_LUKA)
 			{
-				final QuestState q186 = player.getQuestState(Q00186_ContractExecution.class.getSimpleName());
-				if ((q186 != null) && q186.isCompleted())
+				if (player.hasQuestCompleted(Q00186_ContractExecution.class.getSimpleName()))
 				{
 					htmltext = (player.getLevel() >= MIN_LEVEL) ? "31437-01.htm" : "31437-02.htm";
 				}
diff --git a/dist/game/data/scripts/quests/Q00190_LostDream/Q00190_LostDream.java b/dist/game/data/scripts/quests/Q00190_LostDream/Q00190_LostDream.java
index 3a7814e24e98bf434f1ddba37f91a9ce81d42751..d17a488d91a3d64d022ec99aef983935c54d1c3f 100644
--- a/dist/game/data/scripts/quests/Q00190_LostDream/Q00190_LostDream.java
+++ b/dist/game/data/scripts/quests/Q00190_LostDream/Q00190_LostDream.java
@@ -18,13 +18,13 @@
  */
 package quests.Q00190_LostDream;
 
-import quests.Q00187_NikolasHeart.Q00187_NikolasHeart;
-
 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 quests.Q00187_NikolasHeart.Q00187_NikolasHeart;
+
 /**
  * Lost Dream (190)
  * @author ivantotov
@@ -111,8 +111,7 @@ public final class Q00190_LostDream extends Quest
 		{
 			if (npc.getId() == HEAD_BLACKSMITH_KUSTO)
 			{
-				final QuestState q187 = player.getQuestState(Q00187_NikolasHeart.class.getSimpleName());
-				if ((q187 != null) && q187.isCompleted())
+				if (player.hasQuestCompleted(Q00187_NikolasHeart.class.getSimpleName()))
 				{
 					htmltext = (player.getLevel() >= MIN_LEVEL) ? "30512-01.htm" : "30512-02.htm";
 				}
diff --git a/dist/game/data/scripts/quests/Q00191_VainConclusion/Q00191_VainConclusion.java b/dist/game/data/scripts/quests/Q00191_VainConclusion/Q00191_VainConclusion.java
index 16b55d392347c030722b553b7272d28e324d335e..d0353c14f5eab58c84767d447b12590a2ba6411a 100644
--- a/dist/game/data/scripts/quests/Q00191_VainConclusion/Q00191_VainConclusion.java
+++ b/dist/game/data/scripts/quests/Q00191_VainConclusion/Q00191_VainConclusion.java
@@ -18,13 +18,13 @@
  */
 package quests.Q00191_VainConclusion;
 
-import quests.Q00188_SealRemoval.Q00188_SealRemoval;
-
 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 quests.Q00188_SealRemoval.Q00188_SealRemoval;
+
 /**
  * Vain Conclusion (191)
  * @author ivantotov
@@ -134,8 +134,7 @@ public final class Q00191_VainConclusion extends Quest
 		{
 			if (npc.getId() == DOROTHY_LOCKSMITH)
 			{
-				final QuestState q188 = player.getQuestState(Q00188_SealRemoval.class.getSimpleName());
-				if ((q188 != null) && q188.isCompleted())
+				if (player.hasQuestCompleted(Q00188_SealRemoval.class.getSimpleName()))
 				{
 					htmltext = (player.getLevel() >= MIN_LEVEL) ? "30970-01.htm" : "30970-02.htm";
 				}
diff --git a/dist/game/data/scripts/quests/Q00193_SevenSignsDyingMessage/Q00193_SevenSignsDyingMessage.java b/dist/game/data/scripts/quests/Q00193_SevenSignsDyingMessage/Q00193_SevenSignsDyingMessage.java
index 081b76637e4ba52ef65b2c7fed1dade40864aab1..f76cbf87ba366e6afabb4ed87cd030ff6bd00056 100644
--- a/dist/game/data/scripts/quests/Q00193_SevenSignsDyingMessage/Q00193_SevenSignsDyingMessage.java
+++ b/dist/game/data/scripts/quests/Q00193_SevenSignsDyingMessage/Q00193_SevenSignsDyingMessage.java
@@ -250,8 +250,7 @@ public final class Q00193_SevenSignsDyingMessage extends Quest
 			{
 				if (npc.getId() == HOLLINT)
 				{
-					st = player.getQuestState(Q00192_SevenSignsSeriesOfDoubt.class.getSimpleName());
-					htmltext = ((player.getLevel() >= MIN_LEVEL) && (st != null) && (st.isCompleted())) ? "30191-01.htm" : "30191-03.html";
+					htmltext = ((player.getLevel() >= MIN_LEVEL) && player.hasQuestCompleted(Q00192_SevenSignsSeriesOfDoubt.class.getSimpleName())) ? "30191-01.htm" : "30191-03.html";
 				}
 				break;
 			}
diff --git a/dist/game/data/scripts/quests/Q00194_SevenSignsMammonsContract/Q00194_SevenSignsMammonsContract.java b/dist/game/data/scripts/quests/Q00194_SevenSignsMammonsContract/Q00194_SevenSignsMammonsContract.java
index f644aace87de9ebaa24f459eec2abc41c14fed88..85993212db03ffd68ffd224fe414b738495137b4 100644
--- a/dist/game/data/scripts/quests/Q00194_SevenSignsMammonsContract/Q00194_SevenSignsMammonsContract.java
+++ b/dist/game/data/scripts/quests/Q00194_SevenSignsMammonsContract/Q00194_SevenSignsMammonsContract.java
@@ -359,8 +359,7 @@ public final class Q00194_SevenSignsMammonsContract extends Quest
 			{
 				if (npc.getId() == SIR_GUSTAV_ATHEBALDT)
 				{
-					st = player.getQuestState(Q00193_SevenSignsDyingMessage.class.getSimpleName());
-					htmltext = ((player.getLevel() >= MIN_LEVEL) && (st != null) && st.isCompleted()) ? "30760-01.htm" : "30760-05.html";
+					htmltext = ((player.getLevel() >= MIN_LEVEL) && player.hasQuestCompleted(Q00193_SevenSignsDyingMessage.class.getSimpleName())) ? "30760-01.htm" : "30760-05.html";
 				}
 				break;
 			}
diff --git a/dist/game/data/scripts/quests/Q00195_SevenSignsSecretRitualOfThePriests/Q00195_SevenSignsSecretRitualOfThePriests.java b/dist/game/data/scripts/quests/Q00195_SevenSignsSecretRitualOfThePriests/Q00195_SevenSignsSecretRitualOfThePriests.java
index 79d10e22f7bd6cea2907c3168d9460be09714d8d..78ac7f01882001e971d4fe07a38a8d05be077ae4 100644
--- a/dist/game/data/scripts/quests/Q00195_SevenSignsSecretRitualOfThePriests/Q00195_SevenSignsSecretRitualOfThePriests.java
+++ b/dist/game/data/scripts/quests/Q00195_SevenSignsSecretRitualOfThePriests/Q00195_SevenSignsSecretRitualOfThePriests.java
@@ -236,8 +236,7 @@ public final class Q00195_SevenSignsSecretRitualOfThePriests extends Quest
 			{
 				if (npc.getId() == CLAUDIA_ATHEBALDT)
 				{
-					st = player.getQuestState(Q00194_SevenSignsMammonsContract.class.getSimpleName());
-					htmltext = ((player.getLevel() >= MIN_LEVEL) && (st != null) && (st.isCompleted())) ? "31001-01.htm" : "31001-02.html";
+					htmltext = ((player.getLevel() >= MIN_LEVEL) && player.hasQuestCompleted(Q00194_SevenSignsMammonsContract.class.getSimpleName())) ? "31001-01.htm" : "31001-02.html";
 				}
 				break;
 			}
diff --git a/dist/game/data/scripts/quests/Q00196_SevenSignsSealOfTheEmperor/Q00196_SevenSignsSealOfTheEmperor.java b/dist/game/data/scripts/quests/Q00196_SevenSignsSealOfTheEmperor/Q00196_SevenSignsSealOfTheEmperor.java
index 841336bd8c6344e48d1236370db9d3432261ca7b..8a1f72603fbdbea4a77f61b4e3d62a0701f19b4c 100644
--- a/dist/game/data/scripts/quests/Q00196_SevenSignsSealOfTheEmperor/Q00196_SevenSignsSealOfTheEmperor.java
+++ b/dist/game/data/scripts/quests/Q00196_SevenSignsSealOfTheEmperor/Q00196_SevenSignsSealOfTheEmperor.java
@@ -18,8 +18,6 @@
  */
 package quests.Q00196_SevenSignsSealOfTheEmperor;
 
-import quests.Q00195_SevenSignsSecretRitualOfThePriests.Q00195_SevenSignsSecretRitualOfThePriests;
-
 import com.l2jserver.gameserver.model.actor.L2Npc;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.quest.Quest;
@@ -30,6 +28,8 @@ import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.clientpackets.Say2;
 import com.l2jserver.gameserver.network.serverpackets.NpcSay;
 
+import quests.Q00195_SevenSignsSecretRitualOfThePriests.Q00195_SevenSignsSecretRitualOfThePriests;
+
 /**
  * Seven Signs, Seal of the Emperor (196)
  * @author Adry_85
@@ -248,8 +248,7 @@ public final class Q00196_SevenSignsSealOfTheEmperor extends Quest
 			{
 				if (npc.getId() == IASON_HEINE)
 				{
-					st = player.getQuestState(Q00195_SevenSignsSecretRitualOfThePriests.class.getSimpleName());
-					htmltext = ((player.getLevel() >= MIN_LEVEL) && (st != null) && (st.isCompleted())) ? "30969-01.htm" : "30969-08.html";
+					htmltext = ((player.getLevel() >= MIN_LEVEL) && player.hasQuestCompleted(Q00195_SevenSignsSecretRitualOfThePriests.class.getSimpleName())) ? "30969-01.htm" : "30969-08.html";
 				}
 				break;
 			}
diff --git a/dist/game/data/scripts/quests/Q00197_SevenSignsTheSacredBookOfSeal/Q00197_SevenSignsTheSacredBookOfSeal.java b/dist/game/data/scripts/quests/Q00197_SevenSignsTheSacredBookOfSeal/Q00197_SevenSignsTheSacredBookOfSeal.java
index f71f0bf223987b910ecbf6c4a8cee2ad83347cc9..0c44131522f936335795a0a973759ea56e710651 100644
--- a/dist/game/data/scripts/quests/Q00197_SevenSignsTheSacredBookOfSeal/Q00197_SevenSignsTheSacredBookOfSeal.java
+++ b/dist/game/data/scripts/quests/Q00197_SevenSignsTheSacredBookOfSeal/Q00197_SevenSignsTheSacredBookOfSeal.java
@@ -18,8 +18,6 @@
  */
 package quests.Q00197_SevenSignsTheSacredBookOfSeal;
 
-import quests.Q00196_SevenSignsSealOfTheEmperor.Q00196_SevenSignsSealOfTheEmperor;
-
 import com.l2jserver.gameserver.ai.CtrlIntention;
 import com.l2jserver.gameserver.enums.audio.Sound;
 import com.l2jserver.gameserver.model.actor.L2Npc;
@@ -32,6 +30,8 @@ import com.l2jserver.gameserver.network.NpcStringId;
 import com.l2jserver.gameserver.network.clientpackets.Say2;
 import com.l2jserver.gameserver.network.serverpackets.NpcSay;
 
+import quests.Q00196_SevenSignsSealOfTheEmperor.Q00196_SevenSignsSealOfTheEmperor;
+
 /**
  * Seven Signs, The Sacred Book of Seal (197)
  * @author Adry_85
@@ -261,8 +261,7 @@ public final class Q00197_SevenSignsTheSacredBookOfSeal extends Quest
 			{
 				if (npc.getId() == WOOD)
 				{
-					st = player.getQuestState(Q00196_SevenSignsSealOfTheEmperor.class.getSimpleName());
-					htmltext = ((player.getLevel() >= MIN_LEVEL) && (st != null) && (st.isCompleted())) ? "32593-01.htm" : "32593-05.html";
+					htmltext = ((player.getLevel() >= MIN_LEVEL) && player.hasQuestCompleted(Q00196_SevenSignsSealOfTheEmperor.class.getSimpleName())) ? "32593-01.htm" : "32593-05.html";
 				}
 				break;
 			}
diff --git a/dist/game/data/scripts/quests/Q00198_SevenSignsEmbryo/Q00198_SevenSignsEmbryo.java b/dist/game/data/scripts/quests/Q00198_SevenSignsEmbryo/Q00198_SevenSignsEmbryo.java
index 456e736ac2eb1fc62df607675d60b61556edfacb..e72310c93141dd852c3ad875cbcefb05f3668b98 100644
--- a/dist/game/data/scripts/quests/Q00198_SevenSignsEmbryo/Q00198_SevenSignsEmbryo.java
+++ b/dist/game/data/scripts/quests/Q00198_SevenSignsEmbryo/Q00198_SevenSignsEmbryo.java
@@ -204,8 +204,7 @@ public final class Q00198_SevenSignsEmbryo extends Quest
 			{
 				if (npc.getId() == WOOD)
 				{
-					st = player.getQuestState(Q00197_SevenSignsTheSacredBookOfSeal.class.getSimpleName());
-					htmltext = ((player.getLevel() >= MIN_LEVEL) && (st != null) && (st.isCompleted())) ? "32593-01.htm" : "32593-03.html";
+					htmltext = ((player.getLevel() >= MIN_LEVEL) && player.hasQuestCompleted(Q00197_SevenSignsTheSacredBookOfSeal.class.getSimpleName())) ? "32593-01.htm" : "32593-03.html";
 				}
 				break;
 			}
diff --git a/dist/game/data/scripts/quests/Q00236_SeedsOfChaos/Q00236_SeedsOfChaos.java b/dist/game/data/scripts/quests/Q00236_SeedsOfChaos/Q00236_SeedsOfChaos.java
index 0bf7a497e256bce2162f0d00f3d84e565b9d8902..973a16df30c12d9501026fa2761ced93cd387631 100644
--- a/dist/game/data/scripts/quests/Q00236_SeedsOfChaos/Q00236_SeedsOfChaos.java
+++ b/dist/game/data/scripts/quests/Q00236_SeedsOfChaos/Q00236_SeedsOfChaos.java
@@ -18,10 +18,8 @@
  */
 package quests.Q00236_SeedsOfChaos;
 
-import quests.Q00025_HidingBehindTheTruth.Q00025_HidingBehindTheTruth;
-
-import com.l2jserver.gameserver.enums.audio.Sound;
 import com.l2jserver.gameserver.enums.Race;
+import com.l2jserver.gameserver.enums.audio.Sound;
 import com.l2jserver.gameserver.model.actor.L2Npc;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.quest.Quest;
@@ -31,6 +29,8 @@ import com.l2jserver.gameserver.network.clientpackets.Say2;
 import com.l2jserver.gameserver.network.serverpackets.NpcSay;
 import com.l2jserver.gameserver.util.Util;
 
+import quests.Q00025_HidingBehindTheTruth.Q00025_HidingBehindTheTruth;
+
 /**
  * Seeds Of Chaos (236)
  * @author ivantotov
@@ -220,8 +220,7 @@ public final class Q00236_SeedsOfChaos extends Quest
 			{
 				if (qs.isMemoState(12))
 				{
-					final QuestState q25 = player.getQuestState(Q00025_HidingBehindTheTruth.class.getSimpleName());
-					if ((q25 != null) && q25.isCompleted())
+					if (player.hasQuestCompleted(Q00025_HidingBehindTheTruth.class.getSimpleName()))
 					{
 						htmltext = event;
 					}
diff --git a/dist/game/data/scripts/quests/Q00237_WindsOfChange/Q00237_WindsOfChange.java b/dist/game/data/scripts/quests/Q00237_WindsOfChange/Q00237_WindsOfChange.java
index fa79211ab01643a0ae628638b7af0dc93ea48475..93d65bee2539d1fa3b802e468905c1563199ca73 100644
--- a/dist/game/data/scripts/quests/Q00237_WindsOfChange/Q00237_WindsOfChange.java
+++ b/dist/game/data/scripts/quests/Q00237_WindsOfChange/Q00237_WindsOfChange.java
@@ -237,8 +237,7 @@ public class Q00237_WindsOfChange extends Quest
 			case HELVETICA:
 				if (st.isCompleted())
 				{
-					final QuestState q238 = st.getPlayer().getQuestState(Q00238_SuccessFailureOfBusiness.class.getSimpleName());
-					htmltext = (st.hasQuestItems(VICINITY_OF_FOS) || ((q238 != null) && q238.isCompleted())) ? "32641-03.html" : "32641-05.html";
+					htmltext = (st.hasQuestItems(VICINITY_OF_FOS) || st.getPlayer().hasQuestCompleted(Q00238_SuccessFailureOfBusiness.class.getSimpleName())) ? "32641-03.html" : "32641-05.html";
 				}
 				else if (st.isCond(5))
 				{
@@ -252,8 +251,7 @@ public class Q00237_WindsOfChange extends Quest
 			case ATHENIA:
 				if (st.isCompleted())
 				{
-					final QuestState q239 = st.getPlayer().getQuestState(Q00239_WontYouJoinUs.class.getSimpleName());
-					htmltext = (st.hasQuestItems(SUPPORT_CERTIFICATE) || ((q239 != null) && q239.isCompleted())) ? "32643-03.html" : "32643-05.html";
+					htmltext = (st.hasQuestItems(SUPPORT_CERTIFICATE) || st.getPlayer().hasQuestCompleted(Q00239_WontYouJoinUs.class.getSimpleName())) ? "32643-03.html" : "32643-05.html";
 				}
 				else if (st.isCond(5))
 				{
diff --git a/dist/game/data/scripts/quests/Q00238_SuccessFailureOfBusiness/Q00238_SuccessFailureOfBusiness.java b/dist/game/data/scripts/quests/Q00238_SuccessFailureOfBusiness/Q00238_SuccessFailureOfBusiness.java
index 605c80b55cba69799ea0a469a5fca46e43c5ab10..e58c64bdeb4c0a24108938a8e8b485e18f4be0b7 100644
--- a/dist/game/data/scripts/quests/Q00238_SuccessFailureOfBusiness/Q00238_SuccessFailureOfBusiness.java
+++ b/dist/game/data/scripts/quests/Q00238_SuccessFailureOfBusiness/Q00238_SuccessFailureOfBusiness.java
@@ -25,7 +25,6 @@ import com.l2jserver.gameserver.model.quest.Quest;
 import com.l2jserver.gameserver.model.quest.QuestState;
 import com.l2jserver.gameserver.model.quest.State;
 
-import quests.Q00237_WindsOfChange.Q00237_WindsOfChange;
 import quests.Q00239_WontYouJoinUs.Q00239_WontYouJoinUs;
 
 /**
@@ -147,13 +146,11 @@ public class Q00238_SuccessFailureOfBusiness extends Quest
 				htmltext = "32461-09.html";
 				break;
 			case State.CREATED:
-				final QuestState q237 = st.getPlayer().getQuestState(Q00237_WindsOfChange.class.getSimpleName());
-				final QuestState q239 = st.getPlayer().getQuestState(Q00239_WontYouJoinUs.class.getSimpleName());
-				if ((q239 != null) && q239.isCompleted())
+				if (st.getPlayer().hasQuestCompleted(Q00239_WontYouJoinUs.class.getSimpleName()))
 				{
 					htmltext = "32461-10.html";
 				}
-				else if ((q237 != null) && q237.isCompleted() && (talker.getLevel() >= MIN_LEVEL) && st.hasQuestItems(VICINITY_OF_FOS))
+				else if (st.getPlayer().hasQuestCompleted(Q00239_WontYouJoinUs.class.getSimpleName()) && (talker.getLevel() >= MIN_LEVEL) && st.hasQuestItems(VICINITY_OF_FOS))
 				{
 					htmltext = "32461-01.htm";
 				}
diff --git a/dist/game/data/scripts/quests/Q00239_WontYouJoinUs/Q00239_WontYouJoinUs.java b/dist/game/data/scripts/quests/Q00239_WontYouJoinUs/Q00239_WontYouJoinUs.java
index 9c2f5cbb84d22a89efbd8130c10eaee73a7b2311..c0e8e3f750bf966bba7e8ad29846e3358350d26c 100644
--- a/dist/game/data/scripts/quests/Q00239_WontYouJoinUs/Q00239_WontYouJoinUs.java
+++ b/dist/game/data/scripts/quests/Q00239_WontYouJoinUs/Q00239_WontYouJoinUs.java
@@ -147,13 +147,12 @@ public class Q00239_WontYouJoinUs extends Quest
 				htmltext = "32643-11.html";
 				break;
 			case State.CREATED:
-				final QuestState q237 = st.getPlayer().getQuestState(Q00237_WindsOfChange.class.getSimpleName());
-				final QuestState q238 = st.getPlayer().getQuestState(Q00238_SuccessFailureOfBusiness.class.getSimpleName());
-				if ((q238 != null) && q238.isCompleted())
+				
+				if (st.getPlayer().hasQuestCompleted(Q00238_SuccessFailureOfBusiness.class.getSimpleName()))
 				{
 					htmltext = "32643-12.html";
 				}
-				else if ((q237 != null) && q237.isCompleted() && (talker.getLevel() >= MIN_LEVEL) && st.hasQuestItems(SUPPORT_CERTIFICATE))
+				else if (st.getPlayer().hasQuestCompleted(Q00237_WindsOfChange.class.getSimpleName()) && (talker.getLevel() >= MIN_LEVEL) && st.hasQuestItems(SUPPORT_CERTIFICATE))
 				{
 					htmltext = "32643-01.htm";
 				}
diff --git a/dist/game/data/scripts/quests/Q00242_PossessorOfAPreciousSoul2/Q00242_PossessorOfAPreciousSoul2.java b/dist/game/data/scripts/quests/Q00242_PossessorOfAPreciousSoul2/Q00242_PossessorOfAPreciousSoul2.java
index f755c4fc400c7c3986b11cdc0a777c10356dbff7..88db88dd7288107d91f95ef29779402b0bd370c7 100644
--- a/dist/game/data/scripts/quests/Q00242_PossessorOfAPreciousSoul2/Q00242_PossessorOfAPreciousSoul2.java
+++ b/dist/game/data/scripts/quests/Q00242_PossessorOfAPreciousSoul2/Q00242_PossessorOfAPreciousSoul2.java
@@ -179,8 +179,7 @@ public class Q00242_PossessorOfAPreciousSoul2 extends Quest
 				switch (st.getState())
 				{
 					case State.CREATED:
-						final QuestState qs = player.getQuestState(Q00241_PossessorOfAPreciousSoul1.class.getSimpleName());
-						if ((qs != null) && qs.isCompleted())
+						if (player.hasQuestCompleted(Q00241_PossessorOfAPreciousSoul1.class.getSimpleName()))
 						{
 							htmltext = (player.isSubClassActive() && (player.getLevel() >= 60)) ? "31742-01.htm" : "31742-00.htm";
 						}
diff --git a/dist/game/data/scripts/quests/Q00246_PossessorOfAPreciousSoul3/Q00246_PossessorOfAPreciousSoul3.java b/dist/game/data/scripts/quests/Q00246_PossessorOfAPreciousSoul3/Q00246_PossessorOfAPreciousSoul3.java
index b346dd5d1ebfeffcfb7f87823d37bfe12c15ff81..41a97b2c0104a82fe60ef9bc89e6a9e95effeafb 100644
--- a/dist/game/data/scripts/quests/Q00246_PossessorOfAPreciousSoul3/Q00246_PossessorOfAPreciousSoul3.java
+++ b/dist/game/data/scripts/quests/Q00246_PossessorOfAPreciousSoul3/Q00246_PossessorOfAPreciousSoul3.java
@@ -266,8 +266,7 @@ public class Q00246_PossessorOfAPreciousSoul3 extends Quest
 				switch (st.getState())
 				{
 					case State.CREATED:
-						final QuestState qs = player.getQuestState(Q00242_PossessorOfAPreciousSoul2.class.getSimpleName());
-						htmltext = ((player.getLevel() >= 65) && (qs != null) && qs.isCompleted()) ? "31740-1.htm" : "31740-2.html";
+						htmltext = ((player.getLevel() >= 65) && player.hasQuestCompleted(Q00242_PossessorOfAPreciousSoul2.class.getSimpleName())) ? "31740-1.htm" : "31740-2.html";
 						break;
 					case State.STARTED:
 						htmltext = "31740-5.html";
diff --git a/dist/game/data/scripts/quests/Q00247_PossessorOfAPreciousSoul4/Q00247_PossessorOfAPreciousSoul4.java b/dist/game/data/scripts/quests/Q00247_PossessorOfAPreciousSoul4/Q00247_PossessorOfAPreciousSoul4.java
index ee549466f9b1a9d13a4d8f7da8806ff61e85a5e3..54ad9dcdce0f800144ad3724fed4f75c6688dcfb 100644
--- a/dist/game/data/scripts/quests/Q00247_PossessorOfAPreciousSoul4/Q00247_PossessorOfAPreciousSoul4.java
+++ b/dist/game/data/scripts/quests/Q00247_PossessorOfAPreciousSoul4/Q00247_PossessorOfAPreciousSoul4.java
@@ -113,8 +113,7 @@ public class Q00247_PossessorOfAPreciousSoul4 extends Quest
 				switch (st.getState())
 				{
 					case State.CREATED:
-						final QuestState qs = player.getQuestState(Q00246_PossessorOfAPreciousSoul3.class.getSimpleName());
-						if ((qs != null) && qs.isCompleted())
+						if (player.hasQuestCompleted(Q00246_PossessorOfAPreciousSoul3.class.getSimpleName()))
 						{
 							htmltext = ((player.getLevel() >= 75) ? "31740-1.htm" : "31740-2.html");
 						}
diff --git a/dist/game/data/scripts/quests/Q00270_TheOneWhoEndsSilence/Q00270_TheOneWhoEndsSilence.java b/dist/game/data/scripts/quests/Q00270_TheOneWhoEndsSilence/Q00270_TheOneWhoEndsSilence.java
index 6663aebd27aec0c76974e9ad5fe6385482b1c14a..536e7c60eda3b3a55cafc07055e4c5b1e1c8f937 100644
--- a/dist/game/data/scripts/quests/Q00270_TheOneWhoEndsSilence/Q00270_TheOneWhoEndsSilence.java
+++ b/dist/game/data/scripts/quests/Q00270_TheOneWhoEndsSilence/Q00270_TheOneWhoEndsSilence.java
@@ -342,8 +342,7 @@ public class Q00270_TheOneWhoEndsSilence extends Quest
 		switch (st.getState())
 		{
 			case State.CREATED:
-				final QuestState qs = player.getQuestState(Q10288_SecretMission.class.getSimpleName());
-				htmltext = ((player.getLevel() >= MIN_LEVEL) && (qs != null) && qs.isCompleted()) ? "32757-01.htm" : "32757-03.html";
+				htmltext = ((player.getLevel() >= MIN_LEVEL) && player.hasQuestCompleted(Q10288_SecretMission.class.getSimpleName())) ? "32757-01.htm" : "32757-03.html";
 				break;
 			case State.STARTED:
 				if (st.isCond(1))
diff --git a/dist/game/data/scripts/quests/Q00287_FiguringItOut/Q00287_FiguringItOut.java b/dist/game/data/scripts/quests/Q00287_FiguringItOut/Q00287_FiguringItOut.java
index 56c17ae0fea96ffa3c535e4d44c8c83f778e14f4..70bd538ad8243dce89173a71034c4d995c6a8701 100644
--- a/dist/game/data/scripts/quests/Q00287_FiguringItOut/Q00287_FiguringItOut.java
+++ b/dist/game/data/scripts/quests/Q00287_FiguringItOut/Q00287_FiguringItOut.java
@@ -183,11 +183,10 @@ public class Q00287_FiguringItOut extends Quest
 	{
 		String htmltext = getNoQuestMsg(player);
 		final QuestState st = getQuestState(player, true);
-		final QuestState prev = player.getQuestState(Q00250_WatchWhatYouEat.class.getSimpleName());
 		switch (st.getState())
 		{
 			case State.CREATED:
-				htmltext = ((player.getLevel() >= MIN_LEVEL) && (prev != null) && prev.isCompleted()) ? "32742-01.htm" : "32742-14.htm";
+				htmltext = ((player.getLevel() >= MIN_LEVEL) && player.hasQuestCompleted(Q00250_WatchWhatYouEat.class.getSimpleName())) ? "32742-01.htm" : "32742-14.htm";
 				break;
 			case State.STARTED:
 				htmltext = (st.getQuestItemsCount(VIAL_OF_TANTA_BLOOD) < 100) ? "32742-04.html" : "32742-05.html";
diff --git a/dist/game/data/scripts/quests/Q00289_NoMoreSoupForYou/Q00289_NoMoreSoupForYou.java b/dist/game/data/scripts/quests/Q00289_NoMoreSoupForYou/Q00289_NoMoreSoupForYou.java
index 43c1e8d407f3872c7031fda4bdb51a58af00dec6..8c68646025f682c53cb63c5389ef164d19a642b5 100644
--- a/dist/game/data/scripts/quests/Q00289_NoMoreSoupForYou/Q00289_NoMoreSoupForYou.java
+++ b/dist/game/data/scripts/quests/Q00289_NoMoreSoupForYou/Q00289_NoMoreSoupForYou.java
@@ -243,8 +243,7 @@ public class Q00289_NoMoreSoupForYou extends Quest
 			switch (st.getState())
 			{
 				case State.CREATED:
-					QuestState qs252 = player.getQuestState(Q00252_ItSmellsDelicious.class.getSimpleName());
-					htmltext = ((qs252 != null) && qs252.isCompleted() && (player.getLevel() >= 82)) ? "30200-01.htm" : "30200-00.htm";
+					htmltext = (player.hasQuestCompleted(Q00252_ItSmellsDelicious.class.getSimpleName()) && (player.getLevel() >= 82)) ? "30200-01.htm" : "30200-00.htm";
 					break;
 				case State.STARTED:
 					if (st.isCond(1))
diff --git a/dist/game/data/scripts/quests/Q00290_ThreatRemoval/Q00290_ThreatRemoval.java b/dist/game/data/scripts/quests/Q00290_ThreatRemoval/Q00290_ThreatRemoval.java
index 0530eac5e748f1cc772fbdbf556ce3e8803a0f8e..f3db8f1234f66c85519c70d22cf2dfdaf5b6692b 100644
--- a/dist/game/data/scripts/quests/Q00290_ThreatRemoval/Q00290_ThreatRemoval.java
+++ b/dist/game/data/scripts/quests/Q00290_ThreatRemoval/Q00290_ThreatRemoval.java
@@ -203,8 +203,7 @@ public class Q00290_ThreatRemoval extends Quest
 		{
 			case State.CREATED:
 			{
-				st = player.getQuestState(Q00251_NoSecrets.class.getSimpleName());
-				htmltext = ((player.getLevel() >= MIN_LEVEL) && (st != null) && (st.isCompleted())) ? "30201-01.htm" : "30201-03.html";
+				htmltext = ((player.getLevel() >= MIN_LEVEL) && player.hasQuestCompleted(Q00251_NoSecrets.class.getSimpleName())) ? "30201-01.htm" : "30201-03.html";
 				break;
 			}
 			case State.STARTED:
diff --git a/dist/game/data/scripts/quests/Q00308_ReedFieldMaintenance/Q00308_ReedFieldMaintenance.java b/dist/game/data/scripts/quests/Q00308_ReedFieldMaintenance/Q00308_ReedFieldMaintenance.java
index 9686297bcf0c9a9de2bcf5506ff244ff21710c8d..37a6d955c2365367414efab04786fdeff7339349 100644
--- a/dist/game/data/scripts/quests/Q00308_ReedFieldMaintenance/Q00308_ReedFieldMaintenance.java
+++ b/dist/game/data/scripts/quests/Q00308_ReedFieldMaintenance/Q00308_ReedFieldMaintenance.java
@@ -153,8 +153,7 @@ public class Q00308_ReedFieldMaintenance extends Quest
 				htmltext = event;
 				break;
 			case "claimreward":
-				final QuestState q238 = player.getQuestState(Q00238_SuccessFailureOfBusiness.class.getName());
-				htmltext = ((q238 != null) && q238.isCompleted()) ? "32646-09.html" : "32646-12.html";
+				htmltext = (player.hasQuestCompleted(Q00238_SuccessFailureOfBusiness.class.getName())) ? "32646-09.html" : "32646-12.html";
 				break;
 			case "100":
 			case "120":
diff --git a/dist/game/data/scripts/quests/Q00309_ForAGoodCause/Q00309_ForAGoodCause.java b/dist/game/data/scripts/quests/Q00309_ForAGoodCause/Q00309_ForAGoodCause.java
index 9c17d453a9bd9d0416fc0c279cf8668467ba5aef..2cac8356cf69041dc77e35bd95e16510f2cd9094 100644
--- a/dist/game/data/scripts/quests/Q00309_ForAGoodCause/Q00309_ForAGoodCause.java
+++ b/dist/game/data/scripts/quests/Q00309_ForAGoodCause/Q00309_ForAGoodCause.java
@@ -154,8 +154,7 @@ public class Q00309_ForAGoodCause extends Quest
 				htmltext = event;
 				break;
 			case "claimreward":
-				final QuestState q239 = player.getQuestState(Q00239_WontYouJoinUs.class.getSimpleName());
-				htmltext = ((q239 != null) && q239.isCompleted()) ? "32647-11.html" : "32647-09.html";
+				htmltext = (player.hasQuestCompleted(Q00239_WontYouJoinUs.class.getSimpleName())) ? "32647-11.html" : "32647-09.html";
 				break;
 			case "100":
 			case "120":
diff --git a/dist/game/data/scripts/quests/Q00310_OnlyWhatRemains/Q00310_OnlyWhatRemains.java b/dist/game/data/scripts/quests/Q00310_OnlyWhatRemains/Q00310_OnlyWhatRemains.java
index dca1fb461d85cb524db1b8c1a373b3f391caa47b..034f27ff60250b982c4069c4cad83052c38c51fa 100644
--- a/dist/game/data/scripts/quests/Q00310_OnlyWhatRemains/Q00310_OnlyWhatRemains.java
+++ b/dist/game/data/scripts/quests/Q00310_OnlyWhatRemains/Q00310_OnlyWhatRemains.java
@@ -136,8 +136,7 @@ public class Q00310_OnlyWhatRemains extends Quest
 		switch (st.getState())
 		{
 			case State.CREATED:
-				final QuestState prev = player.getQuestState(Q00240_ImTheOnlyOneYouCanTrust.class.getSimpleName());
-				htmltext = ((player.getLevel() >= 81) && (prev != null) && prev.isCompleted()) ? "32640-01.htm" : "32640-00.htm";
+				htmltext = ((player.getLevel() >= 81) && player.hasQuestCompleted(Q00240_ImTheOnlyOneYouCanTrust.class.getSimpleName())) ? "32640-01.htm" : "32640-00.htm";
 				break;
 			case State.STARTED:
 				if (!st.hasQuestItems(DIRTY_BEAD))
diff --git a/dist/game/data/scripts/quests/Q00423_TakeYourBestShot/Q00423_TakeYourBestShot.java b/dist/game/data/scripts/quests/Q00423_TakeYourBestShot/Q00423_TakeYourBestShot.java
index d5ad7897ddc8f565170b3327d171e8fa77009d26..ab09ccbf6670653c829957ec21f2317fbded079c 100644
--- a/dist/game/data/scripts/quests/Q00423_TakeYourBestShot/Q00423_TakeYourBestShot.java
+++ b/dist/game/data/scripts/quests/Q00423_TakeYourBestShot/Q00423_TakeYourBestShot.java
@@ -127,8 +127,7 @@ public final class Q00423_TakeYourBestShot extends Quest
 				}
 				else
 				{
-					final QuestState q249 = player.getQuestState(Q00249_PoisonedPlainsOfTheLizardmen.class.getSimpleName());
-					htmltext = ((player.getLevel() >= MIN_LEVEL) && (q249 != null) && (q249.isCompleted())) ? "32744-03.htm" : "32744-01.htm";
+					htmltext = ((player.getLevel() >= MIN_LEVEL) && player.hasQuestCompleted(Q00249_PoisonedPlainsOfTheLizardmen.class.getSimpleName())) ? "32744-03.htm" : "32744-01.htm";
 				}
 			}
 			else if (npc.getId() == BATRACOS)
diff --git a/dist/game/data/scripts/quests/Q00453_NotStrongEnoughAlone/Q00453_NotStrongEnoughAlone.java b/dist/game/data/scripts/quests/Q00453_NotStrongEnoughAlone/Q00453_NotStrongEnoughAlone.java
index a29cb56d99cd42a48d8b4f28026530da53bd39b2..6598991e6ae4e842c66ed0d540e18d2d0f0ac660 100644
--- a/dist/game/data/scripts/quests/Q00453_NotStrongEnoughAlone/Q00453_NotStrongEnoughAlone.java
+++ b/dist/game/data/scripts/quests/Q00453_NotStrongEnoughAlone/Q00453_NotStrongEnoughAlone.java
@@ -269,11 +269,10 @@ public class Q00453_NotStrongEnoughAlone extends Quest
 	{
 		String htmltext = getNoQuestMsg(player);
 		final QuestState st = getQuestState(player, true);
-		QuestState prev = player.getQuestState(Q10282_ToTheSeedOfAnnihilation.class.getSimpleName());
 		switch (st.getState())
 		{
 			case State.CREATED:
-				if ((player.getLevel() >= 84) && (prev != null) && prev.isCompleted())
+				if ((player.getLevel() >= 84) && player.hasQuestCompleted(Q10282_ToTheSeedOfAnnihilation.class.getSimpleName()))
 				{
 					htmltext = "32734-01.htm";
 				}
@@ -322,7 +321,7 @@ public class Q00453_NotStrongEnoughAlone extends Quest
 				else
 				{
 					st.setState(State.CREATED);
-					if ((player.getLevel() >= 84) && (prev != null) && (prev.getState() == State.COMPLETED))
+					if ((player.getLevel() >= 84) && player.hasQuestCompleted(Q10282_ToTheSeedOfAnnihilation.class.getSimpleName()))
 					{
 						htmltext = "32734-01.htm";
 					}
diff --git a/dist/game/data/scripts/quests/Q00461_RumbleInTheBase/Q00461_RumbleInTheBase.java b/dist/game/data/scripts/quests/Q00461_RumbleInTheBase/Q00461_RumbleInTheBase.java
index 64fead2e7b082785aa44bb3d6846aa00a68926d9..e4e2f5b1051ebcc6f798b310eac42e46dd193a3a 100644
--- a/dist/game/data/scripts/quests/Q00461_RumbleInTheBase/Q00461_RumbleInTheBase.java
+++ b/dist/game/data/scripts/quests/Q00461_RumbleInTheBase/Q00461_RumbleInTheBase.java
@@ -136,11 +136,10 @@ public class Q00461_RumbleInTheBase extends Quest
 	{
 		String htmltext = getNoQuestMsg(player);
 		final QuestState st = getQuestState(player, true);
-		final QuestState prev = player.getQuestState(Q00252_ItSmellsDelicious.class.getSimpleName());
 		switch (st.getState())
 		{
 			case State.CREATED:
-				htmltext = ((player.getLevel() >= 82) && (prev != null) && prev.isCompleted()) ? "30200-01.htm" : "30200-02.htm";
+				htmltext = ((player.getLevel() >= 82) && player.hasQuestCompleted(Q00252_ItSmellsDelicious.class.getSimpleName())) ? "30200-01.htm" : "30200-02.htm";
 				break;
 			case State.STARTED:
 				if (st.isCond(1))
@@ -162,7 +161,7 @@ public class Q00461_RumbleInTheBase extends Quest
 				else
 				{
 					st.setState(State.CREATED);
-					htmltext = ((player.getLevel() >= 82) && (prev != null) && (prev.getState() == State.COMPLETED)) ? "30200-01.htm" : "30200-02.htm";
+					htmltext = ((player.getLevel() >= 82) && player.hasQuestCompleted(Q00252_ItSmellsDelicious.class.getSimpleName())) ? "30200-01.htm" : "30200-02.htm";
 				}
 				break;
 		}
diff --git a/dist/game/data/scripts/quests/Q00641_AttackSailren/Q00641_AttackSailren.java b/dist/game/data/scripts/quests/Q00641_AttackSailren/Q00641_AttackSailren.java
index dbe447c20d7ac50c66af7a3cec115c991ef42b4e..5efd479715980e171f12576c3d0c161587d4471d 100644
--- a/dist/game/data/scripts/quests/Q00641_AttackSailren/Q00641_AttackSailren.java
+++ b/dist/game/data/scripts/quests/Q00641_AttackSailren/Q00641_AttackSailren.java
@@ -120,8 +120,7 @@ public class Q00641_AttackSailren extends Quest
 				}
 				else
 				{
-					st = player.getQuestState(Q00126_TheNameOfEvil2.class.getSimpleName());
-					htmltext = ((st != null) && st.isCompleted()) ? "32109-0a.htm" : "32109-0b.htm";
+					htmltext = (player.hasQuestCompleted(Q00126_TheNameOfEvil2.class.getSimpleName())) ? "32109-0a.htm" : "32109-0b.htm";
 				}
 				break;
 			case State.STARTED:
diff --git a/dist/game/data/scripts/quests/Q00648_AnIceMerchantsDream/Q00648_AnIceMerchantsDream.java b/dist/game/data/scripts/quests/Q00648_AnIceMerchantsDream/Q00648_AnIceMerchantsDream.java
index aed06644b00880d7215850181fdf289de3657bd9..04e0ade3f888fd62ac2fefc19e71aadf54472dc8 100644
--- a/dist/game/data/scripts/quests/Q00648_AnIceMerchantsDream/Q00648_AnIceMerchantsDream.java
+++ b/dist/game/data/scripts/quests/Q00648_AnIceMerchantsDream/Q00648_AnIceMerchantsDream.java
@@ -21,14 +21,14 @@ package quests.Q00648_AnIceMerchantsDream;
 import java.util.HashMap;
 import java.util.Map;
 
-import quests.Q00115_TheOtherSideOfTruth.Q00115_TheOtherSideOfTruth;
-
 import com.l2jserver.gameserver.enums.audio.Sound;
 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 quests.Q00115_TheOtherSideOfTruth.Q00115_TheOtherSideOfTruth;
+
 /**
  * An Ice Merchant's Dream (648)
  * @author netvirus, Adry_85
@@ -307,7 +307,6 @@ public final class Q00648_AnIceMerchantsDream extends Quest
 	public String onTalk(L2Npc npc, L2PcInstance player)
 	{
 		final QuestState st = getQuestState(player, true);
-		final QuestState st2 = player.getQuestState(Q00115_TheOtherSideOfTruth.class.getSimpleName());
 		String htmltext = getNoQuestMsg(player);
 		switch (npc.getId())
 		{
@@ -321,13 +320,13 @@ public final class Q00648_AnIceMerchantsDream extends Quest
 					}
 					else
 					{
-						htmltext = ((st2 != null) && (st2.isCompleted())) ? "32020-02.htm" : "32020-03.htm";
+						htmltext = (player.hasQuestCompleted(Q00115_TheOtherSideOfTruth.class.getSimpleName())) ? "32020-02.htm" : "32020-03.htm";
 					}
 				}
 				else if (st.isStarted())
 				{
 					final long hasQuestItems = getQuestItemsCount(player, SILVER_ICE_CRYSTAL, BLACK_ICE_CRYSTAL);
-					if ((st2 != null) && st2.isCompleted())
+					if (player.hasQuestCompleted(Q00115_TheOtherSideOfTruth.class.getSimpleName()))
 					{
 						htmltext = (hasQuestItems > 0) ? "32020-13.html" : "32020-11.html";
 						if (st.isCond(1))
diff --git a/dist/game/data/scripts/quests/Q00650_ABrokenDream/Q00650_ABrokenDream.java b/dist/game/data/scripts/quests/Q00650_ABrokenDream/Q00650_ABrokenDream.java
index c4d0813fa98873d2f188441399e06c868286afaf..ce8c3f2cdf9013d8d2f4ebf29d548db4c0cf8641 100644
--- a/dist/game/data/scripts/quests/Q00650_ABrokenDream/Q00650_ABrokenDream.java
+++ b/dist/game/data/scripts/quests/Q00650_ABrokenDream/Q00650_ABrokenDream.java
@@ -121,8 +121,7 @@ public final class Q00650_ABrokenDream extends Quest
 				}
 				else
 				{
-					final QuestState q117 = player.getQuestState(Q00117_TheOceanOfDistantStars.class.getSimpleName());
-					htmltext = (q117 != null) && q117.isCompleted() ? "32054-01.htm" : "32054-04.htm";
+					htmltext = player.hasQuestCompleted(Q00117_TheOceanOfDistantStars.class.getSimpleName()) ? "32054-01.htm" : "32054-04.htm";
 				}
 				break;
 			}
diff --git a/dist/game/data/scripts/quests/Q00654_JourneyToASettlement/Q00654_JourneyToASettlement.java b/dist/game/data/scripts/quests/Q00654_JourneyToASettlement/Q00654_JourneyToASettlement.java
index f6f72ef4c85bb595ce5c2d1597c834347328020d..bd47731c4d3e989108146f7b417848974b6f91f6 100644
--- a/dist/game/data/scripts/quests/Q00654_JourneyToASettlement/Q00654_JourneyToASettlement.java
+++ b/dist/game/data/scripts/quests/Q00654_JourneyToASettlement/Q00654_JourneyToASettlement.java
@@ -21,13 +21,13 @@ package quests.Q00654_JourneyToASettlement;
 import java.util.HashMap;
 import java.util.Map;
 
-import quests.Q00119_LastImperialPrince.Q00119_LastImperialPrince;
-
 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 quests.Q00119_LastImperialPrince.Q00119_LastImperialPrince;
+
 /**
  * Journey to a Settlement (654)
  * @author Adry_85
@@ -117,8 +117,7 @@ public final class Q00654_JourneyToASettlement extends Quest
 		String htmltext = getNoQuestMsg(player);
 		if (st.isCreated())
 		{
-			st = player.getQuestState(Q00119_LastImperialPrince.class.getSimpleName());
-			htmltext = ((player.getLevel() >= MIN_LEVEL) && (st != null) && (st.isCompleted())) ? "31453-01.htm" : "31453-04.htm";
+			htmltext = ((player.getLevel() >= MIN_LEVEL) && player.hasQuestCompleted(Q00119_LastImperialPrince.class.getSimpleName())) ? "31453-01.htm" : "31453-04.htm";
 		}
 		else if (st.isStarted())
 		{
diff --git a/dist/game/data/scripts/quests/Q00701_ProofOfExistence/Q00701_ProofOfExistence.java b/dist/game/data/scripts/quests/Q00701_ProofOfExistence/Q00701_ProofOfExistence.java
index 2b4cfc586a95bc2345ba4c53a8002ee548c32bef..4032e1746a8c893bac6d3c7375def5e43f059fad 100644
--- a/dist/game/data/scripts/quests/Q00701_ProofOfExistence/Q00701_ProofOfExistence.java
+++ b/dist/game/data/scripts/quests/Q00701_ProofOfExistence/Q00701_ProofOfExistence.java
@@ -145,8 +145,7 @@ public class Q00701_ProofOfExistence extends Quest
 		switch (st.getState())
 		{
 			case State.CREATED:
-				final QuestState qs = player.getQuestState(Q10273_GoodDayToFly.class.getSimpleName());
-				htmltext = ((player.getLevel() >= MIN_LEVEL) && (qs != null) && qs.isCompleted()) ? "32559-01.htm" : "32559-02.htm";
+				htmltext = ((player.getLevel() >= MIN_LEVEL) && player.hasQuestCompleted(Q10273_GoodDayToFly.class.getSimpleName())) ? "32559-01.htm" : "32559-02.htm";
 				break;
 			case State.STARTED:
 				if (st.hasQuestItems(BANSHEE_QUEENS_EYE))
diff --git a/dist/game/data/scripts/quests/Q00702_ATrapForRevenge/Q00702_ATrapForRevenge.java b/dist/game/data/scripts/quests/Q00702_ATrapForRevenge/Q00702_ATrapForRevenge.java
index b5e0057a54f6cbea2342726c22e5855b1cd855e2..736320cc55d886368490d91116d037cf0efa94fa 100644
--- a/dist/game/data/scripts/quests/Q00702_ATrapForRevenge/Q00702_ATrapForRevenge.java
+++ b/dist/game/data/scripts/quests/Q00702_ATrapForRevenge/Q00702_ATrapForRevenge.java
@@ -371,8 +371,7 @@ public class Q00702_ATrapForRevenge extends Quest
 			switch (st.getState())
 			{
 				case State.CREATED:
-					final QuestState prev = player.getQuestState(Q10273_GoodDayToFly.class.getSimpleName());
-					htmltext = ((prev != null) && prev.isCompleted() && (player.getLevel() >= 78)) ? "32563-01.htm" : "32563-02.htm";
+					htmltext = (player.hasQuestCompleted(Q10273_GoodDayToFly.class.getSimpleName()) && (player.getLevel() >= 78)) ? "32563-01.htm" : "32563-02.htm";
 					break;
 				case State.STARTED:
 					htmltext = (st.isCond(1)) ? "32563-05.html" : "32563-06.html";
diff --git a/dist/game/data/scripts/quests/Q10271_TheEnvelopingDarkness/Q10271_TheEnvelopingDarkness.java b/dist/game/data/scripts/quests/Q10271_TheEnvelopingDarkness/Q10271_TheEnvelopingDarkness.java
index d5c1b31b81f7db3a622fc50ea535fc1e3bc71d47..f6b5286a7ff76e413c8cb93b34a9ad47eac2b030 100644
--- a/dist/game/data/scripts/quests/Q10271_TheEnvelopingDarkness/Q10271_TheEnvelopingDarkness.java
+++ b/dist/game/data/scripts/quests/Q10271_TheEnvelopingDarkness/Q10271_TheEnvelopingDarkness.java
@@ -86,8 +86,7 @@ public class Q10271_TheEnvelopingDarkness extends Quest
 				switch (st.getState())
 				{
 					case State.CREATED:
-						st = player.getQuestState(Q10269_ToTheSeedOfDestruction.class.getSimpleName());
-						htmltext = ((player.getLevel() >= 75) && (st != null) && st.isCompleted()) ? "32560-01.htm" : "32560-02.html";
+						htmltext = ((player.getLevel() >= 75) && player.hasQuestCompleted(Q10269_ToTheSeedOfDestruction.class.getSimpleName())) ? "32560-01.htm" : "32560-02.html";
 						break;
 					case State.STARTED:
 						switch (st.getCond())
diff --git a/dist/game/data/scripts/quests/Q10272_LightFragment/Q10272_LightFragment.java b/dist/game/data/scripts/quests/Q10272_LightFragment/Q10272_LightFragment.java
index a83360d5ca717cc546c208f34b493f96d72fe5b5..0b5a9e76ef0be54ccdf3bd9f96af2e6be6f8fa57 100644
--- a/dist/game/data/scripts/quests/Q10272_LightFragment/Q10272_LightFragment.java
+++ b/dist/game/data/scripts/quests/Q10272_LightFragment/Q10272_LightFragment.java
@@ -191,8 +191,7 @@ public class Q10272_LightFragment extends Quest
 						}
 						else
 						{
-							st = player.getQuestState(Q10271_TheEnvelopingDarkness.class.getSimpleName());
-							htmltext = ((st != null) && st.isCompleted()) ? "32560-01.htm" : "32560-02.html";
+							htmltext = (player.hasQuestCompleted(Q10271_TheEnvelopingDarkness.class.getSimpleName())) ? "32560-01.htm" : "32560-02.html";
 						}
 						break;
 					case State.STARTED:
diff --git a/dist/game/data/scripts/quests/Q10274_CollectingInTheAir/Q10274_CollectingInTheAir.java b/dist/game/data/scripts/quests/Q10274_CollectingInTheAir/Q10274_CollectingInTheAir.java
index b5d1dfb05332d01e72cc117c80c1d49fa4be8271..fcbc4a57222e9e3e0b7b8176b243006a9b6c8367 100644
--- a/dist/game/data/scripts/quests/Q10274_CollectingInTheAir/Q10274_CollectingInTheAir.java
+++ b/dist/game/data/scripts/quests/Q10274_CollectingInTheAir/Q10274_CollectingInTheAir.java
@@ -129,15 +129,7 @@ public class Q10274_CollectingInTheAir extends Quest
 				htmltext = "32557-0a.html";
 				break;
 			case State.CREATED:
-				st = player.getQuestState(Q10273_GoodDayToFly.class.getSimpleName());
-				if (st == null)
-				{
-					htmltext = "32557-00.html";
-				}
-				else
-				{
-					htmltext = ((player.getLevel() >= 75) && st.isCompleted()) ? "32557-01.htm" : "32557-00.html";
-				}
+				htmltext = ((player.getLevel() >= 75) && player.hasQuestCompleted(Q10273_GoodDayToFly.class.getSimpleName())) ? "32557-01.htm" : "32557-00.html";
 				break;
 			case State.STARTED:
 				if ((st.getQuestItemsCount(RED) + st.getQuestItemsCount(BLUE) + st.getQuestItemsCount(GREEN)) >= 8)
diff --git a/dist/game/data/scripts/quests/Q10283_RequestOfIceMerchant/Q10283_RequestOfIceMerchant.java b/dist/game/data/scripts/quests/Q10283_RequestOfIceMerchant/Q10283_RequestOfIceMerchant.java
index 20a80b7ecd6fca4df6bae95e49f37809930cec86..ad9654575ba779d9411bf18fd5c1ac049b728e1a 100644
--- a/dist/game/data/scripts/quests/Q10283_RequestOfIceMerchant/Q10283_RequestOfIceMerchant.java
+++ b/dist/game/data/scripts/quests/Q10283_RequestOfIceMerchant/Q10283_RequestOfIceMerchant.java
@@ -161,8 +161,7 @@ public class Q10283_RequestOfIceMerchant extends Quest
 		}
 		else if (st.isCreated())
 		{
-			final QuestState st1 = player.getQuestState(Q00115_TheOtherSideOfTruth.class.getSimpleName());
-			htmltext = ((player.getLevel() >= MIN_LEVEL) && (st1 != null) && (st1.isCompleted())) ? "32020-01.htm" : "32020-08.htm";
+			htmltext = ((player.getLevel() >= MIN_LEVEL) && player.hasQuestCompleted(Q00115_TheOtherSideOfTruth.class.getSimpleName())) ? "32020-01.htm" : "32020-08.htm";
 		}
 		else if (st.isStarted())
 		{
diff --git a/dist/game/data/scripts/quests/Q10284_AcquisitionOfDivineSword/Q10284_AcquisitionOfDivineSword.java b/dist/game/data/scripts/quests/Q10284_AcquisitionOfDivineSword/Q10284_AcquisitionOfDivineSword.java
index cef61d2cf6c798c4fd726c93d2aec449b4166536..9ef4bf0dc3217f62343a5cfb99a0a6272a4a38f2 100644
--- a/dist/game/data/scripts/quests/Q10284_AcquisitionOfDivineSword/Q10284_AcquisitionOfDivineSword.java
+++ b/dist/game/data/scripts/quests/Q10284_AcquisitionOfDivineSword/Q10284_AcquisitionOfDivineSword.java
@@ -217,8 +217,7 @@ public final class Q10284_AcquisitionOfDivineSword extends Quest
 		}
 		else if (st.isCreated())
 		{
-			st = player.getQuestState(Q10283_RequestOfIceMerchant.class.getSimpleName());
-			htmltext = ((player.getLevel() >= MIN_LEVEL) && (st != null) && (st.isCompleted())) ? "32020-01.htm" : "32020-04.html";
+			htmltext = ((player.getLevel() >= MIN_LEVEL) && player.hasQuestCompleted(Q10283_RequestOfIceMerchant.class.getSimpleName())) ? "32020-01.htm" : "32020-04.html";
 		}
 		else if (st.isStarted())
 		{
diff --git a/dist/game/data/scripts/quests/Q10285_MeetingSirra/Q10285_MeetingSirra.java b/dist/game/data/scripts/quests/Q10285_MeetingSirra/Q10285_MeetingSirra.java
index d0e9ff8976e1d3c8854ddf5abe952128ef9766e4..f72cc51e9ebe3ff0970e352669b60bd4bea0c174 100644
--- a/dist/game/data/scripts/quests/Q10285_MeetingSirra/Q10285_MeetingSirra.java
+++ b/dist/game/data/scripts/quests/Q10285_MeetingSirra/Q10285_MeetingSirra.java
@@ -224,8 +224,7 @@ public final class Q10285_MeetingSirra extends Quest
 		}
 		else if (st.isCreated())
 		{
-			st = player.getQuestState(Q10284_AcquisitionOfDivineSword.class.getSimpleName());
-			htmltext = ((player.getLevel() >= MIN_LEVEL) && (st != null) && (st.isCompleted())) ? "32020-01.htm" : "32020-04.htm";
+			htmltext = ((player.getLevel() >= MIN_LEVEL) && player.hasQuestCompleted(Q10284_AcquisitionOfDivineSword.class.getSimpleName())) ? "32020-01.htm" : "32020-04.htm";
 		}
 		else if (st.isStarted())
 		{
diff --git a/dist/game/data/scripts/quests/Q10286_ReunionWithSirra/Q10286_ReunionWithSirra.java b/dist/game/data/scripts/quests/Q10286_ReunionWithSirra/Q10286_ReunionWithSirra.java
index 6c69e9b84432ef0202d5c20b3a4e1ac4ff66e269..36f66812e0239b9c5965208ba5108c696e53dd9e 100644
--- a/dist/game/data/scripts/quests/Q10286_ReunionWithSirra/Q10286_ReunionWithSirra.java
+++ b/dist/game/data/scripts/quests/Q10286_ReunionWithSirra/Q10286_ReunionWithSirra.java
@@ -180,8 +180,7 @@ public final class Q10286_ReunionWithSirra extends Quest
 		}
 		else if (st.isCreated())
 		{
-			st = player.getQuestState(Q10285_MeetingSirra.class.getSimpleName());
-			htmltext = ((player.getLevel() >= MIN_LEVEL) && (st != null) && (st.isCompleted())) ? "32020-01.htm" : "32020-04.htm";
+			htmltext = ((player.getLevel() >= MIN_LEVEL) && player.hasQuestCompleted(Q10285_MeetingSirra.class.getSimpleName())) ? "32020-01.htm" : "32020-04.htm";
 		}
 		else if (st.isStarted())
 		{
diff --git a/dist/game/data/scripts/quests/Q10287_StoryOfThoseLeft/Q10287_StoryOfThoseLeft.java b/dist/game/data/scripts/quests/Q10287_StoryOfThoseLeft/Q10287_StoryOfThoseLeft.java
index 1860a320b4bf997a8b73090d4594d1c738fdca0d..bd95719591d7138a2e08721b917190cf6cfaf379 100644
--- a/dist/game/data/scripts/quests/Q10287_StoryOfThoseLeft/Q10287_StoryOfThoseLeft.java
+++ b/dist/game/data/scripts/quests/Q10287_StoryOfThoseLeft/Q10287_StoryOfThoseLeft.java
@@ -161,8 +161,7 @@ public final class Q10287_StoryOfThoseLeft extends Quest
 		{
 			if (npc.getId() == RAFFORTY)
 			{
-				st = player.getQuestState(Q10286_ReunionWithSirra.class.getSimpleName());
-				htmltext = ((player.getLevel() >= MIN_LEVEL) && (st != null) && (st.isCompleted())) ? "32020-01.htm" : "32020-03.htm";
+				htmltext = ((player.getLevel() >= MIN_LEVEL) && player.hasQuestCompleted(Q10286_ReunionWithSirra.class.getSimpleName())) ? "32020-01.htm" : "32020-03.htm";
 			}
 		}
 		else if (st.isStarted())
diff --git a/dist/game/data/scripts/quests/Q10292_SevenSignsGirlOfDoubt/Q10292_SevenSignsGirlOfDoubt.java b/dist/game/data/scripts/quests/Q10292_SevenSignsGirlOfDoubt/Q10292_SevenSignsGirlOfDoubt.java
index 2dfb85c8b868b20e59a7bdaf6d756c803c4d8295..3220fd1e5bbf2d874ca5df69d40ddd39018e675b 100644
--- a/dist/game/data/scripts/quests/Q10292_SevenSignsGirlOfDoubt/Q10292_SevenSignsGirlOfDoubt.java
+++ b/dist/game/data/scripts/quests/Q10292_SevenSignsGirlOfDoubt/Q10292_SevenSignsGirlOfDoubt.java
@@ -242,8 +242,7 @@ public final class Q10292_SevenSignsGirlOfDoubt extends Quest
 		}
 		else if (st.isCreated())
 		{
-			final QuestState st1 = player.getQuestState(Q00198_SevenSignsEmbryo.class.getSimpleName());
-			htmltext = ((player.getLevel() >= MIN_LEVEL) && (st1 != null) && (st1.isCompleted())) ? "32593-01.htm" : "32593-06.htm";
+			htmltext = ((player.getLevel() >= MIN_LEVEL) && player.hasQuestCompleted(Q00198_SevenSignsEmbryo.class.getSimpleName())) ? "32593-01.htm" : "32593-06.htm";
 		}
 		else if (st.isStarted())
 		{
diff --git a/dist/game/data/scripts/quests/Q10293_SevenSignsForbiddenBookOfTheElmoreAdenKingdom/Q10293_SevenSignsForbiddenBookOfTheElmoreAdenKingdom.java b/dist/game/data/scripts/quests/Q10293_SevenSignsForbiddenBookOfTheElmoreAdenKingdom/Q10293_SevenSignsForbiddenBookOfTheElmoreAdenKingdom.java
index cfeb4155b54b7e6871b9d26c214e5f587beb118f..de24ff2b8efb234938a3c87165c27f7e1778ff8f 100644
--- a/dist/game/data/scripts/quests/Q10293_SevenSignsForbiddenBookOfTheElmoreAdenKingdom/Q10293_SevenSignsForbiddenBookOfTheElmoreAdenKingdom.java
+++ b/dist/game/data/scripts/quests/Q10293_SevenSignsForbiddenBookOfTheElmoreAdenKingdom/Q10293_SevenSignsForbiddenBookOfTheElmoreAdenKingdom.java
@@ -18,13 +18,13 @@
  */
 package quests.Q10293_SevenSignsForbiddenBookOfTheElmoreAdenKingdom;
 
-import quests.Q10292_SevenSignsGirlOfDoubt.Q10292_SevenSignsGirlOfDoubt;
-
 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 quests.Q10292_SevenSignsGirlOfDoubt.Q10292_SevenSignsGirlOfDoubt;
+
 /**
  * Seven Signs, Forbidden Book of the Elmore-Aden Kingdom (10293)
  * @author Adry_85
@@ -232,8 +232,7 @@ public final class Q10293_SevenSignsForbiddenBookOfTheElmoreAdenKingdom extends
 				}
 				else if (qs.isCreated())
 				{
-					qs = player.getQuestState(Q10292_SevenSignsGirlOfDoubt.class.getSimpleName());
-					htmltext = ((player.getLevel() >= MIN_LEVEL) && (qs != null) && (qs.isCompleted())) ? "32784-01.htm" : "32784-11.htm";
+					htmltext = ((player.getLevel() >= MIN_LEVEL) && player.hasQuestCompleted(Q10292_SevenSignsGirlOfDoubt.class.getSimpleName())) ? "32784-01.htm" : "32784-11.htm";
 				}
 				else if (qs.isStarted())
 				{
diff --git a/dist/game/data/scripts/quests/Q10294_SevenSignsToTheMonasteryOfSilence/Q10294_SevenSignsToTheMonasteryOfSilence.java b/dist/game/data/scripts/quests/Q10294_SevenSignsToTheMonasteryOfSilence/Q10294_SevenSignsToTheMonasteryOfSilence.java
index 9fc07a3345f1ac620827c02fefbff072a98d5c01..2c99100120e651bd64f40ff11e03c45adeacf8f6 100644
--- a/dist/game/data/scripts/quests/Q10294_SevenSignsToTheMonasteryOfSilence/Q10294_SevenSignsToTheMonasteryOfSilence.java
+++ b/dist/game/data/scripts/quests/Q10294_SevenSignsToTheMonasteryOfSilence/Q10294_SevenSignsToTheMonasteryOfSilence.java
@@ -313,8 +313,7 @@ public final class Q10294_SevenSignsToTheMonasteryOfSilence extends Quest
 				}
 				else if (qs.isCreated())
 				{
-					qs = player.getQuestState(Q10293_SevenSignsForbiddenBookOfTheElmoreAdenKingdom.class.getSimpleName());
-					htmltext = ((player.getLevel() >= MIN_LEVEL) && (qs != null) && (qs.isCompleted())) ? "32784-01.htm" : "32784-07.htm";
+					htmltext = ((player.getLevel() >= MIN_LEVEL) && player.hasQuestCompleted(Q10293_SevenSignsForbiddenBookOfTheElmoreAdenKingdom.class.getSimpleName())) ? "32784-01.htm" : "32784-07.htm";
 				}
 				else if (qs.isStarted())
 				{
diff --git a/dist/game/data/scripts/quests/Q10295_SevenSignsSolinasTomb/Q10295_SevenSignsSolinasTomb.java b/dist/game/data/scripts/quests/Q10295_SevenSignsSolinasTomb/Q10295_SevenSignsSolinasTomb.java
index a4b99f0e3b0e316b3ef81cb3719821988bf1aab3..9e3b980f02d80eb9c8a86c1383e1dfaabf528922 100644
--- a/dist/game/data/scripts/quests/Q10295_SevenSignsSolinasTomb/Q10295_SevenSignsSolinasTomb.java
+++ b/dist/game/data/scripts/quests/Q10295_SevenSignsSolinasTomb/Q10295_SevenSignsSolinasTomb.java
@@ -294,8 +294,7 @@ public final class Q10295_SevenSignsSolinasTomb extends Quest
 		}
 		else if (st.isCreated())
 		{
-			final QuestState st1 = player.getQuestState(Q10294_SevenSignsToTheMonasteryOfSilence.class.getSimpleName());
-			if ((player.getLevel() >= MIN_LEVEL) && (st1 != null) && (st1.isCompleted()))
+			if ((player.getLevel() >= MIN_LEVEL) && player.hasQuestCompleted(Q10294_SevenSignsToTheMonasteryOfSilence.class.getSimpleName()))
 			{
 				htmltext = "32792-01.htm";
 			}
diff --git a/dist/game/data/scripts/quests/Q10296_SevenSignsOneWhoSeeksThePowerOfTheSeal/Q10296_SevenSignsOneWhoSeeksThePowerOfTheSeal.java b/dist/game/data/scripts/quests/Q10296_SevenSignsOneWhoSeeksThePowerOfTheSeal/Q10296_SevenSignsOneWhoSeeksThePowerOfTheSeal.java
index f1ef8815317374c7f8e9172094c7ae7d27646576..885b2282c6bda850ec13ee085ba400dd7a97aa67 100644
--- a/dist/game/data/scripts/quests/Q10296_SevenSignsOneWhoSeeksThePowerOfTheSeal/Q10296_SevenSignsOneWhoSeeksThePowerOfTheSeal.java
+++ b/dist/game/data/scripts/quests/Q10296_SevenSignsOneWhoSeeksThePowerOfTheSeal/Q10296_SevenSignsOneWhoSeeksThePowerOfTheSeal.java
@@ -164,8 +164,7 @@ public final class Q10296_SevenSignsOneWhoSeeksThePowerOfTheSeal extends Quest
 		}
 		else if (st.isCreated())
 		{
-			final QuestState st1 = player.getQuestState(Q10295_SevenSignsSolinasTomb.class.getSimpleName());
-			if ((st1 != null) && (st1.isCompleted()))
+			if (player.hasQuestCompleted(Q10295_SevenSignsSolinasTomb.class.getSimpleName()))
 			{
 				if ((npc.getId() == ERISS_EVIL_THOUGHTS) && (player.getLevel() >= MIN_LEVEL))
 				{