diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/BeastSoulShot.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/BeastSoulShot.java
index 46f7e0b4b9f8a8f98d63767b14054b0a18cf8efa..a1262e469a6745852a4f9626089af4ce8a7a57ed 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/BeastSoulShot.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/BeastSoulShot.java
@@ -14,11 +14,13 @@
  */
 package handlers.itemhandlers;
 
+import java.util.logging.Level;
+
 import com.l2jserver.gameserver.handler.IItemHandler;
 import com.l2jserver.gameserver.model.actor.L2Playable;
 import com.l2jserver.gameserver.model.actor.L2Summon;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
-import com.l2jserver.gameserver.model.actor.instance.L2PetInstance;
+import com.l2jserver.gameserver.model.holders.SkillHolder;
 import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
 import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.serverpackets.MagicSkillUse;
@@ -33,21 +35,19 @@ public class BeastSoulShot implements IItemHandler
 	@Override
 	public boolean useItem(L2Playable playable, L2ItemInstance item, boolean forceUse)
 	{
-		if (playable == null)
+		if (!playable.isPlayer())
+		{
+			playable.sendPacket(SystemMessageId.ITEM_NOT_FOR_PETS);
 			return false;
+		}
 		
-		L2PcInstance activeOwner = null;
-		if (playable instanceof L2Summon)
+		L2PcInstance activeOwner = playable.getActingPlayer();
+		if (!playable.isPlayer())
 		{
-			activeOwner = ((L2Summon) playable).getOwner();
-			activeOwner.sendPacket(SystemMessageId.PET_CANNOT_USE_ITEM);
+			playable.sendPacket(SystemMessageId.PET_CANNOT_USE_ITEM);
 			return false;
 		}
-		else if (playable instanceof L2PcInstance)
-			activeOwner = (L2PcInstance) playable;
 		
-		if (activeOwner == null)
-			return false;
 		L2Summon activePet = activeOwner.getPet();
 		
 		if (activePet == null)
@@ -62,9 +62,16 @@ public class BeastSoulShot implements IItemHandler
 			return false;
 		}
 		
-		int itemId = item.getItemId();
-		short shotConsumption = activePet.getSoulShotsPerHit();
-		long shotCount = item.getCount();
+		final int itemId = item.getItemId();
+		final short shotConsumption = activePet.getSoulShotsPerHit();
+		final long shotCount = item.getCount();
+		final SkillHolder[] skills = item.getItem().getSkills();
+		
+		if (skills == null)
+		{
+			_log.log(Level.WARNING, getClass().getSimpleName() + ": is missing skills!");
+			return false;
+		}
 		
 		if (!(shotCount > shotConsumption))
 		{
@@ -74,23 +81,21 @@ public class BeastSoulShot implements IItemHandler
 			return false;
 		}
 		
-		L2ItemInstance weaponInst = null;
-		
-		if (activePet instanceof L2PetInstance)
-			weaponInst = ((L2PetInstance) activePet).getActiveWeaponInstance();
+		L2ItemInstance weaponInst = activePet.getActiveWeaponInstance();
 		
 		if (weaponInst == null)
 		{
-			if (activePet.getChargedSoulShot() != L2ItemInstance.CHARGED_NONE)
+			if (activePet.getChargedSoulShot() != L2ItemInstance.CHARGED_NONE) // SoulShots are already active.
+			{
 				return false;
+			}
 			
 			activePet.setChargedSoulShot(L2ItemInstance.CHARGED_SOULSHOT);
 		}
 		else
 		{
-			if (weaponInst.getChargedSoulshot() != L2ItemInstance.CHARGED_NONE)
-			{
-				// SoulShots are already active.
+			if (weaponInst.getChargedSoulshot() != L2ItemInstance.CHARGED_NONE) // SoulShots are already active.
+			{	
 				return false;
 			}
 			weaponInst.setChargedSoulshot(L2ItemInstance.CHARGED_SOULSHOT);
@@ -107,7 +112,7 @@ public class BeastSoulShot implements IItemHandler
 		// Pet uses the power of spirit.
 		activeOwner.sendPacket(SystemMessageId.PET_USE_SPIRITSHOT);
 		
-		Broadcast.toSelfAndKnownPlayersInRadius(activeOwner, new MagicSkillUse(activePet, activePet, itemId == 6645 ? 2033 : 22036, 1, 0, 0), 360000/*600*/);
+		Broadcast.toSelfAndKnownPlayersInRadius(activeOwner, new MagicSkillUse(activePet, activePet, skills[0].getSkillId(), skills[0].getSkillLvl(), 0, 0), 2000);
 		return true;
 	}
 }
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/BeastSpice.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/BeastSpice.java
index 95441b08cbf5e73da345623bef0c1e717015733f..522f72329b1d83db3c9d6079558a3b06733b3b77 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/BeastSpice.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/BeastSpice.java
@@ -14,13 +14,14 @@
  */
 package handlers.itemhandlers;
 
-import com.l2jserver.gameserver.datatables.SkillTable;
+import java.util.logging.Level;
+
 import com.l2jserver.gameserver.handler.IItemHandler;
 import com.l2jserver.gameserver.model.actor.L2Playable;
 import com.l2jserver.gameserver.model.actor.instance.L2FeedableBeastInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jserver.gameserver.model.holders.SkillHolder;
 import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
-import com.l2jserver.gameserver.model.skills.L2Skill;
 import com.l2jserver.gameserver.network.SystemMessageId;
 
 public class BeastSpice implements IItemHandler
@@ -28,10 +29,20 @@ public class BeastSpice implements IItemHandler
 	@Override
 	public boolean useItem(L2Playable playable, L2ItemInstance item, boolean forceUse)
 	{
-		if (!(playable instanceof L2PcInstance))
+		if (!playable.isPlayer())
+		{
+			playable.sendPacket(SystemMessageId.ITEM_NOT_FOR_PETS);
 			return false;
+		}
+		
+		final L2PcInstance activeChar = playable.getActingPlayer();
+		final SkillHolder[] skills = item.getItem().getSkills();
 		
-		L2PcInstance activeChar = (L2PcInstance) playable;
+		if (skills == null)
+		{
+			_log.log(Level.WARNING, getClass().getSimpleName() + ": is missing skills!");
+			return false;
+		}
 		
 		if (!(activeChar.getTarget() instanceof L2FeedableBeastInstance))
 		{
@@ -39,19 +50,10 @@ public class BeastSpice implements IItemHandler
 			return false;
 		}
 		
-		int skillId = 0;
-		switch (item.getItemId())
+		for (SkillHolder sk : skills)
 		{
-			case 6643:
-				skillId = 2188;
-				break;
-			case 6644:
-				skillId = 2189;
-				break;
+			activeChar.useMagic(sk.getSkill(), false, false);
 		}
-		L2Skill skill = SkillTable.getInstance().getInfo(skillId, 1);
-		if (skill != null)
-			activeChar.useMagic(skill, false, false);
 		return true;
 	}
 }
\ No newline at end of file
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/BeastSpiritShot.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/BeastSpiritShot.java
index 63bd83216e9c0ec14e59dc59ebd3d9da6ab925a5..c91f839b91781759c7babe48b425037028a1ec44 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/BeastSpiritShot.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/BeastSpiritShot.java
@@ -14,11 +14,13 @@
  */
 package handlers.itemhandlers;
 
+import java.util.logging.Level;
+
 import com.l2jserver.gameserver.handler.IItemHandler;
 import com.l2jserver.gameserver.model.actor.L2Playable;
 import com.l2jserver.gameserver.model.actor.L2Summon;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
-import com.l2jserver.gameserver.model.actor.instance.L2PetInstance;
+import com.l2jserver.gameserver.model.holders.SkillHolder;
 import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
 import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.serverpackets.MagicSkillUse;
