diff --git a/datapack_development/data/scripts/handlers/MasterHandler.java b/datapack_development/data/scripts/handlers/MasterHandler.java
index f01206a03ba89afa577d7ddc4bb65c3237083006..7fe2acc5a532fe4e2ba0e60b458a42504ada6423 100644
--- a/datapack_development/data/scripts/handlers/MasterHandler.java
+++ b/datapack_development/data/scripts/handlers/MasterHandler.java
@@ -121,14 +121,12 @@ public class MasterHandler
 	
 	private static void loadItemHandlers()
 	{
-		ItemHandler.getInstance().registerItemHandler(new ScrollOfEscape());
 		ItemHandler.getInstance().registerItemHandler(new ScrollOfResurrection());
 		ItemHandler.getInstance().registerItemHandler(new SoulShots());
 		ItemHandler.getInstance().registerItemHandler(new SpiritShot());
 		ItemHandler.getInstance().registerItemHandler(new BlessedSpiritShot());
 		ItemHandler.getInstance().registerItemHandler(new BeastSoulShot());
 		ItemHandler.getInstance().registerItemHandler(new BeastSpiritShot());
-		ItemHandler.getInstance().registerItemHandler(new Key());
 		ItemHandler.getInstance().registerItemHandler(new PaganKeys());
 		ItemHandler.getInstance().registerItemHandler(new Maps());
 		ItemHandler.getInstance().registerItemHandler(new Potions());
diff --git a/datapack_development/data/scripts/handlers/itemhandlers/BeastSpiritShot.java b/datapack_development/data/scripts/handlers/itemhandlers/BeastSpiritShot.java
index ad95bb166ff54d965c954ebf319d60a4611fe1f9..61dcdf15d4a8955b7ccea3865bd988c1b2b72cc6 100644
--- a/datapack_development/data/scripts/handlers/itemhandlers/BeastSpiritShot.java
+++ b/datapack_development/data/scripts/handlers/itemhandlers/BeastSpiritShot.java
@@ -58,13 +58,6 @@ public class BeastSpiritShot implements IItemHandler
 			return;
 		}
 		
-		// Blessed Beast Spirit Shot cannot be used in olympiad.
-        if ((item.getItemId() == 6647 || item.getItemId() == 20334) && activeOwner.isInOlympiadMode())
-        {
-        	activeOwner.sendPacket(new SystemMessage(SystemMessageId.THIS_ITEM_IS_NOT_AVAILABLE_FOR_THE_OLYMPIAD_EVENT));
-			return;
-        }
-		
 		L2Summon activePet = activeOwner.getPet();
 		
 		if (activePet == null)
diff --git a/datapack_development/data/scripts/handlers/itemhandlers/CharChangePotions.java b/datapack_development/data/scripts/handlers/itemhandlers/CharChangePotions.java
index eb8026f18596a5dbb290eb07eedd078679e6917e..b3ee6b1ab3a747061235d43b9a983075ab8002f1 100644
--- a/datapack_development/data/scripts/handlers/itemhandlers/CharChangePotions.java
+++ b/datapack_development/data/scripts/handlers/itemhandlers/CharChangePotions.java
@@ -106,8 +106,7 @@ public class CharChangePotions implements IItemHandler
 		}
 		
 		// Create a summon effect!
-		MagicSkillUse MSU = new MagicSkillUse(playable, activeChar, 2003, 1, 1, 0);
-		activeChar.broadcastPacket(MSU);
+		activeChar.broadcastPacket(new MagicSkillUse(playable, activeChar, 2003, 1, 1, 0));
 		
 		// Update the changed stat for the character in the DB.
 		activeChar.store();
@@ -116,8 +115,7 @@ public class CharChangePotions implements IItemHandler
 		activeChar.destroyItem("Consume", item.getObjectId(), 1, null, false);
 		
 		// Broadcast the changes to the char and all those nearby.
-		UserInfo ui = new UserInfo(activeChar);
-		activeChar.broadcastPacket(ui);
+		activeChar.broadcastPacket(new UserInfo(activeChar));
 		activeChar.broadcastPacket(new ExBrExtraUserInfo(activeChar));
 	}
 	
