diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/NpcBuffers/NpcBufferAI.java b/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/NpcBuffers/NpcBufferAI.java
index 867554a98dbc88cd8c8dd8513e8b756dfcd88f41..953141a8fbafa2558a0466be785bc444b8897380 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/NpcBuffers/NpcBufferAI.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/NpcBuffers/NpcBufferAI.java
@@ -18,9 +18,7 @@
  */
 package ai.npc.NpcBuffers;
 
-import com.l2jserver.Config;
 import com.l2jserver.gameserver.ThreadPoolManager;
-import com.l2jserver.gameserver.model.L2Party;
 import com.l2jserver.gameserver.model.actor.L2Character;
 import com.l2jserver.gameserver.model.actor.L2Npc;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
@@ -49,31 +47,33 @@ public class NpcBufferAI implements Runnable
 			return;
 		}
 		
-		final Skill skill = _skillData.getSkill();
 		if ((_npc.getSummoner() == null) || !_npc.getSummoner().isPlayer())
 		{
 			return;
 		}
+		
+		final Skill skill = _skillData.getSkill();
 		final L2PcInstance player = _npc.getSummoner().getActingPlayer();
+		
 		switch (_skillData.getAffectScope())
 		{
 			case PARTY:
 			{
-				if (!player.isInParty())
+				if (player.isInParty())
 				{
-					if (Util.checkIfInRange(Config.ALT_PARTY_RANGE, _npc, player, true))
+					for (L2PcInstance member : player.getParty().getMembers())
 					{
-						skill.applyEffects(player, player);
+						if (Util.checkIfInRange(skill.getAffectRange(), _npc, member, true))
+						{
+							skill.applyEffects(player, member);
+						}
 					}
 				}
 				else
 				{
-					for (L2PcInstance member : player.getParty().getMembers())
+					if (Util.checkIfInRange(skill.getAffectRange(), _npc, player, true))
 					{
-						if (Util.checkIfInRange(Config.ALT_PARTY_RANGE, _npc, member, true))
-						{
-							skill.applyEffects(player, member);
-						}
+						skill.applyEffects(player, player);
 					}
 				}
 				break;
@@ -113,36 +113,28 @@ public class NpcBufferAI implements Runnable
 		if (target.isPlayable())
 		{
 			final L2PcInstance targetPlayer = target.getActingPlayer();
-			if (targetPlayer == null)
+			
+			if (player == targetPlayer)
 			{
-				return false;
+				return true;
 			}
 			
-			if (player.isInParty())
+			if (player.isInParty() && targetPlayer.isInParty() && (player.getParty() == targetPlayer.getParty()))
 			{
-				final L2Party party = player.getParty();
-				
-				// Same party.
-				if (party.containsPlayer(targetPlayer))
-				{
-					return true;
-				}
-				
-				// Same command channel.
-				if (party.isInCommandChannel() && party.getCommandChannel().containsPlayer(targetPlayer))
-				{
-					return true;
-				}
+				return true;
+			}
+			
+			if (player.getParty().isInCommandChannel() && (player.getParty().getCommandChannel() == target.getParty().getCommandChannel()))
+			{
+				return true;
 			}
 			
-			// Same clan.
-			if ((player.getClanId() > 0) && (player.getClanId() == target.getClanId()))
+			if ((player.getClanId() > 0) && (player.getClanId() == targetPlayer.getClanId()))
 			{
 				return true;
 			}
 			
-			// Same ally.
-			if ((player.getAllyId() > 0) && (player.getAllyId() == target.getAllyId()))
+			if ((player.getAllyId() > 0) && (player.getAllyId() == targetPlayer.getAllyId()))
 			{
 				return true;
 			}
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/targethandlers/Ground.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/targethandlers/Ground.java
index ef4e42121613d9d66dfea8ef9fd988b268f63673..ff463d736d1ae7cbf6ae10ca8dea1d0ef702a6b4 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/targethandlers/Ground.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/targethandlers/Ground.java
@@ -18,25 +18,47 @@
  */
 package handlers.targethandlers;
 
+import java.util.ArrayList;
+import java.util.List;
+
 import com.l2jserver.gameserver.handler.ITargetTypeHandler;
 import com.l2jserver.gameserver.model.L2Object;
 import com.l2jserver.gameserver.model.actor.L2Character;
+import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.skills.Skill;
 import com.l2jserver.gameserver.model.skills.targets.L2TargetType;
+import com.l2jserver.gameserver.model.zone.ZoneId;
 
 /**
- * @author UnAfraid
+ * @author St3eT
  */
 public class Ground implements ITargetTypeHandler
 {
-	
 	@Override
 	public L2Object[] getTargetList(Skill skill, L2Character activeChar, boolean onlyFirst, L2Character target)
 	{
-		return new L2Character[]
+		final List<L2Character> targetList = new ArrayList<>();
+		final L2PcInstance player = (L2PcInstance) activeChar;
+		final int maxTargets = skill.getAffectLimit();
+		final boolean srcInArena = (activeChar.isInsideZone(ZoneId.PVP) && !activeChar.isInsideZone(ZoneId.SIEGE));
+		
+		for (L2Character character : activeChar.getKnownList().getKnownCharacters())
 		{
-			activeChar
-		};
+			if ((character != null) && character.isInsideRadius(player.getCurrentSkillWorldPosition(), skill.getAffectRange(), false, false))
+			{
+				if (!Skill.checkForAreaOffensiveSkills(activeChar, character, skill, srcInArena))
+				{
+					continue;
+				}
+				
+				if ((maxTargets > 0) && (targetList.size() >= maxTargets))
+				{
+					break;
+				}
+				targetList.add(character);
+			}
+		}
+		return targetList.isEmpty() ? EMPTY_TARGET_LIST : targetList.toArray(new L2Character[targetList.size()]);
 	}
 	
 	@Override
@@ -44,4 +66,4 @@ public class Ground implements ITargetTypeHandler
 	{
 		return L2TargetType.GROUND;
 	}
-}
+}
\ No newline at end of file
diff --git a/L2J_DataPack_BETA/dist/game/data/stats/skills/01400-01499.xml b/L2J_DataPack_BETA/dist/game/data/stats/skills/01400-01499.xml
index 37642c0c473e3913d6b12c539ee835f81e419b48..306d9fdc5fc283bfcbdda46f9d9472d16fea23e6 100644
--- a/L2J_DataPack_BETA/dist/game/data/stats/skills/01400-01499.xml
+++ b/L2J_DataPack_BETA/dist/game/data/stats/skills/01400-01499.xml
@@ -681,9 +681,10 @@
 	</skill>
 	<skill id="1419" levels="1" name="Volcano">
 		<set name="affectLimit" val="15-25" />
-		<set name="affectRange" val="180" />
+		<set name="affectRange" val="200" />
 		<set name="blockedInOlympiad" val="true" />
 		<set name="castRange" val="900" />
+		<set name="channelingSkillId" val="5130" />
 		<set name="channelingTickInterval" val="2" />
 		<set name="effectPoint" val="-676" />
 		<set name="element" val="0" /> <!-- Fire -->
@@ -708,9 +709,10 @@
 	</skill>
 	<skill id="1420" levels="1" name="Cyclone">
 		<set name="affectLimit" val="15-25" />
-		<set name="affectRange" val="180" />
+		<set name="affectRange" val="200" />
 		<set name="blockedInOlympiad" val="true" />
 		<set name="castRange" val="900" />
+		<set name="channelingSkillId" val="5132" />
 		<set name="channelingTickInterval" val="2" />
 		<set name="effectPoint" val="-676" />
 		<set name="element" val="2" /> <!-- Wind -->
@@ -735,9 +737,10 @@
 	</skill>
 	<skill id="1421" levels="1" name="Raging Waves">
 		<set name="affectLimit" val="15-25" />
-		<set name="affectRange" val="180" />
+		<set name="affectRange" val="200" />
 		<set name="blockedInOlympiad" val="true" />
 		<set name="castRange" val="900" />
+		<set name="channelingSkillId" val="5131" />
 		<set name="channelingTickInterval" val="2" />
 		<set name="effectPoint" val="-676" />
 		<set name="element" val="1" /> <!-- Water -->
@@ -783,9 +786,10 @@
 	</skill>
 	<skill id="1423" levels="1" name="Gehenna">
 		<set name="affectLimit" val="15-25" />
-		<set name="affectRange" val="180" />
+		<set name="affectRange" val="200" />
 		<set name="blockedInOlympiad" val="true" />
 		<set name="castRange" val="900" />
+		<set name="channelingSkillId" val="5133" />
 		<set name="channelingTickInterval" val="2" />
 		<set name="effectPoint" val="-676" />
 		<set name="element" val="5" /> <!-- Dark -->
diff --git a/L2J_DataPack_BETA/dist/game/data/stats/skills/05100-05199.xml b/L2J_DataPack_BETA/dist/game/data/stats/skills/05100-05199.xml
index 52b4bf1b91792c673b14b40e155fa2c051512e9b..3eef56747511634d8fe000d6d3f527584bbd1644 100644
--- a/L2J_DataPack_BETA/dist/game/data/stats/skills/05100-05199.xml
+++ b/L2J_DataPack_BETA/dist/game/data/stats/skills/05100-05199.xml
@@ -541,27 +541,55 @@
 	</skill>
 	<skill id="5130" levels="1" name="Volcano">
 		<set name="isMagic" val="2" /> <!-- Static Skill -->
+		<set name="affectRange" val="300" />
 		<set name="magicLvl" val="80" />
 		<set name="operateType" val="A1" />
+		<set name="power" val="300" />
 		<set name="targetType" val="ONE" />
+		<set name="element" val="0" /> <!-- Fire -->
+		<set name="elementPower" val="20" />		
+		<for>
+			<effect name="MagicalAttack" />
+		</for>
 	</skill>
 	<skill id="5131" levels="1" name="Tsunami">
 		<set name="isMagic" val="2" /> <!-- Static Skill -->
+		<set name="affectRange" val="300" />
 		<set name="magicLvl" val="80" />
 		<set name="operateType" val="A1" />
+		<set name="power" val="300" />
 		<set name="targetType" val="ONE" />
+		<set name="element" val="1" /> <!-- Water -->
+		<set name="elementPower" val="20" />		
+		<for>
+			<effect name="MagicalAttack" />
+		</for>
 	</skill>
 	<skill id="5132" levels="1" name="Cyclone">
 		<set name="isMagic" val="2" /> <!-- Static Skill -->
+		<set name="affectRange" val="300" />
 		<set name="magicLvl" val="80" />
 		<set name="operateType" val="A1" />
+		<set name="power" val="300" />
 		<set name="targetType" val="ONE" />
+		<set name="element" val="2" /> <!-- Wind -->
+		<set name="elementPower" val="20" />		
+		<for>
+			<effect name="MagicalAttack" />
+		</for>
 	</skill>
 	<skill id="5133" levels="1" name="Gehenna">
 		<set name="isMagic" val="2" /> <!-- Static Skill -->
+		<set name="affectRange" val="300" />
 		<set name="magicLvl" val="80" />
 		<set name="operateType" val="A1" />
+		<set name="power" val="300" />
 		<set name="targetType" val="ONE" />
+		<set name="element" val="5" /> <!-- Dark -->
+		<set name="elementPower" val="20" />		
+		<for>
+			<effect name="MagicalAttack" />
+		</for>
 	</skill>
 	<skill id="5134" levels="1" name="Anti-Summoning Field">
 		<!-- TODO: Update to H5! -->