@@ -33,12 +35,15 @@ public class BeastSpiritShot implements IItemHandler
 	@Override
 	public boolean useItem(L2Playable playable, L2ItemInstance item, boolean forceUse)
 	{
-		if (playable == null)
+		if (!playable.isPlayer())
+		{
+			playable.sendPacket(SystemMessageId.ITEM_NOT_FOR_PETS);
 			return false;
+		}
 		
 		L2PcInstance activeOwner = playable.getActingPlayer();
 		
-		if (playable instanceof L2Summon)
+		if (!playable.isPlayer())
 		{
 			activeOwner.sendPacket(SystemMessageId.PET_CANNOT_USE_ITEM);
 			return false;
@@ -58,9 +63,16 @@ public class BeastSpiritShot implements IItemHandler
 			return false;
 		}
 		
-		int itemId = item.getItemId();
-		boolean isBlessed = (itemId == 6647 || itemId == 20334);
-		short shotConsumption = activePet.getSpiritShotsPerHit();
+		final int itemId = item.getItemId();
+		final boolean isBlessed = (itemId == 6647 || itemId == 20334); // TODO: Unhardcode these!
+		final short shotConsumption = activePet.getSpiritShotsPerHit();
+		final SkillHolder[] skills = item.getItem().getSkills();
+		
+		if (skills == null)
+		{
+			_log.log(Level.WARNING, getClass().getSimpleName() + ": is missing skills!");
+			return false;
+		}
 		
 		long shotCount = item.getCount();
 		if (!(shotCount > shotConsumption))
@@ -71,14 +83,11 @@ public class BeastSpiritShot implements IItemHandler
 			return false;
 		}
 		
-		L2ItemInstance weaponInst = null;
-		
-		if (activePet instanceof L2PetInstance)
-			weaponInst = ((L2PetInstance) activePet).getActiveWeaponInstance();
+		L2ItemInstance weaponInst = activePet.getActiveWeaponInstance();
 		
 		if (weaponInst == null)
 		{
-			if (activePet.getChargedSpiritShot() != L2ItemInstance.CHARGED_NONE)
+			if (activePet.getChargedSpiritShot() != L2ItemInstance.CHARGED_NONE) // SoulShots are already active.
 				return false;
 			
 			if (isBlessed)
@@ -88,7 +97,7 @@ public class BeastSpiritShot implements IItemHandler
 		}
 		else
 		{
-			if (weaponInst.getChargedSpiritshot() != L2ItemInstance.CHARGED_NONE)
+			if (weaponInst.getChargedSpiritshot() != L2ItemInstance.CHARGED_NONE) // SoulShots are already active.
 			{
 				// SpiritShots are already active.
 				return false;
@@ -109,23 +118,7 @@ public class BeastSpiritShot implements IItemHandler
 		
 		// Pet uses the power of spirit.
 		activeOwner.sendPacket(SystemMessageId.PET_USE_SPIRITSHOT);
-		int skillId = 0;
-		switch (itemId)
-		{
-			case 6646:
-				skillId = 2008;
-				break;
-			case 6647:
-				skillId = 2009;
-				break;
-			case 20333:
-				skillId = 22037;
-				break;
-			case 20334:
-				skillId = 22038;
-				break;
-		}
-		Broadcast.toSelfAndKnownPlayersInRadius(activeOwner, new MagicSkillUse(activePet, activePet, skillId, 1, 0, 0), 360000/*600*/);
+		Broadcast.toSelfAndKnownPlayersInRadius(activeOwner, new MagicSkillUse(activePet, activePet, skills[0].getSkillId(), skills[0].getSkillLvl(), 0, 0), 2000);
 		return true;
 	}
 }
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/BlessedSpiritShot.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/BlessedSpiritShot.java
index b31c95e7c55669e9ec801ccbad0467749d9c564d..65b82c3e4153f06210a257de182c6f998d96851f 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/BlessedSpiritShot.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/BlessedSpiritShot.java
@@ -34,6 +34,7 @@ public class BlessedSpiritShot implements IItemHandler
 	{
 		if (!playable.isPlayer())
 		{
+			playable.sendPacket(SystemMessageId.ITEM_NOT_FOR_PETS);
 			return false;
 		}
 		
@@ -59,7 +60,7 @@ public class BlessedSpiritShot implements IItemHandler
 		}
 		
 		// Check if Blessed SpiritShot is already active (it can be charged over SpiritShot)
-		if (weaponInst.getChargedSpiritshot() != L2ItemInstance.CHARGED_NONE)
+		if (weaponInst.getChargedSpiritshot() != L2ItemInstance.CHARGED_NONE) // SoulShots are already active.
 			return false;
 		
 		// Check for correct grade
@@ -86,7 +87,7 @@ public class BlessedSpiritShot implements IItemHandler
 		
 		// Send message to client
 		activeChar.sendPacket(SystemMessageId.ENABLED_SPIRITSHOT);
-		Broadcast.toSelfAndKnownPlayersInRadius(activeChar, new MagicSkillUse(activeChar, activeChar, skills[0].getSkillId(), skills[0].getSkillLvl(), 0, 0), 360000);
+		Broadcast.toSelfAndKnownPlayersInRadius(activeChar, new MagicSkillUse(activeChar, activeChar, skills[0].getSkillId(), skills[0].getSkillLvl(), 0, 0), 2000);
 		return true;
 	}
 }
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/Book.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/Book.java
index b1bd5c1596ac7d3e55f684d2ab8d0dae4f640580..11cab12794376bd156dd281b77eda9fa44417526 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/Book.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/Book.java
@@ -19,6 +19,7 @@ import com.l2jserver.gameserver.handler.IItemHandler;
 import com.l2jserver.gameserver.model.actor.L2Playable;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
+import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.serverpackets.ActionFailed;
 import com.l2jserver.gameserver.network.serverpackets.NpcHtmlMessage;
 