diff --git a/datapack_development/data/scripts/handlers/itemhandlers/ItemSkills.java b/datapack_development/data/scripts/handlers/itemhandlers/ItemSkills.java
index a4f9dcd2d7cb0eb80ad5a561067dd3d978d61f9e..669c5fe04c082e5ef362c195a3dc185065bd6df5 100644
--- a/datapack_development/data/scripts/handlers/itemhandlers/ItemSkills.java
+++ b/datapack_development/data/scripts/handlers/itemhandlers/ItemSkills.java
@@ -36,14 +36,14 @@ public class ItemSkills implements IItemHandler
 	// TODO: unhardcode item ids
 	private static final int[] ITEM_IDS =
 	{
-		65,725,726,733,734,735,1374,1375,1539,1540,3926,3927,3928,3929,
-		3930,3931,3932,3933,3934,3935,4218,4411,4412,
+		65,725,726,733,734,735,736,1374,1375,1538,1539,1540,1829,1830,
+		3926,3927,3928,3929,3930,3931,3932,3933,3934,3935,3958,4218,4411,4412,
 		4413,4414,4415,4417,5010,5134,5135,5136,5137,5138,5139,5140,
 		5141,5142,5143,5144,5145,5146,5147,5148,5149,5150,5151,5234,
 		5250,5251,5252,5253,5254,5255,5256,5257,5258,5259,5260,5261,
 		5262,5263,5264,5265,5266,5267,5562,5563,5564,5565,5566,5583,
 		5584,5585,5586,5587,5589,5591,5592,5593,5594,5595,5703,5803,
-		5804,5805,5806,5807,5916,5944,5955,5966,5967,5968,5969,6007,
+		5804,5805,5806,5807,5858,5859,5916,5944,5955,5966,5967,5968,5969,6007,
 		6008,6009,6010,6035,6036,6037,6403,6406,6407,6411,6412,6413,
 		6414,6415,6416,6417,6418,6419,6420,6421,6422,6423,6424,6425,
 		6426,6427,6428,6429,6430,6431,6432,6433,6434,6435,6436,6437,
@@ -54,14 +54,17 @@ public class ItemSkills implements IItemHandler
 		6486,6487,6488,6489,6490,6491,6492,6493,6494,6495,6496,6497,
 		6498,6499,6500,6501,6502,6503,6504,6505,6506,6507,6508,6509,
 		6510,6511,6512,6513,6514,6515,6516,6517,6518,6652,6654,6655,
-		6903,7061,7062,7629,7630,7631,7632,7633,7634,7635,7636,7637,
+		6665,6666,6667,6668,6669,6670,6671,6672,6903,7061,7062,7117,
+		7118,7119,7120,7121,7122,7123,7124,7125,7126,7127,7128,7129,
+		7130,7131,7132,7133,7134,7135,7554,7555,7556,7557,7558,7559,
+		7618,7619,7629,7630,7631,7632,7633,7634,7635,7636,7637,
 		7725,7726,7727,7728,7729,7730,7731,7732,7733,7734,7735,7736,
 		7737,7738,7739,7740,7741,7742,7743,7744,7745,7746,7747,7748,
 		7749,7750,7751,7752,7753,7754,7755,7756,7757,7758,7759,7760,
 		7761,7762,7763,7764,7765,7766,7767,7768,7769,7770,7771,7772,
 		7773,7774,7775,7776,7777,7778,7779,7780,7781,7782,7783,7784,
 		7785,7786,7787,7788,7789,7790,7791,7792,7793,7794,7795,7796,
-		7797,7798,7799,7800,7801,7802,7803,7804,7805,7806,8154,8155,
+		7797,7798,7799,7800,7801,7802,7803,7804,7805,7806,8060,8154,8155,
 		8156,8157,8202,8403,8404,8405,8406,8407,8408,8409,8410,8411,
 		8412,8413,8414,8415,8416,8417,8418,8419,8420,8421,8422,8423,
 		8424,8425,8426,8427,8428,8429,8430,8431,8432,8433,8434,8435,
@@ -72,25 +75,31 @@ public class ItemSkills implements IItemHandler
 		8534,8535,8536,8537,8538,8539,8540,8555,8594,8595,8596,8597,
 		8598,8599,8600,8601,8602,8603,8604,8605,8606,8607,8608,8609,
 		8610,8611,8612,8613,8614,8952,8953,8954,8955,8956,9146,9147,
-		9148,9149,9150,9151,9152,9153,9154,9155,9688,9689,9897,9997,
-		9998,9999,10000,10001,10002,10131,10132,10133,10134,10135,
-		10136,10137,10138,10151,10155,10157,10260,10261,10262,10263,
+		9148,9149,9150,9151,9152,9153,9154,9155,9156,9647,9688,9689,
+		9716,9897,9997,9998,9999,10000,10001,10002,10129,10130,10131,
+		10132,10133,10134,10135,10136,10137,10138,10149,10151,10155,
+		10157,10260,10261,10262,10263,
 		10264,10265,10266,10267,10268,10269,10270,10274,10409,10432,
 		10433,10515,10516,10517,10549,10550,10551,10552,10553,
 		10554,10555,10556,10557,10558,10559,10560,10561,10562,10563,
 		10564,10565,10566,10567,10568,10569,10570,10571,10572,10573,
 		10574,10575,10576,10577,10578,10579,10580,10581,10582,10583,
 		10584,10585,10586,10587,10588,10589,10591,10592,10593,10594,
-		10595,10608,10609,10610,10655,10632,10656,10657,
-		12768,12769,12770,12771,13032,13261,13262,13263,13264,13265,
-		13266,13267,13268,13269,13386,13387,13388,13552,13553,13554,
-		13728,13844,14170,14171,14172,14173,14174,14175,14176,14177,
+		10595,10608,10609,10610,10632,10650,10655,10656,10657,12768,
+		12769,12770,12771,13032,13129,13258,13261,13262,13263,13264,
+		13265,13266,13267,13268,13269,13386,13387,13388,13395,13396,
+		13397,13398,13399,13400,13401,13402,13403,13404,13405,13406,
+		13407,13408,13409,13410,13411,13412,13413,13414,13552,13553,
+		13554,13728,13731,13732,13733,13734,13735,13736,13737,13738,
+		13739,13844,14170,14171,14172,14173,14174,14175,14176,14177,
 		14178,14179,14180,14181,14182,14183,14184,14185,14186,14187,
 		14188,14189,14190,14191,14192,14193,14194,14195,14196,14197,
 		14198,14199,14200,14201,14202,14203,14204,14205,14206,14207,
 		14208,14209,14210,14211,14212,14213,14214,14215,14216,14217,
 		14218,14219,14220,14221,14222,14223,14224,14225,14226,14227,
-		20353,20364,20365,20366,20367,20368,20369,20370,20371,22022,
+		20353,20364,20365,20366,20367,20368,20369,20370,20371,20372,
+		20373,20374,20375,20376,20377,20378,20379,20380,20381,20382,
+		20383,20384,20385,20386,20387,20388,20389,20390,22022,
 		22023,22024,22025,22026,22037,22039,22040,22041,22042,22043,
 		22044,22045,22046,22047,22048,22049,22050,22051,22052,22053,
 		22087,22088,
diff --git a/datapack_development/data/scripts/handlers/itemhandlers/Key.java b/datapack_development/data/scripts/handlers/itemhandlers/Key.java
deleted file mode 100644
index e0998577d4290edaabdd26d9e89bef0207ad13fe..0000000000000000000000000000000000000000
--- a/datapack_development/data/scripts/handlers/itemhandlers/Key.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * This program is free software: you can redistribute it and/or modify it under
- * the terms of the GNU General Public License as published by the Free Software
- * Foundation, either version 3 of the License, or (at your option) any later
- * version.
- * 
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
- * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
- * details.
- * 
- * You should have received a copy of the GNU General Public License along with
- * this program. If not, see <http://www.gnu.org/licenses/>.
- */
-package handlers.itemhandlers;
-
-import net.sf.l2j.gameserver.datatables.SkillTable;
-import net.sf.l2j.gameserver.handler.IItemHandler;
-import net.sf.l2j.gameserver.model.L2ItemInstance;
-import net.sf.l2j.gameserver.model.L2Object;
-import net.sf.l2j.gameserver.model.L2Skill;
-import net.sf.l2j.gameserver.model.actor.L2Playable;
-import net.sf.l2j.gameserver.model.actor.instance.L2ChestInstance;
-import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
-import net.sf.l2j.gameserver.network.SystemMessageId;
-import net.sf.l2j.gameserver.network.serverpackets.ActionFailed;
-import net.sf.l2j.gameserver.network.serverpackets.SystemMessage;
-
-public class Key implements IItemHandler
-{
-	public static final int INTERACTION_DISTANCE = 100;
-	
-	private static final int[] ITEM_IDS =
-	{
-		6665, 6666, 6667, 6668, 6669,
-		6670, 6671, 6672, 8060
-	};
-	
-	/**
-	 * 
-	 * @see net.sf.l2j.gameserver.handler.IItemHandler#useItem(net.sf.l2j.gameserver.model.actor.L2Playable, net.sf.l2j.gameserver.model.L2ItemInstance)
-	 */
-	public void useItem(L2Playable playable, L2ItemInstance item)
-	{
-		if (!(playable instanceof L2PcInstance))
-			return;
-		L2PcInstance activeChar = (L2PcInstance) playable;
-		
-		int itemId = item.getItemId();
-		
-		switch (itemId)
-		{
-			case 6665:
-			case 6666:
-			case 6667:
-			case 6668:
-			case 6669:
-			case 6670:
-			case 6671:
-			case 6672:
-			{
-				L2Skill skill = SkillTable.getInstance().getInfo(2229, itemId - 6664); // box key skill
-				L2Object target = activeChar.getTarget();
-				
-				if (!(target instanceof L2ChestInstance))
-				{
-					activeChar.sendPacket(new SystemMessage(SystemMessageId.INCORRECT_TARGET));
-					activeChar.sendPacket(ActionFailed.STATIC_PACKET);
-				}
-				else
-				{
-					L2ChestInstance chest = (L2ChestInstance) target;
-					if (chest.isDead() || chest.isInteracted())
-					{
-						activeChar.sendMessage("The chest Is empty.");
-						activeChar.sendPacket(ActionFailed.STATIC_PACKET);
-						return;
-					}
-					activeChar.useMagic(skill, false, false);
-				}
-				break;
-			}
-			case 8060:
-			{
-				L2Skill skill = SkillTable.getInstance().getInfo(2260, 1);
-				activeChar.doSimultaneousCast(skill);
-				break;
-			}
-		}
-	}
-	
-	/**
-	 * 
-	 * @see net.sf.l2j.gameserver.handler.IItemHandler#getItemIds()
-	 */
-	public int[] getItemIds()
-	{
-		return ITEM_IDS;
-	}
-}
diff --git a/datapack_development/data/scripts/handlers/itemhandlers/Maps.java b/datapack_development/data/scripts/handlers/itemhandlers/Maps.java
index e8e5800d1292bc7627322d53671761b4f6c678f5..2932de49c615c659be2349b623a7511ba337982a 100644
--- a/datapack_development/data/scripts/handlers/itemhandlers/Maps.java
+++ b/datapack_development/data/scripts/handlers/itemhandlers/Maps.java
@@ -43,8 +43,8 @@ public class Maps implements IItemHandler
 	{
 		if (!(playable instanceof L2PcInstance))
 			return;
-		L2PcInstance activeChar = (L2PcInstance) playable;
-		activeChar.sendPacket(new ShowMiniMap(item.getItemId()));
+		
+		playable.sendPacket(new ShowMiniMap(item.getItemId()));
 	}
 	
 	/**
diff --git a/datapack_development/data/scripts/handlers/itemhandlers/MercTicket.java b/datapack_development/data/scripts/handlers/itemhandlers/MercTicket.java
index d9a13a26633dc16ae55e8a968165831001cc03ae..cf800fa061a26bb6245a6aeef8f367a9677be6f0 100644
--- a/datapack_development/data/scripts/handlers/itemhandlers/MercTicket.java
+++ b/datapack_development/data/scripts/handlers/itemhandlers/MercTicket.java
@@ -27,13 +27,6 @@ import net.sf.l2j.gameserver.network.serverpackets.SystemMessage;
 
 public class MercTicket implements IItemHandler
 {
-	private static final String[] MESSAGES =
-	{
-		"To arms!.",
-		"I am ready to serve you my lord when the time comes.",
-		"You summon me."
-	};
-	
 	/**
 	 * handler for using mercenary tickets.  Things to do:
 	 * 1) Check constraints:
@@ -58,43 +51,8 @@ public class MercTicket implements IItemHandler
 		//add check that certain tickets can only be placed in certain castles
 		if (MercTicketManager.getInstance().getTicketCastleId(itemId) != castleId)
 		{
-			if (castleId == -1)
-			{
-				// player is not in a castle
-				activeChar.sendMessage("Mercenary Tickets can only be used in a castle.");
-				return;  			
-			}
-
-			switch (MercTicketManager.getInstance().getTicketCastleId(itemId))
-			{
-				case 1:
-					activeChar.sendMessage("This Mercenary Ticket can only be used in Gludio.");
-		     		return;
-				case 2:
-					activeChar.sendMessage("This Mercenary Ticket can only be used in Dion.");
-					return;
-				case 3:
-					activeChar.sendMessage("This Mercenary Ticket can only be used in Giran.");
-					return;
-				case 4:
-					activeChar.sendMessage("This Mercenary Ticket can only be used in Oren.");
-					return;
-				case 5:
-					activeChar.sendMessage("This Mercenary Ticket can only be used in Aden.");
-					return;
-				case 6:
-					activeChar.sendMessage("This Mercenary Ticket can only be used in Heine.");
-					return;
-				case 7:
-					activeChar.sendMessage("This Mercenary Ticket can only be used in Goddard.");
-					return;
-				case 8:
-					activeChar.sendMessage("This Mercenary Ticket can only be used in Rune.");
-					return;
-				case 9:
-					activeChar.sendMessage("This Mercenary Ticket can only be used in Schuttgart.");
-					return;
-			}
+			activeChar.sendPacket(new SystemMessage(SystemMessageId.MERCENARIES_CANNOT_BE_POSITIONED_HERE));
+			return;
 		}
 		
 		if (!activeChar.isCastleLord(castleId))
@@ -105,7 +63,7 @@ public class MercTicket implements IItemHandler
 		
 		if (castle.getSiege().getIsInProgress())
 		{
-			activeChar.sendMessage("You cannot hire mercenary while siege is in progress!");
+			activeChar.sendPacket(new SystemMessage(SystemMessageId.THIS_MERCENARY_CANNOT_BE_POSITIONED_ANYMORE));
 			return;
          }
  
@@ -113,7 +71,7 @@ public class MercTicket implements IItemHandler
         if (SevenSigns.getInstance().getCurrentPeriod() != SevenSigns.PERIOD_SEAL_VALIDATION) 
         {
         	//_log.warning("Someone has tried to spawn a guardian during Quest Event Period of The Seven Signs.");       	
-        	activeChar.sendMessage("You cannot position any Mercenaries during Quest Period.");
+        	activeChar.sendPacket(new SystemMessage(SystemMessageId.THIS_MERCENARY_CANNOT_BE_POSITIONED_ANYMORE));
         	return;
         }
         //Checking the Seal of Strife status
@@ -123,7 +81,7 @@ public class MercTicket implements IItemHandler
         		if (SevenSigns.getInstance().CheckIsDawnPostingTicket(itemId))
         		{
                 	//_log.warning("Someone has tried to spawn a Dawn Mercenary though the Seal of Strife is not controlled by anyone.");       	
-                	activeChar.sendMessage("You cannot position any Dawn Mercenaries at this time.");        		
+        			activeChar.sendPacket(new SystemMessage(SystemMessageId.THIS_MERCENARY_CANNOT_BE_POSITIONED_ANYMORE));        		
         			return;
         		}        			
         		break;
@@ -131,7 +89,7 @@ public class MercTicket implements IItemHandler
         		if (!SevenSigns.getInstance().CheckIsRookiePostingTicket(itemId))
         		{
                 	//_log.warning("Someone has tried to spawn a non-Rookie Mercenary though the Seal of Strife is controlled by Revolutionaries of Dusk.");       	
-                	activeChar.sendMessage("You can position only Rookie Mercenaries at this time.");        		
+        			activeChar.sendPacket(new SystemMessage(SystemMessageId.THIS_MERCENARY_CANNOT_BE_POSITIONED_ANYMORE));
         			return;
         		}          		
         		break;
@@ -141,13 +99,13 @@ public class MercTicket implements IItemHandler
         
         if(MercTicketManager.getInstance().isAtCasleLimit(item.getItemId()))
         {
-        	activeChar.sendMessage("You cannot hire any more mercenaries");
+        	activeChar.sendPacket(new SystemMessage(SystemMessageId.THIS_MERCENARY_CANNOT_BE_POSITIONED_ANYMORE));
 			return;
 		}
 		
 		if (MercTicketManager.getInstance().isAtTypeLimit(item.getItemId()))
 		{
-			activeChar.sendMessage("You cannot hire any more mercenaries of this type.  You may still hire other types of mercenaries");
+			activeChar.sendPacket(new SystemMessage(SystemMessageId.THIS_MERCENARY_CANNOT_BE_POSITIONED_ANYMORE));
 			return;
 		}
 		if (MercTicketManager.getInstance().isTooCloseToAnotherTicket(activeChar.getX(), activeChar.getY(), activeChar.getZ()))
@@ -156,9 +114,8 @@ public class MercTicket implements IItemHandler
 			return;
 		}
 		
-		int npcId = MercTicketManager.getInstance().addTicket(item.getItemId(), activeChar, MESSAGES);
 		activeChar.destroyItem("Consume", item.getObjectId(), 1, null, false); // Remove item from char's inventory
-		activeChar.sendMessage("Hired mercenary (" + itemId + "," + npcId + ") at coords:" + activeChar.getX() + "," + activeChar.getY() + "," + activeChar.getZ() + " heading:" + activeChar.getHeading());
+		activeChar.sendPacket(new SystemMessage(SystemMessageId.PLACE_CURRENT_LOCATION_DIRECTION).addItemName(item));
 	}
 	
 	/**
diff --git a/datapack_development/data/scripts/handlers/itemhandlers/PetFood.java b/datapack_development/data/scripts/handlers/itemhandlers/PetFood.java
index cf1290a68f00380dbe2bce187036938c28d9c058..16d9f431457747d6a08eec4e18f6924bf6ca0c4b 100644
--- a/datapack_development/data/scripts/handlers/itemhandlers/PetFood.java
+++ b/datapack_development/data/scripts/handlers/itemhandlers/PetFood.java
@@ -86,10 +86,7 @@ public class PetFood implements IItemHandler
 					((L2PetInstance)activeChar).setCurrentFed(((L2PetInstance)activeChar).getCurrentFed() + skill.getFeed());
 					((L2PetInstance)activeChar).broadcastStatusUpdate();
 					if (((L2PetInstance)activeChar).getCurrentFed() < (0.55 * ((L2PetInstance)activeChar).getPetData().getPetMaxFeed()))
-					{
-						SystemMessage sm = new SystemMessage(SystemMessageId.YOUR_PET_ATE_A_LITTLE_BUT_IS_STILL_HUNGRY);
-						((L2PetInstance)activeChar).getOwner().sendPacket(sm);
-					}
+						((L2PetInstance)activeChar).getOwner().sendPacket(new SystemMessage(SystemMessageId.YOUR_PET_ATE_A_LITTLE_BUT_IS_STILL_HUNGRY));
 					return true;
 				}
 			}
diff --git a/datapack_development/data/scripts/handlers/itemhandlers/Recipes.java b/datapack_development/data/scripts/handlers/itemhandlers/Recipes.java
index 11f27fc6b8b19774814f272ce5d4d57b8c85394a..aac86a84217c286c5d14362669eb5d87e893d219 100644
--- a/datapack_development/data/scripts/handlers/itemhandlers/Recipes.java
+++ b/datapack_development/data/scripts/handlers/itemhandlers/Recipes.java
@@ -49,10 +49,7 @@ public class Recipes implements IItemHandler
 		L2PcInstance activeChar = (L2PcInstance) playable;
 		L2RecipeList rp = RecipeController.getInstance().getRecipeByItemId(item.getItemId());
 		if (activeChar.hasRecipeList(rp.getId()))
-		{
-			SystemMessage sm = new SystemMessage(SystemMessageId.RECIPE_ALREADY_REGISTERED);
-			activeChar.sendPacket(sm);
-		}
+			activeChar.sendPacket(new SystemMessage(SystemMessageId.RECIPE_ALREADY_REGISTERED));
 		else
 		{
 			if (rp.isDwarvenRecipe())
@@ -62,8 +59,7 @@ public class Recipes implements IItemHandler
 					if (rp.getLevel() > activeChar.getDwarvenCraft())
 					{
 						//can't add recipe, becouse create item level too low
-						SystemMessage sm = new SystemMessage(SystemMessageId.CREATE_LVL_TOO_LOW_TO_REGISTER);
-						activeChar.sendPacket(sm);
+						activeChar.sendPacket(new SystemMessage(SystemMessageId.CREATE_LVL_TOO_LOW_TO_REGISTER));
 					}
 					else if (activeChar.getDwarvenRecipeBook().length >= activeChar.getDwarfRecipeLimit())
 					{
@@ -76,14 +72,11 @@ public class Recipes implements IItemHandler
 					{
 						activeChar.registerDwarvenRecipeList(rp, true);
 						activeChar.destroyItem("Consume", item.getObjectId(), 1, null, false);
-						activeChar.sendMessage("Added recipe \"" + rp.getRecipeName() + "\" to Dwarven RecipeBook");
+						activeChar.sendPacket(new SystemMessage(SystemMessageId.S1_ADDED).addItemName(item));
 					}
 				}
 				else
-				{
-					SystemMessage sm = new SystemMessage(SystemMessageId.CANT_REGISTER_NO_ABILITY_TO_CRAFT);
-					activeChar.sendPacket(sm);
-				}
+					activeChar.sendPacket(new SystemMessage(SystemMessageId.CANT_REGISTER_NO_ABILITY_TO_CRAFT));
 			}
 			else
 			{
@@ -92,8 +85,7 @@ public class Recipes implements IItemHandler
 					if (rp.getLevel() > activeChar.getCommonCraft())
 					{
 						//can't add recipe, becouse create item level too low
-						SystemMessage sm = new SystemMessage(SystemMessageId.CREATE_LVL_TOO_LOW_TO_REGISTER);
-						activeChar.sendPacket(sm);
+						activeChar.sendPacket(new SystemMessage(SystemMessageId.CREATE_LVL_TOO_LOW_TO_REGISTER));
 					}
 					else if (activeChar.getCommonRecipeBook().length >= activeChar.getCommonRecipeLimit())
 					{
@@ -106,14 +98,11 @@ public class Recipes implements IItemHandler
 					{
 						activeChar.registerCommonRecipeList(rp, true);
 						activeChar.destroyItem("Consume", item.getObjectId(), 1, null, false);
-						activeChar.sendMessage("Added recipe \"" + rp.getRecipeName() + "\" to Common RecipeBook");
+						activeChar.sendPacket(new SystemMessage(SystemMessageId.S1_ADDED).addItemName(item));
 					}
 				}
 				else
-				{
-					SystemMessage sm = new SystemMessage(SystemMessageId.CANT_REGISTER_NO_ABILITY_TO_CRAFT);
-					activeChar.sendPacket(sm);
-				}
+					activeChar.sendPacket(new SystemMessage(SystemMessageId.CANT_REGISTER_NO_ABILITY_TO_CRAFT));
 			}
 		}
 	}
diff --git a/datapack_development/data/scripts/handlers/itemhandlers/Remedy.java b/datapack_development/data/scripts/handlers/itemhandlers/Remedy.java
index dec8003bfe8a67c359849d914adc16ca989479b4..3af7bd0630f5d90757dd2c737b71926e27613fa1 100644
--- a/datapack_development/data/scripts/handlers/itemhandlers/Remedy.java
+++ b/datapack_development/data/scripts/handlers/itemhandlers/Remedy.java
@@ -74,7 +74,6 @@ public class Remedy implements IItemHandler
 					}
 				}
 				MagicSkillUse MSU = new MagicSkillUse(playable, playable, 2042, 1, 0, 0);
-				activeChar.sendPacket(MSU);
 				activeChar.broadcastPacket(MSU);
 				playable.destroyItem("Consume", item.getObjectId(), 1, null, false);
 				break;
@@ -91,7 +90,6 @@ public class Remedy implements IItemHandler
 					}
 				}
 				MagicSkillUse MSU = new MagicSkillUse(playable, playable, 2043, 1, 0, 0);
-				activeChar.sendPacket(MSU);
 				activeChar.broadcastPacket(MSU);
 				playable.destroyItem("Consume", item.getObjectId(), 1, null, false);
 				break;
@@ -108,7 +106,6 @@ public class Remedy implements IItemHandler
 					}
 				}
 				MagicSkillUse MSU = new MagicSkillUse(playable, playable, 34, 1, 0, 0);
-				activeChar.sendPacket(MSU);
 				activeChar.broadcastPacket(MSU);
 				playable.destroyItem("Consume", item.getObjectId(), 1, null, false);
 				break;
@@ -125,7 +122,6 @@ public class Remedy implements IItemHandler
 					}
 				}
 				MagicSkillUse MSU = new MagicSkillUse(playable, playable, 2045, 1, 0, 0);
-				activeChar.sendPacket(MSU);
 				activeChar.broadcastPacket(MSU);
 				playable.destroyItem("Consume", item.getObjectId(), 1, null, false);
 				break;
@@ -142,7 +138,6 @@ public class Remedy implements IItemHandler
 				if (activeChar.getFirstEffect(L2EffectType.ROOT) == null)
 					activeChar.stopRooting(null);
 				MagicSkillUse MSU = new MagicSkillUse(playable, playable, 2042, 1, 0, 0);
-				activeChar.sendPacket(MSU);
 				activeChar.broadcastPacket(MSU);
 				playable.destroyItem("Consume", item.getObjectId(), 1, null, false);
 				break;
diff --git a/datapack_development/data/scripts/handlers/itemhandlers/RollingDice.java b/datapack_development/data/scripts/handlers/itemhandlers/RollingDice.java
index d913188b862b101c5c3263baeb45977a5f7620e5..c8155530872e026f66550aca87598980049e2ffe 100644
--- a/datapack_development/data/scripts/handlers/itemhandlers/RollingDice.java
+++ b/datapack_development/data/scripts/handlers/itemhandlers/RollingDice.java
@@ -65,8 +65,7 @@ public class RollingDice implements IItemHandler
 				return;
 			}
 
-			Dice d = new Dice(activeChar.getObjectId(), item.getItemId(), number, activeChar.getX() - 30, activeChar.getY() - 30, activeChar.getZ());
-			Broadcast.toSelfAndKnownPlayers(activeChar, d);
+			Broadcast.toSelfAndKnownPlayers(activeChar, new Dice(activeChar.getObjectId(), item.getItemId(), number, activeChar.getX() - 30, activeChar.getY() - 30, activeChar.getZ()));
 			
 			SystemMessage sm = new SystemMessage(SystemMessageId.C1_ROLLED_S2);
 			sm.addString(activeChar.getName());
diff --git a/datapack_development/data/scripts/handlers/itemhandlers/ScrollOfEscape.java b/datapack_development/data/scripts/handlers/itemhandlers/ScrollOfEscape.java
deleted file mode 100644
index 4dd7d545f0b3b91cf61e815e797bd4da915fbdb3..0000000000000000000000000000000000000000
--- a/datapack_development/data/scripts/handlers/itemhandlers/ScrollOfEscape.java
+++ /dev/null
@@ -1,297 +0,0 @@
-/*
- * This program is free software: you can redistribute it and/or modify it under
- * the terms of the GNU General Public License as published by the Free Software
- * Foundation, either version 3 of the License, or (at your option) any later
- * version.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
- * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
- * details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program. If not, see <http://www.gnu.org/licenses/>.
- */
-package handlers.itemhandlers;
-
-import net.sf.l2j.gameserver.datatables.SkillTable;
-import net.sf.l2j.gameserver.handler.IItemHandler;
-import net.sf.l2j.gameserver.instancemanager.CastleManager;
-import net.sf.l2j.gameserver.instancemanager.ClanHallManager;
-import net.sf.l2j.gameserver.instancemanager.FortManager;
-import net.sf.l2j.gameserver.instancemanager.GrandBossManager;
-import net.sf.l2j.gameserver.model.L2ItemInstance;
-import net.sf.l2j.gameserver.model.L2Skill;
-import net.sf.l2j.gameserver.model.actor.L2Playable;
-import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
-import net.sf.l2j.gameserver.model.entity.TvTEvent;
-import net.sf.l2j.gameserver.network.SystemMessageId;
-import net.sf.l2j.gameserver.network.serverpackets.ActionFailed;
-import net.sf.l2j.gameserver.network.serverpackets.SystemMessage;
-
-/**
- * This class ...
- *
- * @version $Revision: 1.2.2.3.2.5 $ $Date: 2005/03/27 15:30:07 $
- */
-
-public class ScrollOfEscape implements IItemHandler
-{
-	// all the items IDs that this handler knows
-	private static final int[] ITEM_IDS =
-	{
-		 736, 1538, 1829, 1830, 3958, 5858,
-		5859, 7117, 7118, 7119,
-		7120, 7121, 7122, 7123, 7124, 7125,
-		7126, 7127,	7128, 7129, 7130, 7131,
-		7132, 7133,	7134, 7135, 7554, 7555,
-		7556, 7557,	7558, 7559, 7618, 7619,
-		9156, 9647, 9716, 10129, 10130, 10650,
-		10149, 13129, 13258, 13395, 13396, 13397,
-		13398, 13399, 13400, 13401, 13402, 13403, 
-		13404, 13405, 13406, 13407, 13408, 13409,
-		13410, 13411, 13412, 13413, 13414, 13731,
-		13732, 13733, 13734, 13735, 13736, 13737,
-		13738, 13739, 20372, 20373, 20374, 20375,
-		20376, 20377, 20378, 20379, 20380, 20381,
-		20382, 20383, 20384, 20385, 20386, 20387,
-		20388, 20389, 20390
-	};
-	
-	/**
-	 * 
-	 * @see net.sf.l2j.gameserver.handler.IItemHandler#useItem(net.sf.l2j.gameserver.model.actor.L2Playable, net.sf.l2j.gameserver.model.L2ItemInstance)
-	 */
-	public void useItem(L2Playable playable, L2ItemInstance item)
-	{
-		if (!(playable instanceof L2PcInstance))
-			return;
-		L2PcInstance activeChar = (L2PcInstance) playable;
-		
-		activeChar.sendPacket(ActionFailed.STATIC_PACKET);
-		
-		// Thanks nbd
-		if (!TvTEvent.onEscapeUse(activeChar.getObjectId()))
-			
-			return;
-		
-		if (GrandBossManager.getInstance().getZone(activeChar) != null && !activeChar.isGM())
-		{
-			activeChar.sendPacket(new SystemMessage(SystemMessageId.YOU_MAY_NOT_SUMMON_FROM_YOUR_CURRENT_LOCATION));
-			return;
-		}
-		
-		if (activeChar.isInOlympiadMode())
-		{
-			activeChar.sendPacket(new SystemMessage(SystemMessageId.THIS_ITEM_IS_NOT_AVAILABLE_FOR_THE_OLYMPIAD_EVENT));
-			return;
-		}
-		
-		// Check to see if the player is in a festival.
-		if (activeChar.isFestivalParticipant())
-		{
-			activeChar.sendPacket(new SystemMessage(SystemMessageId.YOU_MAY_NOT_SUMMON_FROM_YOUR_CURRENT_LOCATION));
-			return;
-		}
-		
-		// Check to see if player is in jail
-		if (activeChar.isInJail())
-		{
-			activeChar.sendMessage("You can not escape from jail.");
-			return;
-		}
-		// Check to see if player is in a duel
-		if (activeChar.isInDuel())
-		{
-			activeChar.sendMessage("You cannot use escape skills during a duel.");
-			return;
-		}
-		
-		// TODO: unhardcode me
-		// blessed scrolls don't do anything if hideout target it is null
-		boolean ret = false;
-		switch(item.getItemId())
-		{
-			case 5859:
-				if (activeChar.getClan() != null && CastleManager.getInstance().getCastleByOwner(activeChar.getClan()) == null)
-					ret = true;
-				break;
-			case 10130:
-				if (activeChar.getClan() != null && FortManager.getInstance().getFortByOwner(activeChar.getClan()) == null)
-					ret = true;
-				break;
-			case 5858:
-				if (activeChar.getClan() != null && ClanHallManager.getInstance().getClanHallByOwner(activeChar.getClan()) == null)
-					ret = true;
-				break;
-		}		
-		if (ret)
-		{
-			SystemMessage sm = new SystemMessage(SystemMessageId.S1_CANNOT_BE_USED);
-			sm.addItemName(item);
-			activeChar.sendPacket(sm);
-			return;
-		}
-		
-		int itemId = item.getItemId();
-		switch (itemId)
-		{
-			case 736: // Scroll of Escape
-				useSkill(activeChar,2013,1);
-				break;
-			case 1538: // Blessed Scroll of Escape
-				useSkill(activeChar,2036,1);
-				break;
-			case 1829: // Scroll of Escape: Clan Hall
-				useSkill(activeChar,2040,1);
-				break;
-			case 1830: // Scroll of Escape: Castle
-				useSkill(activeChar,2041,1);
-				break;
-			case 3958: // L2Day - Blessed Escape Effect
-				useSkill(activeChar,2036,2);
-				break;
-			case 5858: // Blessed Scroll of Escape: Clan Hall
-				useSkill(activeChar,2177,1);
-				break;
-			case 5859: // Blessed Scroll of Escape: Castle
-				useSkill(activeChar,2178,1);
-				break;
-			case 7117: // Scroll of Escape: Talking Island
-			case 7118: // Scroll of Escape: Elven Village
-			case 7119: // Scroll of Escape: Dark Elf Village
-			case 7120: // Scroll of Escape: Orc Village
-			case 7121: // Scroll of Escape: Dwarven Village
-			case 7122: // Scroll of Escape: Gludin Village
-			case 7123: // Scroll of Escape: Town of Gludio
-			case 7124: // Scroll of Escape: Town of Dion
-			case 7125: // Scroll of Escape: Floran
-			case 7126: // Scroll of Escape: Giran Castle Town
-			case 7127: // Scroll of Escape: Hardin's Private Academy
-			case 7128: // Scroll of Escape: Heine
-			case 7129: // Scroll of Escape: Town of Oren
-			case 7130: // Scroll of Escape: Ivory Tower
-			case 7131: // Scroll of Escape: Hunters Village
-			case 7132: // Scroll of Escape: Aden Castle Town
-			case 7133: // Scroll of Escape: Town of Goddard
-			case 7134: // Scroll of Escape: Rune Township
-			case 7135: // Scroll of Escape: Town of Schuttgart
-				useSkill(activeChar,2213,itemId-7116);
-				break;
-			case 7554: // Scroll of Escape: Talking Island
-			case 7555: // Scroll of Escape: Elven Village
-			case 7556: // Scroll of Escape: Dark Elf Village
-			case 7557: // Scroll of Escape: Orc Village
-			case 7558: // Scroll of Escape: Dwarven Village
-				useSkill(activeChar,2214,itemId-7553);
-				break;
-			case 7559: // Scroll of Escape: Giran Castle Town
-				useSkill(activeChar,2214,10);
-				break;
-			case 7618: // Scroll of Escape: Ketra Orc Village
-				useSkill(activeChar,2213,20);
-				break;
-			case 7619: // Scroll of Escape: Varka Silenos Village
-				useSkill(activeChar,2213,21);
-				break;
-			case 9156: // Blessed Scroll of Escape (Event)
-				useSkill(activeChar,2320,1);
-				break;
-			case 9647: // Scroll of Escape: Kamael Village
-				useSkill(activeChar,2213,22);
-				break;
-			case 9716: // Scroll of Escape: Kamael Village
-				useSkill(activeChar,2214,6);
-				break;
-			case 10129: // Scroll of Escape: Fortress
-				useSkill(activeChar,2365,1);
-				break;
-			case 10130: // Blessed Scroll of Escape: Fortress
-				useSkill(activeChar,2364,1);
-				break;
-			case 10149: // Battleground Blessed Scroll of Escape
-				useSkill(activeChar,2392,1);
-				break;
-			case 10650: // Adventurer's Scroll of Escape
-				useSkill(activeChar,2531,1);
-				break;
-			case 13129: // Pailaka Scroll of Escape
-				useSkill(activeChar,2594,1);
-				break;
-			case 13258: // Gran Kain's Blessed Scroll of Escape
-				useSkill(activeChar,2595,1);
-				break;
-			case 13395: // Escape - Talking Island Village
-			case 13396: // Escape - Elven Village
-			case 13397: // Escape - Dark Elven Village
-			case 13398: // Escape - Orc Village
-			case 13399: // Escape - Dwarven Village
-			case 13400: // Escape - Gludin Village
-			case 13401: // Escape - Town of Gludio
-			case 13402: // Escape - Town of Dion
-			case 13403: // Escape - Floran Village
-			case 13404: // Escape - Giran Castle Town
-			case 13405: // Escape - Hardin's Academy
-			case 13406: // Escape - Heine
-			case 13407: // Escape - Town of Oren
-			case 13408: // Escape - Ivory Tower
-			case 13409: // Escape - Hunters Village
-			case 13410: // Escape - Town of Aden
-			case 13411: // Escape - Town of Goddard
-			case 13412: // Escape - Rune Township
-			case 13413: // Escape - Town of Schuttgart
-			case 13414: // Escape - Kamael Village
-				useSkill(activeChar,2609,itemId-13394);
-				break;
-			case 13731: // Gludio Blessed Scroll of Escape
-			case 13732: // Dion Blessed Scroll of Escape
-			case 13733: // Giran Blessed Scroll of Escape
-			case 13734: // Oren Blessed Scroll of Escape
-			case 13735: // Aden Blessed Scroll of Escape
-			case 13736: // Innadril Blessed Scroll of Escape
-			case 13737: // Goddard Blessed Scroll of Escape
-			case 13738: // Rune Blessed Scroll of Escape
-			case 13739: // Schuttgart Blessed Scroll of Escape
-				useSkill(activeChar,2649,itemId-13730);
-				break;
-			case 20372: // Escape - Talking Island Village
-			case 20373: // Escape - Elven Village
-			case 20374: // Escape - Dark Elven Village
-			case 20375: // Escape - Orc Village
-			case 20376: // Escape - Dwarven Village
-			case 20377: // Escape - Gludin Village
-			case 20378: // Escape - Town of Gludio
-			case 20379: // Escape - Town of Dion
-			case 20380: // Escape - Floran Village
-			case 20381: // Escape - Giran Castle Town
-			case 20382: // Escape - Hardin's Academy
-			case 20383: // Escape - Heine
-			case 20384: // Escape - Town of Oren
-			case 20385: // Escape - Ivory Tower
-			case 20386: // Escape - Hunters Village
-			case 20387: // Escape - Town of Aden
-			case 20388: // Escape - Town of Goddard
-			case 20389: // Escape - Rune Township
-			case 20390: // Escape - Town of Schuttgart
-				useSkill(activeChar,22053,itemId-20371);
-				break;
-		}
-	}
-	
-	private void useSkill(L2PcInstance player, int skillId, int skillLvl)
-	{
-		L2Skill skill = SkillTable.getInstance().getInfo(skillId, skillLvl);
-		
-		if (skill != null)
-			player.useMagic(skill, false, true);
-	}
-	
-	/**
-	 * 
-	 * @see net.sf.l2j.gameserver.handler.IItemHandler#getItemIds()
-	 */
-	public int[] getItemIds()
-	{
-		return ITEM_IDS;
-	}
-}
diff --git a/datapack_development/data/scripts/handlers/itemhandlers/SevenSignsRecord.java b/datapack_development/data/scripts/handlers/itemhandlers/SevenSignsRecord.java
index abcac4973fad413c0f8b1493ecddcfa7e1006486..90523c0a76006646f2f582d29c40436f7a139a9c 100644
--- a/datapack_development/data/scripts/handlers/itemhandlers/SevenSignsRecord.java
+++ b/datapack_development/data/scripts/handlers/itemhandlers/SevenSignsRecord.java
@@ -18,7 +18,6 @@ import net.sf.l2j.gameserver.handler.IItemHandler;
 import net.sf.l2j.gameserver.model.L2ItemInstance;
 import net.sf.l2j.gameserver.model.actor.L2Playable;
 import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
-import net.sf.l2j.gameserver.model.actor.instance.L2PetInstance;
 import net.sf.l2j.gameserver.network.serverpackets.SSQStatus;
 
 /**
@@ -39,17 +38,10 @@ public class SevenSignsRecord implements IItemHandler
 	 */
 	public void useItem(L2Playable playable, L2ItemInstance item)
 	{
-		L2PcInstance activeChar;
-		
-		if (playable instanceof L2PcInstance)
-			activeChar = (L2PcInstance) playable;
-		else if (playable instanceof L2PetInstance)
-			activeChar = ((L2PetInstance) playable).getOwner();
-		else
+		if (!(playable instanceof L2PcInstance))
 			return;
 		
-		SSQStatus ssqs = new SSQStatus(activeChar, 1);
-		activeChar.sendPacket(ssqs);
+		playable.sendPacket(new SSQStatus((L2PcInstance) playable, 1));
 	}
 	
 	/**
diff --git a/datapack_development/data/scripts/handlers/itemhandlers/SoulCrystals.java b/datapack_development/data/scripts/handlers/itemhandlers/SoulCrystals.java
index 3ec771ce4551e54c54f4eca706d3b0597284da96..b5c48294aaf46283b5ce1d4ccab83ca6c32399c3 100644
--- a/datapack_development/data/scripts/handlers/itemhandlers/SoulCrystals.java
+++ b/datapack_development/data/scripts/handlers/itemhandlers/SoulCrystals.java
@@ -96,6 +96,7 @@ public class SoulCrystals implements IItemHandler
 		
 	}
 	
+	// TODO: this should be inside skill handler
 	static class CrystalFinalizer implements Runnable
 	{
 		private L2PcInstance _activeChar;
diff --git a/datapack_development/data/scripts/handlers/itemhandlers/SpecialXMas.java b/datapack_development/data/scripts/handlers/itemhandlers/SpecialXMas.java
index 65f59aa81c4f389037d6419b29b10ba24208bc01..b85a492cb8ce9b8db5160a48a920cbf5d6f5ab60 100644
--- a/datapack_development/data/scripts/handlers/itemhandlers/SpecialXMas.java
+++ b/datapack_development/data/scripts/handlers/itemhandlers/SpecialXMas.java
@@ -39,14 +39,8 @@ public class SpecialXMas implements IItemHandler
 	{
 		if (!(playable instanceof L2PcInstance))
 			return;
-		L2PcInstance activeChar = (L2PcInstance) playable;
-		int itemId = item.getItemId();
 		
-		if (itemId == 5555) // Token of Love
-		{
-			ShowXMasSeal SXS = new ShowXMasSeal(5555);
-			activeChar.broadcastPacket(SXS);
-		}
+		playable.broadcastPacket(new ShowXMasSeal(item.getItemId()));
 	}
 	
 	/**
diff --git a/datapack_development/data/scripts/handlers/itemhandlers/SummonItems.java b/datapack_development/data/scripts/handlers/itemhandlers/SummonItems.java
index a3a82bed1938d18bccaac777535f6f3ad9676860..6ce8a28d462510ef7e98bc37f0acb9856e20c225 100644
--- a/datapack_development/data/scripts/handlers/itemhandlers/SummonItems.java
+++ b/datapack_development/data/scripts/handlers/itemhandlers/SummonItems.java
@@ -187,6 +187,7 @@ public class SummonItems implements IItemHandler
 		}
 	}
 	
+	// TODO: this should be inside skill handler
 	static class PetSummonFinalizer implements Runnable
 	{
 		private L2PcInstance _activeChar;
diff --git a/datapack_development/data/scripts/handlers/itemhandlers/TeleportBookmark.java b/datapack_development/data/scripts/handlers/itemhandlers/TeleportBookmark.java
index b096ed4aa9fcd14d671d0790d27fd7b0c1c945f4..57eb0801cba4ce724393f04d53e165bc5d2aedca 100644
--- a/datapack_development/data/scripts/handlers/itemhandlers/TeleportBookmark.java
+++ b/datapack_development/data/scripts/handlers/itemhandlers/TeleportBookmark.java
@@ -39,27 +39,24 @@ public class TeleportBookmark implements IItemHandler
 	{
 		if (playable == null || item == null || !(playable instanceof L2PcInstance))
 			return;
-			
+		
 		L2PcInstance player = (L2PcInstance) playable;
 		
 		if(player.getBookMarkSlot() >= 9)
 		{
-      player.sendPacket(new SystemMessage(2390));
-      return;
+			player.sendPacket(new SystemMessage(SystemMessageId.YOUR_NUMBER_OF_MY_TELEPORTS_SLOTS_HAS_REACHED_ITS_MAXIMUM_LIMIT));
+			return;
 		}
 		
 		player.destroyItem("Consume", item.getObjectId(), 1, null, false);
 		
-    player.setBookMarkSlot(player.getBookMarkSlot()+3);
-    
-    player.sendPacket(new SystemMessage(2409));
-    
-    SystemMessage sm = new SystemMessage(SystemMessageId.S1_DISAPPEARED);
-    sm.addItemName(13015);
-    player.sendPacket(sm);
-
+		player.setBookMarkSlot(player.getBookMarkSlot()+3);
+		player.sendPacket(new SystemMessage(SystemMessageId.THE_NUMBER_OF_MY_TELEPORTS_SLOTS_HAS_BEEN_INCREASED));
+		
+		SystemMessage sm = new SystemMessage(SystemMessageId.S1_DISAPPEARED);
+		sm.addItemName(item.getItemId());
+		player.sendPacket(sm);
 	}
-	
 
 	public int[] getItemIds()
 	{
diff --git a/datapack_development/data/scripts/handlers/skillhandlers/Recall.java b/datapack_development/data/scripts/handlers/skillhandlers/Recall.java
index 40bc8b9200c51fa51e855fffd9290376d2210e83..e32c159f1f4c8dd1b9487edc09fd3dc6867e5d15 100644
--- a/datapack_development/data/scripts/handlers/skillhandlers/Recall.java
+++ b/datapack_development/data/scripts/handlers/skillhandlers/Recall.java
@@ -18,6 +18,7 @@ import java.util.logging.Level;
 
 import net.sf.l2j.gameserver.datatables.MapRegionTable;
 import net.sf.l2j.gameserver.handler.ISkillHandler;
+import net.sf.l2j.gameserver.instancemanager.GrandBossManager;
 import net.sf.l2j.gameserver.model.L2Object;
 import net.sf.l2j.gameserver.model.L2Skill;
 import net.sf.l2j.gameserver.model.actor.L2Character;
@@ -56,6 +57,12 @@ public class Recall implements ISkillHandler
 				((L2PcInstance) activeChar).sendPacket(new SystemMessage(SystemMessageId.THIS_ITEM_IS_NOT_AVAILABLE_FOR_THE_OLYMPIAD_EVENT));
 				return;
 			}
+			
+			if (GrandBossManager.getInstance().getZone(activeChar) != null && !activeChar.isGM())
+			{
+				activeChar.sendPacket(new SystemMessage(SystemMessageId.YOU_MAY_NOT_SUMMON_FROM_YOUR_CURRENT_LOCATION));
+				return;
+			}
 		}
 		
 		try
diff --git a/datapack_development/data/scripts/handlers/skillhandlers/Resurrect.java b/datapack_development/data/scripts/handlers/skillhandlers/Resurrect.java
index 2b0f1dc9ae218285c3bfaeff650e7515a0fa3e25..ae97174c1215a429feac408260daf44b1741470a 100644
--- a/datapack_development/data/scripts/handlers/skillhandlers/Resurrect.java
+++ b/datapack_development/data/scripts/handlers/skillhandlers/Resurrect.java
@@ -74,7 +74,7 @@ public class Resurrect implements ISkillHandler
 		if (targetToRes.isEmpty())
 		{
 			activeChar.abortCast();
-			activeChar.sendMessage("No valid target to resurrect");
+			return;
 		}
 		
 		for (L2Character cha : targetToRes)
diff --git a/datapack_development/data/stats/skills/2100-2199.xml b/datapack_development/data/stats/skills/2100-2199.xml
index eecf4e153b59b37a9de342f544770a50503ab9ef..40940bbf4fea494fbf77fcbe5f82d45ffcdc7901 100644
--- a/datapack_development/data/stats/skills/2100-2199.xml
+++ b/datapack_development/data/stats/skills/2100-2199.xml
@@ -795,6 +795,9 @@
   <set name="skillType" val="RECALL"/>
   <set name="recallType" val="ClanHall"/>
   <set name="operateType" val="OP_ACTIVE"/>
+  <cond msgId="113" addName="1">
+    <player clanHall="-1"/>
+  </cond>
 </skill>
 <skill id="2178" levels="1" name="Blessed Scroll of Escape: Castle">
   <set name="itemConsumeId" val="5859"/>
@@ -805,6 +808,9 @@
   <set name="skillType" val="RECALL"/>
   <set name="recallType" val="Castle"/>
   <set name="operateType" val="OP_ACTIVE"/>
+  <cond msgId="113" addName="1">
+    <player castle="-1"/>
+  </cond>
 </skill>
 <skill id="2179" levels="1" name="Blessed Scroll of Resurrection: Pet">
   <set name="power" val="100"/>
diff --git a/datapack_development/data/stats/skills/2200-2299.xml b/datapack_development/data/stats/skills/2200-2299.xml
index da5b5beb9d5c680446bd727787a445d2a93c900b..295a5093ef97ce71be290e400b2f71295f2dc440 100644
--- a/datapack_development/data/stats/skills/2200-2299.xml
+++ b/datapack_development/data/stats/skills/2200-2299.xml
@@ -386,6 +386,9 @@
   <set name="itemConsumeCount" val="1"/>
   <set name="castRange" val="40"/>
   <set name="effectRange" val="400"/>
+  <cond msgId="109" >
+    <target npcType="L2Chest"/>
+  </cond>
 </skill>
 <skill id="2230" levels="1" name="Item - Theme Sound Crystal">
   <set name="itemConsumeId" val="7062"/>
diff --git a/datapack_development/data/stats/skills/2300-2399.xml b/datapack_development/data/stats/skills/2300-2399.xml
index 0d5baf6847fc123dd37b5835873a7a606be8b2b8..0a6a9f5c741e0aa6071f284af5dd9f875b29bf52 100644
--- a/datapack_development/data/stats/skills/2300-2399.xml
+++ b/datapack_development/data/stats/skills/2300-2399.xml
@@ -650,6 +650,9 @@
   <set name="skillType" val="RECALL"/>
   <set name="recallType" val="Fortress"/>
   <set name="operateType" val="OP_ACTIVE"/>
+  <cond msgId="113" addName="1">
+    <player fort="-1"/>
+  </cond>
 </skill>
 <skill id="2365" levels="1" name="Scroll of Fortress Return">
   <set name="itemConsumeId" val="10129"/>
diff --git a/datapack_development/sql/etcitem.sql b/datapack_development/sql/etcitem.sql
index 6e077f82700d1b9bae22b6c0f58f36ed85c4ed77..13324c39e34e591be1335e2619008de0b9496077 100644
--- a/datapack_development/sql/etcitem.sql
+++ b/datapack_development/sql/etcitem.sql
@@ -4980,14 +4980,14 @@ INSERT INTO `etcitem` VALUES
 (6655,'Scroll: Slay Valakas','false','scroll',10,'stackable','paper','none',-1,-1,0,0,'true','true','true','true','2232-1;','false'),
 (6663,'Scroll of Escape: Orc Village','false','scroll',120,'stackable','paper','none',-1,-1,400,0,'true','true','true','true','0-0;','false'),
 (6664,'Scroll of Escape: Silenos Village','false','scroll',120,'stackable','paper','none',-1,-1,400,0,'true','true','true','true','0-0;','false'),
-(6665,'Deluxe Chest Key - Grade 1','false','none',10,'stackable','steel','none',-1,-1,0,0,'true','true','true','true','0-0;','false'),
-(6666,'Deluxe Chest Key - Grade 2','false','none',10,'stackable','steel','none',-1,-1,200,0,'true','true','true','true','0-0;','false'),
-(6667,'Deluxe Chest Key - Grade 3','false','none',10,'stackable','steel','none',-1,-1,320,0,'true','true','true','true','0-0;','false'),
-(6668,'Deluxe Chest Key - Grade 4','false','none',10,'stackable','steel','none',-1,-1,560,0,'true','true','true','true','0-0;','false'),
-(6669,'Deluxe Chest Key - Grade 5','false','none',10,'stackable','steel','none',-1,-1,860,0,'true','true','true','true','0-0;','false'),
-(6670,'Deluxe Chest Key - Grade 6','false','none',10,'stackable','steel','none',-1,-1,1200,0,'true','true','true','true','0-0;','false'),
-(6671,'Deluxe Chest Key - Grade 7','false','none',10,'stackable','steel','none',-1,-1,1800,0,'true','true','true','true','0-0;','false'),
-(6672,'Deluxe Chest Key - Grade 8','false','none',10,'stackable','steel','none',-1,-1,2400,0,'true','true','true','true','0-0;','false'),
+(6665,'Deluxe Chest Key - Grade 1','false','none',10,'stackable','steel','none',-1,-1,0,0,'true','true','true','true','2229-1;','false'),
+(6666,'Deluxe Chest Key - Grade 2','false','none',10,'stackable','steel','none',-1,-1,200,0,'true','true','true','true','2229-2;','false'),
+(6667,'Deluxe Chest Key - Grade 3','false','none',10,'stackable','steel','none',-1,-1,320,0,'true','true','true','true','2229-3;','false'),
+(6668,'Deluxe Chest Key - Grade 4','false','none',10,'stackable','steel','none',-1,-1,560,0,'true','true','true','true','2229-4;','false'),
+(6669,'Deluxe Chest Key - Grade 5','false','none',10,'stackable','steel','none',-1,-1,860,0,'true','true','true','true','2229-5;','false'),
+(6670,'Deluxe Chest Key - Grade 6','false','none',10,'stackable','steel','none',-1,-1,1200,0,'true','true','true','true','2229-6;','false'),
+(6671,'Deluxe Chest Key - Grade 7','false','none',10,'stackable','steel','none',-1,-1,1800,0,'true','true','true','true','2229-7;','false'),
+(6672,'Deluxe Chest Key - Grade 8','false','none',10,'stackable','steel','none',-1,-1,2400,0,'true','true','true','true','2229-8;','false'),
 (6673,'Festival Adena','false','none',0,'stackable','steel','none',-1,-1,0,0,'false','false','true','false','0-0;','false'),
 (6688,'Forgotten Blade Edge','false','material',60,'stackable','liquid','none',-1,-1,92529,0,'true','true','true','true','0-0;','false'),
 (6689,'Basalt Battlehammer Head','false','material',60,'stackable','liquid','none',-1,-1,94306,0,'true','true','true','true','0-0;','false'),
@@ -6203,7 +6203,7 @@ INSERT INTO `etcitem` VALUES
 (8057,'Silver Hemocyte','false','none',0,'stackable','steel','none',-1,-1,0,0,'true','true','true','true','0-0;','false'),
 (8058,'Lockup Research Report','false','quest',0,'stackable','paper','none',-1,-1,0,0,'true','true','true','true','0-0;','false'),
 (8059,'Research Report','false','none',0,'stackable','paper','none',-1,-1,0,0,'true','true','true','true','0-0;','true'),
-(8060,'Key of Enigma','false','none',0,'stackable','paper','none',-1,-1,0,0,'true','true','true','true','0-0;','false'),
+(8060,'Key of Enigma','false','none',0,'stackable','paper','none',-1,-1,0,0,'true','true','true','true','2260-1;','false'),
 (8061,'Scribbled Memo','false','quest',0,'stackable','paper','none',-1,-1,0,0,'true','true','true','true','0-0;','false'),
 (8062,'Blood of Maille Lizardman','false','quest',0,'stackable','paper','none',-1,-1,0,0,'true','true','true','true','0-0;','false'),
 (8063,'Leg of King Araneid','false','quest',0,'stackable','paper','none',-1,-1,0,0,'true','true','true','true','0-0;','false'),