diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/Alexandria/Alexandria.java b/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/Alexandria/Alexandria.java
index befbf54dd5cb451f740cfcabd0eb92fbd8e0c608..95a5eb7fdd31d9a3a99d205ee9870ea8358e9158 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/Alexandria/Alexandria.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/Alexandria/Alexandria.java
@@ -101,29 +101,14 @@ public final class Alexandria extends AbstractNpcAI
 				chance3 += agathion.getChance();
 				if ((chance >= chance2) && (chance2 < chance3))
 				{
-					boolean hasAllItems = true;
-					for (ItemHolder item : REQUIRED_ITEMS)
+					if (takeAllItems(player, REQUIRED_ITEMS))
 					{
-						if (getQuestItemsCount(player, item.getId()) < item.getCount())
-						{
-							hasAllItems = false;
-							break;
-						}
-					}
-					if (hasAllItems)
-					{
-						for (ItemHolder item : REQUIRED_ITEMS)
-						{
-							takeItems(player, item);
-						}
-						
-						giveItems(player, agathion.getId(), 1);
+						giveItems(player, agathion);
 						htmltext = "30098-03.html";
 						
 						if (agathion instanceof AdditionalQuestItemHolder)
 						{
-							final AdditionalQuestItemHolder addAgathion = (AdditionalQuestItemHolder) agathion;
-							giveItems(player, addAgathion.getAdditionalId(), 1);
+							giveItems(player, ((AdditionalQuestItemHolder) agathion).getAdditionalId(), 1);
 							htmltext = "30098-03a.html";
 						}
 					}
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00032_AnObviousLie/Q00032_AnObviousLie.java b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00032_AnObviousLie/Q00032_AnObviousLie.java
index 54000faa9833aecc2c382b80fffb9fc48adb7b33..fdcdb5a5537e829b5d031db27e6ff8eb75104790 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00032_AnObviousLie/Q00032_AnObviousLie.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00032_AnObviousLie/Q00032_AnObviousLie.java
@@ -23,6 +23,7 @@ import java.util.Map;
 
 import com.l2jserver.gameserver.model.actor.L2Npc;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jserver.gameserver.model.holders.ItemHolder;
 import com.l2jserver.gameserver.model.quest.Quest;
 import com.l2jserver.gameserver.model.quest.QuestState;
 
@@ -40,13 +41,12 @@ public final class Q00032_AnObviousLie extends Quest
 	private static final int ALLIGATOR = 20135;
 	// Items
 	private static final int MAP_OF_GENTLER = 7165;
-	private static final int MEDICINAL_HERB = 7166;
-	private static final int SPIRIT_ORE = 3031;
-	private static final int THREAD = 1868;
-	private static final int SUEDE = 1866;
+	private static final ItemHolder MEDICINAL_HERB = new ItemHolder(7166, 20);
+	private static final ItemHolder SPIRIT_ORE = new ItemHolder(3031, 500);
+	private static final ItemHolder THREAD = new ItemHolder(1868, 1000);
+	private static final ItemHolder SUEDE = new ItemHolder(1866, 500);
 	// Misc
 	private static final int MIN_LVL = 45;
-	private static final int REQUIRED_HERB_COUNT = 20;
 	// Reward
 	private static final Map<String, Integer> EARS = new HashMap<>();
 	{
@@ -61,7 +61,7 @@ public final class Q00032_AnObviousLie extends Quest
 		addStartNpc(MAXIMILIAN);
 		addTalkId(MAXIMILIAN, GENTLER, MIKI_THE_CAT);
 		addKillId(ALLIGATOR);
-		registerQuestItems(MEDICINAL_HERB, MAP_OF_GENTLER);
+		registerQuestItems(MAP_OF_GENTLER, MEDICINAL_HERB.getId());
 	}
 	
 	@Override
@@ -99,7 +99,7 @@ public final class Q00032_AnObviousLie extends Quest
 			{
 				if (qs.isCond(2) && hasQuestItems(player, MAP_OF_GENTLER))
 				{
-					takeItems(player, MAP_OF_GENTLER, 1);
+					takeItems(player, MAP_OF_GENTLER, -1);
 					qs.setCond(3, true);
 					htmltext = event;
 				}
@@ -107,9 +107,9 @@ public final class Q00032_AnObviousLie extends Quest
 			}
 			case "30094-06.html":
 			{
-				if (qs.isCond(4) && (getQuestItemsCount(player, MEDICINAL_HERB) >= 20))
+				if (qs.isCond(4) && hasItem(player, MEDICINAL_HERB))
 				{
-					takeItems(player, MEDICINAL_HERB, 20);
+					takeItem(player, MEDICINAL_HERB);
 					qs.setCond(5, true);
 					htmltext = event;
 				}
@@ -117,9 +117,9 @@ public final class Q00032_AnObviousLie extends Quest
 			}
 			case "30094-09.html":
 			{
-				if (qs.isCond(5) && (getQuestItemsCount(player, SPIRIT_ORE) >= 500))
+				if (qs.isCond(5) && hasItem(player, SPIRIT_ORE))
 				{
-					takeItems(player, SPIRIT_ORE, 500);
+					takeItem(player, SPIRIT_ORE);
 					qs.setCond(6, true);
 					htmltext = event;
 				}
@@ -152,10 +152,8 @@ public final class Q00032_AnObviousLie extends Quest
 			case "raccoon":
 			case "rabbit":
 			{
-				if (qs.isCond(8) && (getQuestItemsCount(player, THREAD) >= 1000) && (getQuestItemsCount(player, SUEDE) >= 500))
+				if (qs.isCond(8) && takeAllItems(player, THREAD, SUEDE))
 				{
-					takeItems(player, THREAD, 1000);
-					takeItems(player, SUEDE, 500);
 					giveItems(player, EARS.get(event), 1);
 					qs.exitQuest(false, true);
 					htmltext = "30094-16.html";
@@ -174,7 +172,7 @@ public final class Q00032_AnObviousLie extends Quest
 	public String onKill(L2Npc npc, L2PcInstance killer, boolean isSummon)
 	{
 		final QuestState qs = getRandomPartyMemberState(killer, 3, 3, npc);
-		if ((qs != null) && giveItemRandomly(qs.getPlayer(), npc, MEDICINAL_HERB, 1, REQUIRED_HERB_COUNT, 1.0, true))
+		if ((qs != null) && giveItemRandomly(qs.getPlayer(), npc, MEDICINAL_HERB.getId(), 1, MEDICINAL_HERB.getCount(), 1.0, true))
 		{
 			qs.setCond(4);
 		}
@@ -228,12 +226,12 @@ public final class Q00032_AnObviousLie extends Quest
 					}
 					case 4:
 					{
-						htmltext = ((getQuestItemsCount(player, MEDICINAL_HERB) >= 20) ? "30094-04.html" : "30094-05.html");
+						htmltext = (hasItem(player, MEDICINAL_HERB) ? "30094-04.html" : "30094-05.html");
 						break;
 					}
 					case 5:
 					{
-						htmltext = ((getQuestItemsCount(player, SPIRIT_ORE) >= 500) ? "30094-07.html" : "30094-08.html");
+						htmltext = (hasItem(player, SPIRIT_ORE) ? "30094-07.html" : "30094-08.html");
 						break;
 					}
 					case 6:
@@ -248,7 +246,7 @@ public final class Q00032_AnObviousLie extends Quest
 					}
 					case 8:
 					{
-						if ((getQuestItemsCount(player, THREAD) >= 1000) && (getQuestItemsCount(player, SUEDE) >= 500))
+						if (hasAllItems(player, true, THREAD, SUEDE))
 						{
 							htmltext = "30094-13.html";
 						}
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00284_MuertosFeather/Q00284_MuertosFeather.java b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00284_MuertosFeather/Q00284_MuertosFeather.java
index 85416ea267231887e74a3a106efc077610e79cdc..90ab60691dd5a58aafb85bafc58e8097f51dbb1b 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00284_MuertosFeather/Q00284_MuertosFeather.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00284_MuertosFeather/Q00284_MuertosFeather.java
@@ -111,7 +111,7 @@ public final class Q00284_MuertosFeather extends Quest
 		final QuestState qs = getRandomPartyMemberState(killer, 1, 3, npc);
 		if (qs != null)
 		{
-			giveItemRandomly(killer, npc, MUERTOS_FEATHER, 1, 0, MOB_DROP_CHANCE.get(npc.getId()), true);
+			giveItemRandomly(qs.getPlayer(), npc, MUERTOS_FEATHER, 1, 0, MOB_DROP_CHANCE.get(npc.getId()), true);
 		}
 		return super.onKill(npc, killer, isSummon);
 	}
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00286_FabulousFeathers/Q00286_FabulousFeathers.java b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00286_FabulousFeathers/Q00286_FabulousFeathers.java
index 0e6dbfb033ce7d124e48793b646486ac608d52e7..d6382a97615f7bf45c66ba6f0af1e3c26658ea06 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00286_FabulousFeathers/Q00286_FabulousFeathers.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00286_FabulousFeathers/Q00286_FabulousFeathers.java
@@ -23,6 +23,7 @@ import java.util.Map;
 
 import com.l2jserver.gameserver.model.actor.L2Npc;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jserver.gameserver.model.holders.ItemHolder;
 import com.l2jserver.gameserver.model.quest.Quest;
 import com.l2jserver.gameserver.model.quest.QuestState;
 
@@ -35,7 +36,7 @@ public final class Q00286_FabulousFeathers extends Quest
 	// NPC
 	private static final int ERINU = 32164;
 	// Item
-	private static final int COMMANDERS_FEATHER = 9746;
+	private static final ItemHolder COMMANDERS_FEATHER = new ItemHolder(9746, 80);
 	// Monsters
 	private static final Map<Integer, Double> MOB_DROP_CHANCES = new HashMap<>();
 	static
@@ -55,7 +56,7 @@ public final class Q00286_FabulousFeathers extends Quest
 		addStartNpc(ERINU);
 		addTalkId(ERINU);
 		addKillId(MOB_DROP_CHANCES.keySet());
-		registerQuestItems(COMMANDERS_FEATHER);
+		registerQuestItems(COMMANDERS_FEATHER.getId());
 	}
 	
 	@Override
@@ -77,9 +78,9 @@ public final class Q00286_FabulousFeathers extends Quest
 			}
 			case "32164-06.html":
 			{
-				if (qs.isCond(2) && (getQuestItemsCount(player, COMMANDERS_FEATHER) >= 80))
+				if (qs.isCond(2) && hasItem(player, COMMANDERS_FEATHER))
 				{
-					takeItems(player, COMMANDERS_FEATHER, -1);
+					takeItem(player, COMMANDERS_FEATHER);
 					giveAdena(player, 4160, true);
 					qs.exitQuest(true, true);
 					html = event;
@@ -100,7 +101,7 @@ public final class Q00286_FabulousFeathers extends Quest
 		final QuestState qs = getRandomPartyMemberState(killer, 1, 3, npc);
 		if (qs != null)
 		{
-			if (giveItemRandomly(killer, npc, COMMANDERS_FEATHER, 1, 80, MOB_DROP_CHANCES.get(npc.getId()), true))
+			if (giveItemRandomly(qs.getPlayer(), npc, COMMANDERS_FEATHER.getId(), 1, COMMANDERS_FEATHER.getCount(), MOB_DROP_CHANCES.get(npc.getId()), true))
 			{
 				qs.setCond(2);
 			}
@@ -119,7 +120,7 @@ public final class Q00286_FabulousFeathers extends Quest
 		}
 		else if (qs.isStarted())
 		{
-			html = ((qs.isCond(2) && (getQuestItemsCount(player, COMMANDERS_FEATHER) >= 80)) ? "32164-04.html" : "32164-05.html");
+			html = ((qs.isCond(2) && hasItem(player, COMMANDERS_FEATHER)) ? "32164-04.html" : "32164-05.html");
 		}
 		return html;
 	}
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00291_RevengeOfTheRedbonnet/Q00291_RevengeOfTheRedbonnet.java b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00291_RevengeOfTheRedbonnet/Q00291_RevengeOfTheRedbonnet.java
index 663ac44755d306edc0542a101f9a6797ed8bfc4a..ce196fb1be9009de5ed282fa7dcffe7bbfa0aebb 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00291_RevengeOfTheRedbonnet/Q00291_RevengeOfTheRedbonnet.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00291_RevengeOfTheRedbonnet/Q00291_RevengeOfTheRedbonnet.java
@@ -20,6 +20,7 @@ package quests.Q00291_RevengeOfTheRedbonnet;
 
 import com.l2jserver.gameserver.model.actor.L2Npc;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jserver.gameserver.model.holders.ItemHolder;
 import com.l2jserver.gameserver.model.quest.Quest;
 import com.l2jserver.gameserver.model.quest.QuestState;
 import com.l2jserver.gameserver.util.Util;
@@ -33,7 +34,7 @@ public final class Q00291_RevengeOfTheRedbonnet extends Quest
 	// NPC
 	private static final int MARYSE_REDBONNET = 30553;
 	// Item
-	private static final int BLACK_WOLF_PELT = 1482;
+	private static final ItemHolder BLACK_WOLF_PELT = new ItemHolder(1482, 40);
 	// Monster
 	private static final int BLACK_WOLF = 20317;
 	// Rewards
@@ -51,14 +52,14 @@ public final class Q00291_RevengeOfTheRedbonnet extends Quest
 		addStartNpc(MARYSE_REDBONNET);
 		addTalkId(MARYSE_REDBONNET);
 		addKillId(BLACK_WOLF);
-		registerQuestItems(BLACK_WOLF_PELT);
+		registerQuestItems(BLACK_WOLF_PELT.getId());
 	}
 	
 	@Override
 	public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
 	{
 		final QuestState qs = getQuestState(player, false);
-		if ((qs != null) && event.equalsIgnoreCase("30553-03.htm"))
+		if ((qs != null) && event.equals("30553-03.htm"))
 		{
 			qs.startQuest();
 			return event;
@@ -70,9 +71,9 @@ public final class Q00291_RevengeOfTheRedbonnet extends Quest
 	public String onKill(L2Npc npc, L2PcInstance killer, boolean isSummon)
 	{
 		final QuestState qs = getQuestState(killer, false);
-		if ((qs != null) && qs.isCond(1) && Util.checkIfInRange(1500, npc, killer, true) && (getQuestItemsCount(killer, BLACK_WOLF_PELT) < 40))
+		if ((qs != null) && qs.isCond(1) && Util.checkIfInRange(1500, npc, killer, true))
 		{
-			if (giveItemRandomly(killer, npc, BLACK_WOLF_PELT, 1, 40, 1, true))
+			if (giveItemRandomly(qs.getPlayer(), npc, BLACK_WOLF_PELT.getId(), 1, BLACK_WOLF_PELT.getCount(), 1.0, true))
 			{
 				qs.setCond(2);
 			}
@@ -91,9 +92,9 @@ public final class Q00291_RevengeOfTheRedbonnet extends Quest
 		}
 		else if (qs.isStarted())
 		{
-			if (qs.isCond(2) && (getQuestItemsCount(player, BLACK_WOLF_PELT) >= 40))
+			if (qs.isCond(2) && hasItem(player, BLACK_WOLF_PELT))
 			{
-				takeItems(player, BLACK_WOLF_PELT, -1);
+				takeItem(player, BLACK_WOLF_PELT);
 				final int chance = getRandom(100);
 				if (chance <= 2)
 				{