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 d2375d8383c9166bccf47cdc4523b28ad8024169..b31c95e7c55669e9ec801ccbad0467749d9c564d 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
@@ -14,12 +14,15 @@
  */
 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.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.network.SystemMessageId;
 import com.l2jserver.gameserver.network.serverpackets.MagicSkillUse;
 import com.l2jserver.gameserver.util.Broadcast;
@@ -27,16 +30,26 @@ import com.l2jserver.gameserver.util.Broadcast;
 public class BlessedSpiritShot implements IItemHandler
 {
 	@Override
-	public synchronized boolean useItem(L2Playable playable, L2ItemInstance item, boolean forceUse)
+	public boolean useItem(L2Playable playable, L2ItemInstance item, boolean forceUse)
 	{
-		if (!(playable instanceof L2PcInstance))
+		if (!playable.isPlayer())
+		{
 			return false;
+		}
 		
 		L2PcInstance activeChar = (L2PcInstance) playable;
 		L2ItemInstance weaponInst = activeChar.getActiveWeaponInstance();
 		L2Weapon weaponItem = activeChar.getActiveWeaponItem();
+		final SkillHolder[] skills = item.getItem().getSkills();
+		
 		int itemId = item.getItemId();
 		
+		if (skills == null)
+		{
+			_log.log(Level.WARNING, getClass().getSimpleName() + ": is missing skills!");
+			return false;
+		}
+		
 		// Check if Blessed SpiritShot can be used
 		if (weaponInst == null || weaponItem == null || weaponItem.getSpiritShotCount() == 0)
 		{
@@ -50,39 +63,7 @@ public class BlessedSpiritShot implements IItemHandler
 			return false;
 		
 		// Check for correct grade
-		final int weaponGrade = weaponItem.getCrystalType();
-		
-		boolean gradeCheck = true;
-		
-		switch (weaponGrade)
-		{
-			case L2Item.CRYSTAL_NONE:
-				if (itemId != 3947)
-					gradeCheck = false;
-				break;
-			case L2Item.CRYSTAL_D:
-				if (itemId != 3948 && itemId != 22072)
-					gradeCheck = false;
-				break;
-			case L2Item.CRYSTAL_C:
-				if (itemId != 3949 && itemId != 22073)
-					gradeCheck = false;
-				break;
-			case L2Item.CRYSTAL_B:
-				if (itemId != 3950 && itemId != 22074)
-					gradeCheck = false;
-				break;
-			case L2Item.CRYSTAL_A:
-				if (itemId != 3951 && itemId != 22075)
-					gradeCheck = false;
-				break;
-			case L2Item.CRYSTAL_S:
-			case L2Item.CRYSTAL_S80:
-			case L2Item.CRYSTAL_S84:
-				if (itemId != 3952 && itemId != 22076)
-					gradeCheck = false;
-				break;
-		}
+		boolean gradeCheck = item.isEtcItem() && item.getEtcItem().getDefaultAction() == L2ActionType.spiritshot && weaponInst.getItem().getItemGradeSPlus() == item.getItem().getItemGradeSPlus();
 		
 		if (!gradeCheck)
 		{
@@ -92,7 +73,6 @@ public class BlessedSpiritShot implements IItemHandler
 			return false;
 		}
 		
-		
 		// Consume Blessed SpiritShot if player has enough of them
 		if (!activeChar.destroyItemWithoutTrace("Consume", item.getObjectId(), weaponItem.getSpiritShotCount(), null, false))
 		{
@@ -106,45 +86,7 @@ public class BlessedSpiritShot implements IItemHandler
 		
 		// Send message to client
 		activeChar.sendPacket(SystemMessageId.ENABLED_SPIRITSHOT);
-		int skillId = 0;
-		switch (itemId)
-		{
-			case 3947:
-				skillId=2061;
-				break;
-			case 3948:
-				skillId=2160;
-				break;
-			case 3949:
-				skillId=2161;
-				break;
-			case 3950:
-				skillId=2162;
-				break;
-			case 3951:
-				skillId=2163;
-				break;
-			case 3952:
-				skillId=2164;
-				break;
-			case 22072:
-				skillId=26050;
-				break;
-			case 22073:
-				skillId=26051;
-				break;
-			case 22074:
-				skillId=26052;
-				break;
-			case 22075:
-				skillId=26053;
-				break;
-			case 22076:
-				skillId=26054;
-				break;
-				
-		}
-		Broadcast.toSelfAndKnownPlayersInRadius(activeChar, new MagicSkillUse(activeChar, activeChar, skillId, 1, 0, 0), 360000);
+		Broadcast.toSelfAndKnownPlayersInRadius(activeChar, new MagicSkillUse(activeChar, activeChar, skills[0].getSkillId(), skills[0].getSkillLvl(), 0, 0), 360000);
 		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 5d016d0271ce3336d835d749a96b1a54161b858a..e2c2330c8255c532ef35d2e856fa8ed96a033609 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
@@ -14,12 +14,15 @@
  */
 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.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.network.SystemMessageId;
 import com.l2jserver.gameserver.network.serverpackets.MagicSkillUse;
 import com.l2jserver.gameserver.util.Broadcast;
@@ -30,7 +33,7 @@ public class SoulShots implements IItemHandler
 	@Override
 	public boolean useItem(L2Playable playable, L2ItemInstance item, boolean forceUse)
 	{
-		if (!(playable instanceof L2PcInstance))
+		if (!playable.isPlayer())
 		{
 			return false;
 		}
@@ -38,7 +41,15 @@ public class SoulShots implements IItemHandler
 		final L2PcInstance activeChar = playable.getActingPlayer();
 		final L2ItemInstance weaponInst = activeChar.getActiveWeaponInstance();
 		final L2Weapon weaponItem = activeChar.getActiveWeaponItem();
-		final int itemId = item.getItemId();
+		final SkillHolder[] skills = item.getItem().getSkills();
+		
+		int itemId = item.getItemId();
+		
+		if (skills == null)
+		{
+			_log.log(Level.WARNING, getClass().getSimpleName() + ": is missing skills!");
+			return false;
+		}
 		
 		// Check if Soul shot can be used
 		if ((weaponInst == null) || (weaponItem.getSoulShotCount() == 0))
@@ -50,49 +61,7 @@ public class SoulShots implements IItemHandler
 			return false;
 		}
 		
-		boolean gradeCheck = true;
-		final int weaponGrade = weaponItem.getCrystalType();
-		switch (weaponGrade)
-		{
-			case L2Item.CRYSTAL_NONE:
-				if ((itemId != 5789) && (itemId != 1835))
-				{
-					gradeCheck = false;
-				}
-				break;
-			case L2Item.CRYSTAL_D:
-				if ((itemId != 1463) && (itemId != 22082))
-				{
-					gradeCheck = false;
-				}
-				break;
-			case L2Item.CRYSTAL_C:
-				if ((itemId != 1464) && (itemId != 22083))
-				{
-					gradeCheck = false;
-				}
-				break;
-			case L2Item.CRYSTAL_B:
-				if ((itemId != 1465) && (itemId != 22084))
-				{
-					gradeCheck = false;
-				}
-				break;
-			case L2Item.CRYSTAL_A:
-				if ((itemId != 1466) && (itemId != 22085))
-				{
-					gradeCheck = false;
-				}
-				break;
-			case L2Item.CRYSTAL_S:
-			case L2Item.CRYSTAL_S80:
-			case L2Item.CRYSTAL_S84:
-				if ((itemId != 1467) && (itemId != 22086))
-				{
-					gradeCheck = false;
-				}
-				break;
-		}
+		boolean gradeCheck = item.isEtcItem() && item.getEtcItem().getDefaultAction() == L2ActionType.soulshot && weaponInst.getItem().getItemGradeSPlus() == item.getItem().getItemGradeSPlus();
 		
 		if (!gradeCheck)
 		{
@@ -134,47 +103,10 @@ public class SoulShots implements IItemHandler
 		{
 			activeChar.soulShotLock.unlock();
 		}
-		int skillId = 0;
-		switch (itemId)
-		{
-			case 1835:
-			case 5789:
-				skillId = 2039;
-				break;
-			case 1463:
-				skillId = 2150;
-				break;
-			case 1464:
-				skillId = 2151;
-				break;
-			case 1465:
-				skillId = 2152;
-				break;
-			case 1466:
-				skillId = 2153;
-				break;
-			case 1467:
-				skillId = 2154;
-				break;
-			case 22082:
-				skillId = 26060;
-				break;
-			case 22083:
-				skillId = 26061;
-				break;
-			case 22084:
-				skillId = 26062;
-				break;
-			case 22085:
-				skillId = 26063;
-				break;
-			case 22086:
-				skillId = 26064;
-				break;
-		}
+		
 		// Send message to client
 		activeChar.sendPacket(SystemMessageId.ENABLED_SOULSHOT);
-		Broadcast.toSelfAndKnownPlayersInRadius(activeChar, new MagicSkillUse(activeChar, activeChar, skillId, 1, 0, 0), 360000);
+		Broadcast.toSelfAndKnownPlayersInRadius(activeChar, new MagicSkillUse(activeChar, activeChar, skills[0].getSkillId(), skills[0].getSkillLvl(), 0, 0), 360000);
 		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 6dabbdd353b45c7a47d0e523b445689a833793a0..377037ae9ccfbb6c94b55eb5c6b15caaa30ab373 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
@@ -14,12 +14,15 @@
  */
 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.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.network.SystemMessageId;
 import com.l2jserver.gameserver.network.serverpackets.MagicSkillUse;
 import com.l2jserver.gameserver.util.Broadcast;
@@ -27,16 +30,26 @@ import com.l2jserver.gameserver.util.Broadcast;
 public class SpiritShot implements IItemHandler
 {
 	@Override
-	public synchronized boolean useItem(L2Playable playable, L2ItemInstance item, boolean forceUse)
+	public boolean useItem(L2Playable playable, L2ItemInstance item, boolean forceUse)
 	{
-		if (!(playable instanceof L2PcInstance))
+		if (!playable.isPlayer())
+		{
 			return false;
+		}
+		
+		final L2PcInstance activeChar = (L2PcInstance) playable;
+		final L2ItemInstance weaponInst = activeChar.getActiveWeaponInstance();
+		final L2Weapon weaponItem = activeChar.getActiveWeaponItem();
+		final SkillHolder[] skills = item.getItem().getSkills();
 		
-		L2PcInstance activeChar = (L2PcInstance) playable;
-		L2ItemInstance weaponInst = activeChar.getActiveWeaponInstance();
-		L2Weapon weaponItem = activeChar.getActiveWeaponItem();
 		int itemId = item.getItemId();
 		
+		if (skills == null)
+		{
+			_log.log(Level.WARNING, getClass().getSimpleName() + ": is missing skills!");
+			return false;
+		}
+		
 		// Check if Spirit shot can be used
 		if (weaponInst == null || weaponItem.getSpiritShotCount() == 0)
 		{
@@ -49,39 +62,7 @@ public class SpiritShot implements IItemHandler
 		if (weaponInst.getChargedSpiritshot() != L2ItemInstance.CHARGED_NONE)
 			return false;
 		
-		final int weaponGrade = weaponItem.getCrystalType();
-		
-		boolean gradeCheck = true;
-		
-		switch (weaponGrade)
-		{
-			case L2Item.CRYSTAL_NONE:
-				if (itemId != 5790 && itemId != 2509)
-					gradeCheck = false;
-				break;
-			case L2Item.CRYSTAL_D:
-				if (itemId != 2510 && itemId != 22077)
-					gradeCheck = false;
-				break;
-			case L2Item.CRYSTAL_C:
-				if (itemId != 2511 && itemId != 22078)
-					gradeCheck = false;
-				break;
-			case L2Item.CRYSTAL_B:
-				if (itemId != 2512 && itemId != 22079)
-					gradeCheck = false;
-				break;
-			case L2Item.CRYSTAL_A:
-				if (itemId != 2513 && itemId != 22080)
-					gradeCheck = false;
-				break;
-			case L2Item.CRYSTAL_S:
-			case L2Item.CRYSTAL_S80:
-			case L2Item.CRYSTAL_S84:
-				if (itemId != 2514 && itemId != 22081)
-					gradeCheck = false;
-				break;
-		}
+		boolean gradeCheck = item.isEtcItem() && item.getEtcItem().getDefaultAction() == L2ActionType.spiritshot && weaponInst.getItem().getItemGradeSPlus() == item.getItem().getItemGradeSPlus();
 		
 		if (!gradeCheck)
 		{
@@ -101,48 +82,10 @@ public class SpiritShot implements IItemHandler
 		
 		// Charge Spirit shot
 		weaponInst.setChargedSpiritshot(L2ItemInstance.CHARGED_SPIRITSHOT);
-		int skillId = 0;
-		switch (itemId)
-		{
-			case 2509:
-			case 5790:
-				skillId=2061;
-				break;
-			case 2510:
-				skillId=2155;
-				break;
-			case 2511:
-				skillId=2156;
-				break;
-			case 2512:
-				skillId=2157;
-				break;
-			case 2513:
-				skillId=2158;
-				break;
-			case 2514:
-				skillId=2159;
-				break;
-			case 22077:
-				skillId=26055;
-				break;
-			case 22078:
-				skillId=26056;
-				break;
-			case 22079:
-				skillId=26057;
-				break;
-			case 22080:
-				skillId=26058;
-				break;
-			case 22081:
-				skillId=26059;
-				break;
-				
-		}
+		
 		// Send message to client
 		activeChar.sendPacket(SystemMessageId.ENABLED_SPIRITSHOT);
-		Broadcast.toSelfAndKnownPlayersInRadius(activeChar, new MagicSkillUse(activeChar, activeChar, skillId, 1, 0, 0), 360000);
+		Broadcast.toSelfAndKnownPlayersInRadius(activeChar, new MagicSkillUse(activeChar, activeChar, skills[0].getSkillId(), skills[0].getSkillLvl(), 0, 0), 360000);
 		return true;
 	}
 }