diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/effecthandlers/SoulEating.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/effecthandlers/SoulEating.java
index 441a2772226ba88806b3637321c5968becd90ae7..b6f6a377bd378d35593d27e39d7645987d75cb94 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/effecthandlers/SoulEating.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/effecthandlers/SoulEating.java
@@ -25,7 +25,8 @@ import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.conditions.Condition;
 import com.l2jserver.gameserver.model.effects.AbstractEffect;
 import com.l2jserver.gameserver.model.events.EventType;
-import com.l2jserver.gameserver.model.events.listeners.AbstractEventListener;
+import com.l2jserver.gameserver.model.events.impl.character.playable.OnPlayableExpChanged;
+import com.l2jserver.gameserver.model.events.listeners.ConsumerEventListener;
 import com.l2jserver.gameserver.model.skills.BuffInfo;
 import com.l2jserver.gameserver.model.stats.Stats;
 import com.l2jserver.gameserver.network.SystemMessageId;
@@ -50,7 +51,7 @@ public final class SoulEating extends AbstractEffect
 	{
 		if (info.getEffected().isPlayer())
 		{
-			info.getEffected().getListeners(EventType.ON_PLAYABLE_EXP_CHANGED).stream().filter(listener -> listener.getOwner() == this).forEach(AbstractEventListener::unregisterMe);
+			info.getEffected().removeListenerIf(EventType.ON_PLAYABLE_EXP_CHANGED, listener -> listener.getOwner() == this);
 		}
 	}
 	
@@ -82,7 +83,7 @@ public final class SoulEating extends AbstractEffect
 	{
 		if (info.getEffected().isPlayer())
 		{
-			info.getEffected().removeListenerIf(EventType.ON_PLAYABLE_EXP_CHANGED, listener -> listener.getOwner() == this);
+			info.getEffected().addListener(new ConsumerEventListener(info.getEffected(), EventType.ON_PLAYABLE_EXP_CHANGED, (OnPlayableExpChanged event) -> onExperienceReceived(event.getActiveChar(), (event.getNewExp() - event.getOldExp())), this));
 		}
 	}
 }