@@ -27,8 +28,12 @@ public class Book implements IItemHandler
 	@Override
 	public boolean useItem(L2Playable playable, L2ItemInstance item, boolean forceUse)
 	{
-		if (!(playable instanceof L2PcInstance))
+		if (!playable.isPlayer())
+		{
+			playable.sendPacket(SystemMessageId.ITEM_NOT_FOR_PETS);
 			return false;
+		}
+		
 		L2PcInstance activeChar = (L2PcInstance) playable;
 		final int itemId = item.getItemId();
 		
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/Calculator.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/Calculator.java
index 019bad0c4e67fc14ac7c846e6e01bb49bbce7515..ed4b8cd61827fddd7b0372c58fa5449d4f1d4f7c 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/Calculator.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/Calculator.java
@@ -17,6 +17,7 @@ package handlers.itemhandlers;
 import com.l2jserver.gameserver.handler.IItemHandler;
 import com.l2jserver.gameserver.model.actor.L2Playable;
 import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
+import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.serverpackets.ShowCalculator;
 
 /**
@@ -24,16 +25,16 @@ import com.l2jserver.gameserver.network.serverpackets.ShowCalculator;
  */
 public class Calculator implements IItemHandler
 {
-	private static final int CalculatorId = 4393;
-	
 	@Override
 	public boolean useItem(L2Playable playable, L2ItemInstance item, boolean forceUse)
 	{
 		if (!playable.isPlayer())
 		{
+			playable.sendPacket(SystemMessageId.ITEM_NOT_FOR_PETS);
 			return false;
 		}
-		playable.broadcastPacket(new ShowCalculator(CalculatorId));
+		
+		playable.sendPacket(new ShowCalculator(item.getItemId()));
 		return true;
 	}
 }
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/ChristmasTree.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/ChristmasTree.java
index e2bc0fafbb27da8bfd7ab65b6fc459d532e82f12..a7e51dfd56229e614c893d1717277db30ead238c 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/ChristmasTree.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/ChristmasTree.java
@@ -29,7 +29,13 @@ public class ChristmasTree implements IItemHandler
 	@Override
 	public boolean useItem(L2Playable playable, L2ItemInstance item, boolean forceUse)
 	{
-		L2PcInstance activeChar = (L2PcInstance) playable;
+		if (!playable.isPlayer())
+		{
+			playable.sendPacket(SystemMessageId.ITEM_NOT_FOR_PETS);
+			return false;
+		}
+		
+		L2PcInstance activeChar = playable.getActingPlayer();
 		L2NpcTemplate template1 = null;
 		
 		switch (item.getItemId())
@@ -55,6 +61,7 @@ public class ChristmasTree implements IItemHandler
 			spawn.setLocx(target.getX());
 			spawn.setLocy(target.getY());
 			spawn.setLocz(target.getZ());
+			spawn.setInstanceId(activeChar.getInstanceId());
 			spawn.spawnOne(false);
 			
 			activeChar.destroyItem("Consume", item.getObjectId(), 1, null, false);
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/Disguise.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/Disguise.java
index 940267c08f7aab40fbf8e9eb709b87e73cad7224..cbe596218dfb4fe11c8d2709ee65adceff6ff0d4 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/Disguise.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/Disguise.java
@@ -29,10 +29,13 @@ public class Disguise implements IItemHandler
 	@Override
 	public boolean useItem(L2Playable playable, L2ItemInstance item, boolean forceUse)
 	{
-		if (!(playable instanceof L2PcInstance))
+		if (!playable.isPlayer())
+		{
+			playable.sendPacket(SystemMessageId.ITEM_NOT_FOR_PETS);
 			return false;
+		}
 		
-		L2PcInstance activeChar = (L2PcInstance) playable;
+		L2PcInstance activeChar = playable.getActingPlayer();
 		
 		int regId = TerritoryWarManager.getInstance().getRegisteredTerritoryId(activeChar);
 		if (regId > 0 && regId == (item.getItemId() - 13596))
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/Elixir.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/Elixir.java
index 242e1c3df33280f6a89d7ad2d81adce98aacf3cc..c16f8d013af8ff635b76182c09c436d2e9ba23d6 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/Elixir.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/Elixir.java
@@ -15,7 +15,6 @@
 package handlers.itemhandlers;
 
 import com.l2jserver.gameserver.model.actor.L2Playable;
-import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
 import com.l2jserver.gameserver.network.SystemMessageId;
 
@@ -24,7 +23,7 @@ public class Elixir extends ItemSkills
 	@Override
 	public boolean useItem(L2Playable playable, L2ItemInstance item, boolean forceUse)
 	{
-		if (!(playable instanceof L2PcInstance))
+		if (!playable.isPlayer())
 		{
 			playable.sendPacket(SystemMessageId.ITEM_NOT_FOR_PETS);
 			return false;
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/EnchantAttribute.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/EnchantAttribute.java
index 076faac09efb36c37d303895c42a5de5a5269c11..d033c111b188d05c89a255aeda93621105a7decb 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/EnchantAttribute.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/EnchantAttribute.java
@@ -26,12 +26,17 @@ public class EnchantAttribute implements IItemHandler
 	@Override
 	public boolean useItem(L2Playable playable, L2ItemInstance item, boolean forceUse)
 	{
-		if (!(playable instanceof L2PcInstance))
+		if (!playable.isPlayer())
+		{
+			playable.sendPacket(SystemMessageId.ITEM_NOT_FOR_PETS);
 			return false;
+		}
 		
-		final L2PcInstance activeChar = (L2PcInstance) playable;
+		final L2PcInstance activeChar = playable.getActingPlayer();
 		if (activeChar.isCastingNow())
+		{
 			return false;
+		}
 		
 		if (activeChar.isEnchanting())
 		{
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/EnchantScrolls.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/EnchantScrolls.java
index ef0fe55b9d65128dc836587e57223b6442ef6d29..e2733f1ef69bd3bf9b6dccd13701f7ea6ee499b1 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/EnchantScrolls.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/EnchantScrolls.java
@@ -26,12 +26,17 @@ public class EnchantScrolls implements IItemHandler
 	@Override
 	public boolean useItem(L2Playable playable, L2ItemInstance item, boolean forceUse)
 	{
-		if (!(playable instanceof L2PcInstance))
+		if (!playable.isPlayer())
+		{
+			playable.sendPacket(SystemMessageId.ITEM_NOT_FOR_PETS);
 			return false;
+		}
 		
-		final L2PcInstance activeChar = (L2PcInstance) playable;
+		final L2PcInstance activeChar = playable.getActingPlayer();
 		if (activeChar.isCastingNow())
+		{
 			return false;
+		}
 		
 		if (activeChar.isEnchanting())
 		{
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/EnergyStarStone.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/EnergyStarStone.java
index 69ad172b88020b02950461e2bd356c297052f608..43649de809cf835f4b097594261049d8e3b48ea9 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/EnergyStarStone.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/EnergyStarStone.java
@@ -17,7 +17,6 @@ package handlers.itemhandlers;
 import com.l2jserver.gameserver.model.actor.L2Playable;
 import com.l2jserver.gameserver.model.actor.instance.L2AirShipInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2ControllableAirShipInstance;
-import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
 import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.serverpackets.ActionFailed;
@@ -28,13 +27,14 @@ public class EnergyStarStone extends ItemSkills
 	@Override
 	public boolean useItem(L2Playable playable, L2ItemInstance item, boolean forceUse)
 	{
-		if (!(playable instanceof L2PcInstance))
+		if (!playable.isPlayer())
+		{
+			playable.sendPacket(SystemMessageId.ITEM_NOT_FOR_PETS);
 			return false;
+		}
 		
-		final L2AirShipInstance ship = ((L2PcInstance)playable).getAirShip();
-		if (ship == null
-				|| !(ship instanceof L2ControllableAirShipInstance)
-				|| ship.getFuel() >= ship.getMaxFuel())
+		final L2AirShipInstance ship = playable.getActingPlayer().getAirShip();
+		if (ship == null || !(ship instanceof L2ControllableAirShipInstance) || ship.getFuel() >= ship.getMaxFuel())
 		{
 			final SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.S1_CANNOT_BE_USED);
 			sm.addItemName(item);
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/EventItem.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/EventItem.java
index c13ac838ef327f222fd3a25da83e952b3baeebff..90db74ffdbbaa0fea8fa793ac99f3f562cd4d621 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/EventItem.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/EventItem.java
@@ -34,14 +34,18 @@ public class EventItem implements IItemHandler
 	@Override
 	public boolean useItem(L2Playable playable, L2ItemInstance item, boolean forceUse)
 	{
-		boolean used = false;
-		if(!(playable instanceof L2PcInstance))
+		if (!playable.isPlayer())
+		{
+			playable.sendPacket(SystemMessageId.ITEM_NOT_FOR_PETS);
 			return false;
+		}
 		
-		final L2PcInstance activeChar = (L2PcInstance)playable;
+		boolean used = false;
+		
+		final L2PcInstance activeChar = playable.getActingPlayer();
 		
 		final int itemId = item.getItemId();
-		switch(itemId)
+		switch (itemId)
 		{
 			case 13787: // Handy's Block Checker Bond
 				used = useBlockCheckerItem(activeChar, item);
@@ -50,7 +54,7 @@ public class EventItem implements IItemHandler
 				used = useBlockCheckerItem(activeChar, item);
 				break;
 			default:
-				_log.warning("EventItemHandler: Item with id: "+itemId+" is not handled");
+				_log.warning("EventItemHandler: Item with id: " + itemId + " is not handled");
 		}
 		return used;
 	}
@@ -58,7 +62,7 @@ public class EventItem implements IItemHandler
 	private final boolean useBlockCheckerItem(final L2PcInstance castor, L2ItemInstance item)
 	{
 		final int blockCheckerArena = castor.getBlockCheckerArena();
-		if(blockCheckerArena == -1)
+		if (blockCheckerArena == -1)
 		{
 			SystemMessage msg = SystemMessage.getSystemMessage(SystemMessageId.S1_CANNOT_BE_USED);
 			msg.addItemName(item);
@@ -66,29 +70,28 @@ public class EventItem implements IItemHandler
 			return false;
 		}
 		
-		
 		final L2Skill sk = item.getEtcItem().getSkills()[0].getSkill();
-		if(sk == null)
+		if (sk == null)
 			return false;
 		
-		if(!castor.destroyItem("Consume", item, 1, castor, true))
+		if (!castor.destroyItem("Consume", item, 1, castor, true))
 			return false;
 		
 		final L2BlockInstance block = (L2BlockInstance) castor.getTarget();
 		
 		final ArenaParticipantsHolder holder = HandysBlockCheckerManager.getInstance().getHolder(blockCheckerArena);
-		if(holder != null)
+		if (holder != null)
 		{
 			final int team = holder.getPlayerTeam(castor);
-			for(final L2PcInstance pc : block.getKnownList().getKnownPlayersInRadius(sk.getEffectRange()))
+			for (final L2PcInstance pc : block.getKnownList().getKnownPlayersInRadius(sk.getEffectRange()))
 			{
 				final int enemyTeam = holder.getPlayerTeam(pc);
-				if(enemyTeam != -1 && enemyTeam != team)
+				if (enemyTeam != -1 && enemyTeam != team)
 					sk.getEffects(castor, pc);
 			}
 			return true;
 		}
-		_log.warning("Char: "+castor.getName()+"["+castor.getObjectId()+"] has unknown block checker arena");
+		_log.warning("Char: " + castor.getName() + "[" + castor.getObjectId() + "] has unknown block checker arena");
 		return false;
 	}
 }
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/ExtractableItems.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/ExtractableItems.java
index fe42ec33026c7152599bb084a6de0678f493df2a..c46f448d12edeaf97077d4ec08feb50e94e495c3 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/ExtractableItems.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/ExtractableItems.java
@@ -38,8 +38,9 @@ public class ExtractableItems implements IItemHandler
 	@Override
 	public boolean useItem(L2Playable playable, L2ItemInstance item, boolean forceUse)
 	{
-		if (!(playable instanceof L2PcInstance))
+		if (!playable.isPlayer())
 		{
+			playable.sendPacket(SystemMessageId.ITEM_NOT_FOR_PETS);
 			return false;
 		}
 		
@@ -52,7 +53,7 @@ public class ExtractableItems implements IItemHandler
 			return false;
 		}
 		
-		//destroy item
+		// destroy item
 		if (!activeChar.destroyItem("Extract", item.getObjectId(), 1, activeChar, true))
 		{
 			return false;
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/FishShots.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/FishShots.java
index 5f746f6182970ef58b993bc45f98d6b8e469d4b9..445a38b1364b7f8544f948481c37d70251fbcb22 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/FishShots.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/FishShots.java
@@ -14,13 +14,16 @@
  */
 package handlers.itemhandlers;
 
+import java.util.logging.Level;
+
 import com.l2jserver.gameserver.handler.IItemHandler;
 import com.l2jserver.gameserver.model.L2Object;
 import com.l2jserver.gameserver.model.actor.L2Playable;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
-import com.l2jserver.gameserver.model.items.L2Item;
+import com.l2jserver.gameserver.model.holders.SkillHolder;
 import com.l2jserver.gameserver.model.items.L2Weapon;
 import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
+import com.l2jserver.gameserver.model.items.type.L2ActionType;
 import com.l2jserver.gameserver.model.items.type.L2WeaponType;
 import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.serverpackets.MagicSkillUse;
@@ -31,36 +34,38 @@ import com.l2jserver.gameserver.util.Broadcast;
  */
 public class FishShots implements IItemHandler
 {
-	private static final int[] SKILL_IDS =
-	{
-		2181, 2182, 2183, 2184, 2185, 2186
-	};
-	
 	@Override
 	public boolean useItem(L2Playable playable, L2ItemInstance item, boolean forceUse)
 	{
-		if (!(playable instanceof L2PcInstance))
+		if (!playable.isPlayer())
+		{
+			playable.sendPacket(SystemMessageId.ITEM_NOT_FOR_PETS);
 			return false;
+		}
 		
-		L2PcInstance activeChar = (L2PcInstance) playable;
-		L2ItemInstance weaponInst = activeChar.getActiveWeaponInstance();
-		L2Weapon weaponItem = activeChar.getActiveWeaponItem();
+		final L2PcInstance activeChar = playable.getActingPlayer();
+		final L2ItemInstance weaponInst = activeChar.getActiveWeaponInstance();
+		final L2Weapon weaponItem = activeChar.getActiveWeaponItem();
 		
 		if (weaponInst == null || weaponItem.getItemType() != L2WeaponType.FISHINGROD)
 			return false;
 		
-		if (weaponInst.getChargedFishshot())
-			// spirit shot is already active
+		if (weaponInst.getChargedFishshot()) // spirit shot is already active
 			return false;
 		
-		int FishshotId = item.getItemId();
-		int grade = weaponItem.getCrystalType();
-		long count = item.getCount();
+		final long count = item.getCount();
+		final SkillHolder[] skills = item.getItem().getSkills();
+		
+		if (skills == null)
+		{
+			_log.log(Level.WARNING, getClass().getSimpleName() + ": is missing skills!");
+			return false;
+		}
+		
+		boolean gradeCheck = item.isEtcItem() && item.getEtcItem().getDefaultAction() == L2ActionType.fishingshot && weaponInst.getItem().getItemGradeSPlus() == item.getItem().getItemGradeSPlus();
 		
-		if ((grade == L2Item.CRYSTAL_NONE && FishshotId != 6535) || (grade == L2Item.CRYSTAL_D && FishshotId != 6536) || (grade == L2Item.CRYSTAL_C && FishshotId != 6537) || (grade == L2Item.CRYSTAL_B && FishshotId != 6538)
-				|| (grade == L2Item.CRYSTAL_A && FishshotId != 6539) || (FishshotId != 6540 && grade == L2Item.CRYSTAL_S ))
+		if (!gradeCheck)
 		{
-			//1479 - This fishing shot is not fit for the fishing pole crystal.
 			activeChar.sendPacket(SystemMessageId.WRONG_FISHINGSHOT_GRADE);
 			return false;
 		}
@@ -73,7 +78,7 @@ public class FishShots implements IItemHandler
 		L2Object oldTarget = activeChar.getTarget();
 		activeChar.setTarget(activeChar);
 		
-		Broadcast.toSelfAndKnownPlayers(activeChar, new MagicSkillUse(activeChar, SKILL_IDS[grade], 1, 0, 0));
+		Broadcast.toSelfAndKnownPlayers(activeChar, new MagicSkillUse(activeChar, skills[0].getSkillId(), skills[0].getSkillLvl(), 0, 0));
 		activeChar.setTarget(oldTarget);
 		return true;
 	}
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/Harvester.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/Harvester.java
index 4da29f4075898adc324e5859a5779b8dc83b03f4..1b28519987884b51b7f7bb951fed76a57a3b8316 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/Harvester.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/Harvester.java
@@ -14,54 +14,62 @@
  */
 package handlers.itemhandlers;
 
-import com.l2jserver.gameserver.datatables.SkillTable;
+import java.util.logging.Level;
+
 import com.l2jserver.gameserver.handler.IItemHandler;
 import com.l2jserver.gameserver.instancemanager.CastleManorManager;
 import com.l2jserver.gameserver.model.actor.L2Playable;
 import com.l2jserver.gameserver.model.actor.instance.L2MonsterInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jserver.gameserver.model.holders.SkillHolder;
 import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
-import com.l2jserver.gameserver.model.skills.L2Skill;
 import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.serverpackets.ActionFailed;
 
 /**
- * @author  l3x
+ * @author l3x
  */
 public class Harvester implements IItemHandler
 {
-	L2PcInstance _activeChar;
-	L2MonsterInstance _target;
-	
 	@Override
-	public boolean useItem(L2Playable playable, L2ItemInstance _item, boolean forceUse)
+	public boolean useItem(L2Playable playable, L2ItemInstance item, boolean forceUse)
 	{
-		if (!(playable instanceof L2PcInstance))
+		if (!playable.isPlayer())
+		{
+			playable.sendPacket(SystemMessageId.ITEM_NOT_FOR_PETS);
 			return false;
+		}
 		
 		if (CastleManorManager.getInstance().isDisabled())
+		{
 			return false;
+		}
 		
-		_activeChar = (L2PcInstance) playable;
+		final L2PcInstance activeChar = playable.getActingPlayer();
+		final SkillHolder[] skills = item.getItem().getSkills();
+		L2MonsterInstance target = null;
+		if (activeChar.getTarget() != null && activeChar.getTarget().isMonster())
+		{
+			target = (L2MonsterInstance) activeChar.getTarget();
+		}
 		
-		if (!(_activeChar.getTarget() instanceof L2MonsterInstance))
+		if (skills == null)
 		{
-			_activeChar.sendPacket(SystemMessageId.INCORRECT_TARGET);
-			_activeChar.sendPacket(ActionFailed.STATIC_PACKET);
+			_log.log(Level.WARNING, getClass().getSimpleName() + ": is missing skills!");
 			return false;
 		}
 		
-		_target = (L2MonsterInstance) _activeChar.getTarget();
-		
-		if (_target == null || !_target.isDead())
+		if (target == null || !target.isDead())
 		{
-			_activeChar.sendPacket(ActionFailed.STATIC_PACKET);
+			activeChar.sendPacket(SystemMessageId.INCORRECT_TARGET);
+			activeChar.sendPacket(ActionFailed.STATIC_PACKET);
 			return false;
 		}
 		
-		L2Skill skill = SkillTable.getInstance().getInfo(2098, 1); //harvesting skill
-		if (skill != null)
-			_activeChar.useMagic(skill, false, false);
+		for (SkillHolder sk : skills)
+		{
+			activeChar.useMagic(sk.getSkill(), false, false);
+		}
 		return true;
 	}
 }
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/Maps.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/Maps.java
index 36aac6fb0566aaff1a8ed2763128b36eaf291b2c..0b0f0b404da859c14c2b03fd9f75e67421558ac6 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/Maps.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/Maps.java
@@ -16,8 +16,8 @@ package handlers.itemhandlers;
 
 import com.l2jserver.gameserver.handler.IItemHandler;
 import com.l2jserver.gameserver.model.actor.L2Playable;
-import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
+import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.serverpackets.ShowMiniMap;
 
 /**
@@ -28,8 +28,11 @@ public class Maps implements IItemHandler
 	@Override
 	public boolean useItem(L2Playable playable, L2ItemInstance item, boolean forceUse)
 	{
-		if (!(playable instanceof L2PcInstance))
+		if (!playable.isPlayer())
+		{
+			playable.sendPacket(SystemMessageId.ITEM_NOT_FOR_PETS);
 			return false;
+		}
 		
 		playable.sendPacket(new ShowMiniMap(item.getItemId()));
 		return true;
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/MercTicket.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/MercTicket.java
index adb87b58f423276b5292d880d33c49925ccc57d3..8f2fdfd0a4a585ba075d7e853e7745e2d091cc8c 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/MercTicket.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/MercTicket.java
@@ -41,6 +41,12 @@ public class MercTicket implements IItemHandler
 	@Override
 	public boolean useItem(L2Playable playable, L2ItemInstance item, boolean forceUse)
 	{
+		if (!playable.isPlayer())
+		{
+			playable.sendPacket(SystemMessageId.ITEM_NOT_FOR_PETS);
+			return false;
+		}
+		
 		int itemId = item.getItemId();
 		L2PcInstance activeChar = (L2PcInstance) playable;
 		Castle castle = CastleManager.getInstance().getCastle(activeChar);
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/NicknameColor.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/NicknameColor.java
index 477ebaca02197f3bdcd83e1a7905922b6497be32..c393b8d0f2ed670ffb7b5d93d3d7e19b2cef8e14 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/NicknameColor.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/NicknameColor.java
@@ -16,8 +16,8 @@ package handlers.itemhandlers;
 
 import com.l2jserver.gameserver.handler.IItemHandler;
 import com.l2jserver.gameserver.model.actor.L2Playable;
-import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
+import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.serverpackets.ExRequestChangeNicknameColor;
 
 public class NicknameColor implements IItemHandler
@@ -25,8 +25,12 @@ public class NicknameColor implements IItemHandler
 	@Override
 	public boolean useItem(L2Playable playable, L2ItemInstance item, boolean forceUse)
 	{
-		if (!(playable instanceof L2PcInstance))
+		if (!playable.isPlayer())
+		{
+			playable.sendPacket(SystemMessageId.ITEM_NOT_FOR_PETS);
 			return false;
+		}
+		
 		playable.sendPacket(new ExRequestChangeNicknameColor(item.getObjectId()));
 		return true;
 	}
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/PaganKeys.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/PaganKeys.java
index 3a4cb1cce3ef50f8b95b0f8304e2dda8605d424c..7e6fd5e7a07579141600e478d837108eff8b8089 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/PaganKeys.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/PaganKeys.java
@@ -26,7 +26,7 @@ import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.serverpackets.ActionFailed;
 
 /**
- * @author  chris
+ * @author chris
  */
 public class PaganKeys implements IItemHandler
 {
@@ -35,11 +35,15 @@ public class PaganKeys implements IItemHandler
 	@Override
 	public boolean useItem(L2Playable playable, L2ItemInstance item, boolean forceUse)
 	{
-		int itemId = item.getItemId();
-		if (!(playable instanceof L2PcInstance))
+		if (!playable.isPlayer())
+		{
+			playable.sendPacket(SystemMessageId.ITEM_NOT_FOR_PETS);
 			return false;
-		L2PcInstance activeChar = (L2PcInstance) playable;
-		L2Object target = activeChar.getTarget();
+		}
+		
+		final int itemId = item.getItemId();
+		final L2PcInstance activeChar = (L2PcInstance) playable;
+		final L2Object target = activeChar.getTarget();
 		
 		if (!(target instanceof L2DoorInstance))
 		{
@@ -65,6 +69,7 @@ public class PaganKeys implements IItemHandler
 		if (!playable.destroyItem("Consume", item.getObjectId(), 1, null, false))
 			return false;
 		
+		// TODO: Unhardcode these!
 		switch (itemId)
 		{
 			case 9698:
@@ -73,10 +78,13 @@ public class PaganKeys implements IItemHandler
 					if (activeChar.getInstanceId() != door.getInstanceId())
 					{
 						for (L2DoorInstance instanceDoor : InstanceManager.getInstance().getInstance(activeChar.getInstanceId()).getDoors())
+						{
 							if (instanceDoor.getDoorId() == door.getDoorId())
 							{
 								instanceDoor.openMe();
+								break;
 							}
+						}
 					}
 					else
 					{
@@ -94,10 +102,13 @@ public class PaganKeys implements IItemHandler
 					if (activeChar.getInstanceId() != door.getInstanceId())
 					{
 						for (L2DoorInstance instanceDoor : InstanceManager.getInstance().getInstance(activeChar.getInstanceId()).getDoors())
+						{
 							if (instanceDoor.getDoorId() == door.getDoorId())
 							{
 								instanceDoor.openMe();
+								break;
 							}
+						}
 					}
 					else
 					{
@@ -110,7 +121,7 @@ public class PaganKeys implements IItemHandler
 				}
 				break;
 			case 8056:
-				if (door.getDoorId() == 23150004||door.getDoorId() == 23150003)
+				if (door.getDoorId() == 23150004 || door.getDoorId() == 23150003)
 				{
 					DoorTable.getInstance().getDoor(23150003).openMe();
 					DoorTable.getInstance().getDoor(23150004).openMe();
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/PetFood.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/PetFood.java
index e228b8c4dfff505f8c833812d58f498e0ac872a8..9ed95302b270fe0ae7ae60f8e596df93aeb4ee68 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/PetFood.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/PetFood.java
@@ -23,6 +23,7 @@ import com.l2jserver.gameserver.handler.IItemHandler;
 import com.l2jserver.gameserver.model.actor.L2Playable;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2PetInstance;
+import com.l2jserver.gameserver.model.holders.SkillHolder;
 import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
 import com.l2jserver.gameserver.model.skills.L2Skill;
 import com.l2jserver.gameserver.network.SystemMessageId;
@@ -37,64 +38,38 @@ public class PetFood implements IItemHandler
 	@Override
 	public boolean useItem(L2Playable playable, L2ItemInstance item, boolean forceUse)
 	{
-		int itemId = item.getItemId();
-		boolean used = false;
-		switch (itemId)
+		final SkillHolder[] skills = item.getItem().getSkills();
+		if (skills != null)
 		{
-			case 2515: // Food For Wolves
-				used = useFood(playable, 2048, item);
-				break;
-			case 4038: // Food For Hatchling
-				used = useFood(playable, 2063, item);
-				break;
-			case 5168: // Food for Strider
-				used = useFood(playable, 2101, item);
-				break;
-			case 5169: // Deluxe Food for Strider
-				used = useFood(playable, 2102, item);
-				break;
-			case 6316: // Food for Wyvern
-				used = useFood(playable, 2180, item);
-				break;
-			case 7582: // Baby Spice
-				used = useFood(playable, 2048, item);
-				break;
-			case 9668: // Great Wolf Food
-				used = useFood(playable, 2361, item);
-				break;
-			case 10425: // Improved Baby Pet Food
-				used = useFood(playable, 2361, item);
-				break;
-			case 14818: // Enriched Pet Food for Wolves
-				used = useFood(playable, 2916, item);
-				break;
-			default:
-				_log.warning("Pet Food Id: " + itemId + " without handler!");
-				break;
+			for (SkillHolder sk : skills)
+			{
+				useFood(playable, sk.getSkillId(), sk.getSkillLvl(), item);
+			}
 		}
-		return used;
+		return true;
 	}
 	
-	public boolean useFood(L2Playable activeChar, int magicId, L2ItemInstance item)
+	public boolean useFood(L2Playable activeChar, int skillId, int skillLevel, L2ItemInstance item)
 	{
-		L2Skill skill = SkillTable.getInstance().getInfo(magicId, 1);
+		L2Skill skill = SkillTable.getInstance().getInfo(skillId, skillLevel);
 		if (skill != null)
 		{
-			if (activeChar instanceof L2PetInstance)
+			if (activeChar.isPet())
 			{
-				if (((L2PetInstance) activeChar).destroyItem("Consume", item.getObjectId(), 1, null, false))
+				L2PetInstance pet = (L2PetInstance) activeChar;
+				if (pet.destroyItem("Consume", item.getObjectId(), 1, null, false))
 				{
-					activeChar.broadcastPacket(new MagicSkillUse(activeChar, activeChar, magicId, 1, 0, 0));
-					((L2PetInstance) activeChar).setCurrentFed(((L2PetInstance) activeChar).getCurrentFed() + (skill.getFeed() * Config.PET_FOOD_RATE));
-					((L2PetInstance) activeChar).broadcastStatusUpdate();
-					if (((L2PetInstance) activeChar).getCurrentFed() < ((((L2PetInstance) activeChar).getPetData().getHungryLimit() / 100f) * ((L2PetInstance) activeChar).getPetLevelData().getPetMaxFeed()))
+					pet.broadcastPacket(new MagicSkillUse(pet, pet, skillId, skillLevel, 0, 0));
+					pet.setCurrentFed(((L2PetInstance) activeChar).getCurrentFed() + (skill.getFeed() * Config.PET_FOOD_RATE));
+					pet.broadcastStatusUpdate();
+					if (pet.getCurrentFed() < ((pet.getPetData().getHungryLimit() / 100f) * pet.getPetLevelData().getPetMaxFeed()))
 					{
 						activeChar.sendPacket(SystemMessageId.YOUR_PET_ATE_A_LITTLE_BUT_IS_STILL_HUNGRY);
 					}
 					return true;
 				}
 			}
-			else if (activeChar instanceof L2PcInstance)
+			else if (activeChar.isPlayer())
 			{
 				final L2PcInstance player = activeChar.getActingPlayer();
 				if (player.isMounted())
@@ -104,7 +79,7 @@ public class PetFood implements IItemHandler
 					{
 						if (player.destroyItem("Consume", item.getObjectId(), 1, null, false))
 						{
-							player.broadcastPacket(new MagicSkillUse(activeChar, activeChar, magicId, 1, 0, 0));
+							player.broadcastPacket(new MagicSkillUse(activeChar, activeChar, skillId, skillLevel, 0, 0));
 							player.setCurrentFeed(player.getCurrentFeed() + skill.getFeed());
 						}
 						return true;
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/QuestItems.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/QuestItems.java
index 0b241fb9f7f2d81e18641a7fcbdeda5bc7c9f7d9..a6420e5a741c39ec14dc0250c15333a2848cb481 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/QuestItems.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/QuestItems.java
@@ -21,6 +21,7 @@ import com.l2jserver.gameserver.model.items.L2Item;
 import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
 import com.l2jserver.gameserver.model.quest.Quest;
 import com.l2jserver.gameserver.model.quest.QuestState;
+import com.l2jserver.gameserver.network.SystemMessageId;
 
 /**
  * @author BiggBoss
@@ -30,19 +31,22 @@ public class QuestItems implements IItemHandler
 	@Override
 	public boolean useItem(L2Playable playable, L2ItemInstance item, boolean forceuse)
 	{
-		if(!(playable instanceof L2PcInstance))
+		if (!playable.isPlayer())
+		{
+			playable.sendPacket(SystemMessageId.ITEM_NOT_FOR_PETS);
 			return false;
+		}
 		
-		L2PcInstance player = (L2PcInstance) playable;
+		L2PcInstance player = playable.getActingPlayer();
 		
-		if(!player.destroyItem("Item Handler - QuestItems", item, player, true))
+		if (!player.destroyItem("Item Handler - QuestItems", item, player, true))
 			return false;
 		
 		L2Item itm = item.getItem();
-		for(Quest quest : itm.getQuestEvents())
+		for (Quest quest : itm.getQuestEvents())
 		{
 			QuestState state = player.getQuestState(quest.getName());
-			if(state == null || !state.isStarted())
+			if (state == null || !state.isStarted())
 				continue;
 			
 			quest.notifyItemUse(itm, player);
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/Recipes.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/Recipes.java
index 149bede1752b7004157f5b6f9e45bdbffcb0072c..089328683ec0babc8b60c7a6b551556951a29f8f 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/Recipes.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/Recipes.java
@@ -31,8 +31,9 @@ public class Recipes implements IItemHandler
 	@Override
 	public boolean useItem(L2Playable playable, L2ItemInstance item, boolean forceUse)
 	{
-		if (!(playable instanceof L2PcInstance))
+		if (!playable.isPlayer())
 		{
+			playable.sendPacket(SystemMessageId.ITEM_NOT_FOR_PETS);
 			return false;
 		}
 		
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/RollingDice.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/RollingDice.java
index eed240af3fbcd53c0888b7c6d2dad0d7161e5534..f685c44f259f7a157ca5185764645a3264f7a81a 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/RollingDice.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/RollingDice.java
@@ -30,10 +30,13 @@ public class RollingDice implements IItemHandler
 	@Override
 	public boolean useItem(L2Playable playable, L2ItemInstance item, boolean forceUse)
 	{
-		if (!(playable instanceof L2PcInstance))
+		if (!playable.isPlayer())
+		{
+			playable.sendPacket(SystemMessageId.ITEM_NOT_FOR_PETS);
 			return false;
+		}
 		
-		L2PcInstance activeChar = (L2PcInstance) playable;
+		L2PcInstance activeChar = playable.getActingPlayer();
 		int itemId = item.getItemId();
 		
 		if (activeChar.isInOlympiadMode())
@@ -42,29 +45,30 @@ public class RollingDice implements IItemHandler
 			return false;
 		}
 		
-		if (itemId == 4625 || itemId == 4626 || itemId == 4627 || itemId == 4628)
+		int number = rollDice(activeChar);
+		if (number == 0)
 		{
-			int number = rollDice(activeChar);
-			if (number == 0)
-			{
-				activeChar.sendPacket(SystemMessageId.YOU_MAY_NOT_THROW_THE_DICE_AT_THIS_TIME_TRY_AGAIN_LATER);
-				return false;
-			}
-			
-			Broadcast.toSelfAndKnownPlayers(activeChar, new Dice(activeChar.getObjectId(), item.getItemId(), number, activeChar.getX() - 30, activeChar.getY() - 30, activeChar.getZ()));
-			
-			SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.C1_ROLLED_S2);
-			sm.addString(activeChar.getName());
-			sm.addNumber(number);
-			
-			activeChar.sendPacket(sm);
-			if (activeChar.isInsideZone(L2Character.ZONE_PEACE))
-				Broadcast.toKnownPlayers(activeChar, sm);
-			else if (activeChar.isInParty())
-				activeChar.getParty().broadcastToPartyMembers(activeChar, sm);
-			return true;
+			activeChar.sendPacket(SystemMessageId.YOU_MAY_NOT_THROW_THE_DICE_AT_THIS_TIME_TRY_AGAIN_LATER);
+			return false;
 		}
-		return false;
+		
+		Broadcast.toSelfAndKnownPlayers(activeChar, new Dice(activeChar.getObjectId(), itemId, number, activeChar.getX() - 30, activeChar.getY() - 30, activeChar.getZ()));
+		
+		SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.C1_ROLLED_S2);
+		sm.addString(activeChar.getName());
+		sm.addNumber(number);
+		
+		activeChar.sendPacket(sm);
+		if (activeChar.isInsideZone(L2Character.ZONE_PEACE))
+		{
+			Broadcast.toKnownPlayers(activeChar, sm);
+		}
+		else if (activeChar.isInParty()) // TODO: Verify this!
+		{
+			activeChar.getParty().broadcastToPartyMembers(activeChar, sm);
+		}
+		return true;
+		
 	}
 	
 	/**
@@ -74,8 +78,7 @@ public class RollingDice implements IItemHandler
 	private int rollDice(L2PcInstance player)
 	{
 		// Check if the dice is ready
-		if (!player.getFloodProtectors().getRollDice().
-				tryPerformAction("roll dice"))
+		if (!player.getFloodProtectors().getRollDice().tryPerformAction("roll dice"))
 		{
 			return 0;
 		}
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/ScrollOfResurrection.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/ScrollOfResurrection.java
index 084af158973183cf1b2d7131e14c6d716a2c650d..77eb2815f6f49167bf8796c8c758e8c915272695 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/ScrollOfResurrection.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/ScrollOfResurrection.java
@@ -14,7 +14,8 @@
  */
 package handlers.itemhandlers;
 
-import com.l2jserver.gameserver.datatables.SkillTable;
+import java.util.logging.Level;
+
 import com.l2jserver.gameserver.handler.IItemHandler;
 import com.l2jserver.gameserver.instancemanager.CastleManager;
 import com.l2jserver.gameserver.model.actor.L2Character;
@@ -23,8 +24,8 @@ import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2PetInstance;
 import com.l2jserver.gameserver.model.entity.Castle;
 import com.l2jserver.gameserver.model.entity.TvTEvent;
+import com.l2jserver.gameserver.model.holders.SkillHolder;
 import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
-import com.l2jserver.gameserver.model.skills.L2Skill;
 import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.serverpackets.ActionFailed;
 import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
@@ -36,6 +37,7 @@ public class ScrollOfResurrection implements IItemHandler
 	{
 		if (!playable.isPlayer())
 		{
+			playable.sendPacket(SystemMessageId.ITEM_NOT_FOR_PETS);
 			return false;
 		}
 		
@@ -58,8 +60,14 @@ public class ScrollOfResurrection implements IItemHandler
 		}
 		
 		final int itemId = item.getItemId();
-		// boolean blessedScroll = (itemId != 737);
-		boolean petScroll = (itemId == 6387);
+		final boolean petScroll = (itemId == 6387);
+		final SkillHolder[] skills = item.getItem().getSkills();
+		
+		if (skills == null)
+		{
+			_log.log(Level.WARNING, getClass().getSimpleName() + ": is missing skills!");
+			return false;
+		}
 		
 		// SoR Animation section
 		final L2Character target = (L2Character) activeChar.getTarget();
@@ -154,42 +162,13 @@ public class ScrollOfResurrection implements IItemHandler
 					return false;
 				}
 				
-				int skillId = 0;
-				int skillLevel = 1;
-				
-				switch (itemId)
-				{
-					case 737:
-						skillId = 2014;
-						break; // Scroll of Resurrection
-					case 3936:
-						skillId = 2049;
-						break; // Blessed Scroll of Resurrection
-					case 3959:
-						skillId = 2062;
-						break; // L2Day - Blessed Scroll of Resurrection
-					case 6387:
-						skillId = 2179;
-						break; // Blessed Scroll of Resurrection: For Pets
-					case 9157:
-						skillId = 2321;
-						break; // Blessed Scroll of Resurrection Event
-					case 10150:
-						skillId = 2393;
-						break; // Blessed Scroll of Battlefield Resurrection
-					case 13259:
-						skillId = 2596;
-						break; // Gran Kain's Blessed Scroll of Resurrection
-				}
+				SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.S1_DISAPPEARED);
+				sm.addItemName(item);
+				activeChar.sendPacket(sm);
 				
-				if (skillId != 0)
+				for (SkillHolder sk : skills)
 				{
-					L2Skill skill = SkillTable.getInstance().getInfo(skillId, skillLevel);
-					activeChar.useMagic(skill, true, true);
-					
-					SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.S1_DISAPPEARED);
-					sm.addItemName(item);
-					activeChar.sendPacket(sm);
+					activeChar.useMagic(sk.getSkill(), true, true);
 				}
 				return true;
 			}
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/Seed.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/Seed.java
index 96a1099a23953c3d5ab5f52106535d52e57e7a43..f69d0a585e99d21a97a911e0a5f5f70b888582ce 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/Seed.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/Seed.java
@@ -27,23 +27,27 @@ import com.l2jserver.gameserver.model.actor.instance.L2MonsterInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.holders.SkillHolder;
 import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
-import com.l2jserver.gameserver.model.skills.L2Skill;
 import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.serverpackets.ActionFailed;
 
 /**
- * @author  l3x
+ * @author l3x
  */
 public class Seed implements IItemHandler
 {
 	@Override
 	public boolean useItem(L2Playable playable, L2ItemInstance item, boolean forceUse)
 	{
-		if (!(playable instanceof L2PcInstance))
+		if (!playable.isPlayer())
+		{
+			playable.sendPacket(SystemMessageId.ITEM_NOT_FOR_PETS);
 			return false;
+		}
 		
 		if (CastleManorManager.getInstance().isDisabled())
+		{
 			return false;
+		}
 		
 		final L2Object tgt = playable.getTarget();
 		if (!(tgt instanceof L2Npc))
@@ -52,14 +56,14 @@ public class Seed implements IItemHandler
 			playable.sendPacket(ActionFailed.STATIC_PACKET);
 			return false;
 		}
-		if (!(tgt instanceof L2MonsterInstance) || tgt instanceof L2ChestInstance || ((L2Character)tgt).isRaid())
+		if (!(tgt instanceof L2MonsterInstance) || tgt instanceof L2ChestInstance || ((L2Character) tgt).isRaid())
 		{
 			playable.sendPacket(SystemMessageId.THE_TARGET_IS_UNAVAILABLE_FOR_SEEDING);
 			playable.sendPacket(ActionFailed.STATIC_PACKET);
 			return false;
 		}
 		
-		final L2MonsterInstance target = (L2MonsterInstance)tgt;
+		final L2MonsterInstance target = (L2MonsterInstance) tgt;
 		if (target.isDead())
 		{
 			playable.sendPacket(SystemMessageId.INCORRECT_TARGET);
@@ -80,21 +84,20 @@ public class Seed implements IItemHandler
 			return false;
 		}
 		
-		target.setSeeded(seedId, (L2PcInstance)playable);
-		final SkillHolder[] skills = item.getEtcItem().getSkills();
+		target.setSeeded(seedId, (L2PcInstance) playable);
+		final SkillHolder[] skills = item.getItem().getSkills();
+		final L2PcInstance activeChar = playable.getActingPlayer();
 		if (skills != null)
 		{
-			if(skills[0] == null)
-				return false;
-			
-			L2Skill itemskill = skills[0].getSkill();
-			((L2PcInstance)playable).useMagic(itemskill, false, false);
+			for (SkillHolder sk : skills)
+			{
+				activeChar.useMagic(sk.getSkill(), false, false);
+			}
 		}
 		return true;
 	}
 	
 	/**
-	 * 
 	 * @param seedId
 	 * @param castleId
 	 * @return
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/SevenSignsRecord.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/SevenSignsRecord.java
index e7a94330220a654eae00c9bab90a92fae7d154b5..0fc5863089564a6c16d1dbf483b862ce82fe4d35 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/SevenSignsRecord.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/SevenSignsRecord.java
@@ -16,8 +16,8 @@ package handlers.itemhandlers;
 
 import com.l2jserver.gameserver.handler.IItemHandler;
 import com.l2jserver.gameserver.model.actor.L2Playable;
-import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
+import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.serverpackets.SSQStatus;
 
 /**
@@ -29,8 +29,11 @@ public class SevenSignsRecord implements IItemHandler
 	@Override
 	public boolean useItem(L2Playable playable, L2ItemInstance item, boolean forceUse)
 	{
-		if (!(playable instanceof L2PcInstance))
+		if (!playable.isPlayer())
+		{
+			playable.sendPacket(SystemMessageId.ITEM_NOT_FOR_PETS);
 			return false;
+		}
 		
 		playable.sendPacket(new SSQStatus(playable.getObjectId(), 1));
 		return true;
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/SoulShots.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/SoulShots.java
index e2c2330c8255c532ef35d2e856fa8ed96a033609..74659326674d23c1d3fdbac862a804f881255bda 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/SoulShots.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/SoulShots.java
@@ -35,6 +35,7 @@ public class SoulShots implements IItemHandler
 	{
 		if (!playable.isPlayer())
 		{
+			playable.sendPacket(SystemMessageId.ITEM_NOT_FOR_PETS);
 			return false;
 		}
 		
@@ -106,7 +107,7 @@ public class SoulShots implements IItemHandler
 		
 		// Send message to client
 		activeChar.sendPacket(SystemMessageId.ENABLED_SOULSHOT);
-		Broadcast.toSelfAndKnownPlayersInRadius(activeChar, new MagicSkillUse(activeChar, activeChar, skills[0].getSkillId(), skills[0].getSkillLvl(), 0, 0), 360000);
+		Broadcast.toSelfAndKnownPlayersInRadius(activeChar, new MagicSkillUse(activeChar, activeChar, skills[0].getSkillId(), skills[0].getSkillLvl(), 0, 0), 2000);
 		return true;
 	}
 }
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/SpecialXMas.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/SpecialXMas.java
index ced98108a73e5339a5219f00e26c41312c0a8081..2d594fbfb1c1f30f69765691707d6dfe31f22878 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/SpecialXMas.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/SpecialXMas.java
@@ -16,8 +16,8 @@ package handlers.itemhandlers;
 
 import com.l2jserver.gameserver.handler.IItemHandler;
 import com.l2jserver.gameserver.model.actor.L2Playable;
-import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
+import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.serverpackets.ShowXMasSeal;
 
 /**
@@ -28,8 +28,11 @@ public class SpecialXMas implements IItemHandler
 	@Override
 	public boolean useItem(L2Playable playable, L2ItemInstance item, boolean forceUse)
 	{
-		if (!(playable instanceof L2PcInstance))
+		if (!playable.isPlayer())
+		{
+			playable.sendPacket(SystemMessageId.ITEM_NOT_FOR_PETS);
 			return false;
+		}
 		
 		playable.broadcastPacket(new ShowXMasSeal(item.getItemId()));
 		return true;
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/SpiritShot.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/SpiritShot.java
index 377037ae9ccfbb6c94b55eb5c6b15caaa30ab373..695c99481a3a95dc27eb5d20b6258fe42dc394ee 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/SpiritShot.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/SpiritShot.java
@@ -34,6 +34,7 @@ public class SpiritShot implements IItemHandler
 	{
 		if (!playable.isPlayer())
 		{
+			playable.sendPacket(SystemMessageId.ITEM_NOT_FOR_PETS);
 			return false;
 		}
 		
@@ -85,7 +86,7 @@ public class SpiritShot implements IItemHandler
 		
 		// Send message to client
 		activeChar.sendPacket(SystemMessageId.ENABLED_SPIRITSHOT);
-		Broadcast.toSelfAndKnownPlayersInRadius(activeChar, new MagicSkillUse(activeChar, activeChar, skills[0].getSkillId(), skills[0].getSkillLvl(), 0, 0), 360000);
+		Broadcast.toSelfAndKnownPlayersInRadius(activeChar, new MagicSkillUse(activeChar, activeChar, skills[0].getSkillId(), skills[0].getSkillLvl(), 0, 0), 2000);
 		return true;
 	}
 }
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/SummonItems.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/SummonItems.java
index 552f2fda38be00d7e38da7b0eb5e8fbc3222279e..dec15a3d224cbc61893c241d348087cb6492f69d 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/SummonItems.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/SummonItems.java
@@ -46,14 +46,19 @@ import com.l2jserver.gameserver.network.serverpackets.PetItemList;
 import com.l2jserver.gameserver.network.serverpackets.SetupGauge;
 import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
 import com.l2jserver.gameserver.util.Broadcast;
-
+/**
+ * UnAfraid: TODO: Rewrite me :D
+ */
 public class SummonItems implements IItemHandler
 {
 	@Override
 	public boolean useItem(L2Playable playable, L2ItemInstance item, boolean forceUse)
 	{
-		if (!(playable instanceof L2PcInstance))
+		if (!playable.isPlayer())
+		{
+			playable.sendPacket(SystemMessageId.ITEM_NOT_FOR_PETS);
 			return false;
+		}
 		
 		if (!TvTEvent.onItemSummon(playable.getObjectId()))
 			return false;
@@ -69,9 +74,9 @@ public class SummonItems implements IItemHandler
 			return false;
 		}
 		
-		if(activeChar.getBlockCheckerArena() != -1)
+		if (activeChar.getBlockCheckerArena() != -1)
 			return false;
-
+		
 		if (activeChar.inObserverMode())
 			return false;
 		
@@ -216,9 +221,7 @@ public class SummonItems implements IItemHandler
 				_activeChar.setIsCastingNow(false);
 				
 				// check for summon item validity
-				if (_item == null
-						|| _item.getOwnerId() != _activeChar.getObjectId()
-						|| _item.getLocation() != L2ItemInstance.ItemLocation.INVENTORY)
+				if (_item == null || _item.getOwnerId() != _activeChar.getObjectId() || _item.getLocation() != L2ItemInstance.ItemLocation.INVENTORY)
 					return;
 				
 				final L2PetInstance petSummon = L2PetInstance.spawnPet(_npcTemplate, _activeChar, _item);
@@ -243,8 +246,8 @@ public class SummonItems implements IItemHandler
 				
 				_activeChar.setPet(petSummon);
 				
-				//JIV remove - done on spawn
-				//L2World.getInstance().storeObject(petSummon);
+				// JIV remove - done on spawn
+				// L2World.getInstance().storeObject(petSummon);
 				petSummon.spawnMe(_activeChar.getX() + 50, _activeChar.getY() + 100, _activeChar.getZ());
 				petSummon.startFeed();
 				_item.setEnchantLevel(petSummon.getLevel());
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/TeleportBookmark.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/TeleportBookmark.java
index 63c47dedbd7346a549bc7c983832867b4ce8043f..b08d775cfcfedfed631d0b493a00d72b8353eb82 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/TeleportBookmark.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/TeleportBookmark.java
@@ -30,12 +30,15 @@ public class TeleportBookmark implements IItemHandler
 	@Override
 	public boolean useItem(L2Playable playable, L2ItemInstance item, boolean forceUse)
 	{
-		if (playable == null || item == null || !(playable instanceof L2PcInstance))
+		if (!playable.isPlayer())
+		{
+			playable.sendPacket(SystemMessageId.ITEM_NOT_FOR_PETS);
 			return false;
+		}
 		
-		L2PcInstance player = (L2PcInstance) playable;
+		L2PcInstance player = playable.getActingPlayer();
 		
-		if(player.getBookMarkSlot() >= 9)
+		if (player.getBookMarkSlot() >= 9)
 		{
 			player.sendPacket(SystemMessageId.YOUR_NUMBER_OF_MY_TELEPORTS_SLOTS_HAS_REACHED_ITS_MAXIMUM_LIMIT);
 			return false;
@@ -43,7 +46,7 @@ public class TeleportBookmark implements IItemHandler
 		
 		player.destroyItem("Consume", item.getObjectId(), 1, null, false);
 		
-		player.setBookMarkSlot(player.getBookMarkSlot()+3);
+		player.setBookMarkSlot(player.getBookMarkSlot() + 3);
 		player.sendPacket(SystemMessageId.THE_NUMBER_OF_MY_TELEPORTS_SLOTS_HAS_BEEN_INCREASED);
 		
 		SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.S1_DISAPPEARED);