diff --git a/MMOCore-API/src/main/java/net/Indyuce/mmocore/api/player/PlayerData.java b/MMOCore-API/src/main/java/net/Indyuce/mmocore/api/player/PlayerData.java
index 24e1a492..4360f3d0 100644
--- a/MMOCore-API/src/main/java/net/Indyuce/mmocore/api/player/PlayerData.java
+++ b/MMOCore-API/src/main/java/net/Indyuce/mmocore/api/player/PlayerData.java
@@ -4,8 +4,6 @@ import io.lumine.mythic.lib.MythicLib;
 import io.lumine.mythic.lib.api.player.MMOPlayerData;
 import io.lumine.mythic.lib.player.cooldown.CooldownMap;
 import io.lumine.mythic.lib.player.skill.PassiveSkill;
-import net.Indyuce.mmocore.party.provided.MMOCorePartyModule;
-import net.Indyuce.mmocore.party.provided.Party;
 import net.Indyuce.mmocore.MMOCore;
 import net.Indyuce.mmocore.api.ConfigMessage;
 import net.Indyuce.mmocore.api.SoundEvent;
@@ -32,6 +30,7 @@ import net.Indyuce.mmocore.experience.droptable.ExperienceTable;
 import net.Indyuce.mmocore.guild.provided.Guild;
 import net.Indyuce.mmocore.loot.chest.particle.SmallParticleEffect;
 import net.Indyuce.mmocore.party.AbstractParty;
+import net.Indyuce.mmocore.party.provided.MMOCorePartyModule;
 import net.Indyuce.mmocore.party.provided.Party;
 import net.Indyuce.mmocore.player.Unlockable;
 import net.Indyuce.mmocore.skill.ClassSkill;
@@ -59,6 +58,7 @@ import org.jetbrains.annotations.NotNull;
 import javax.annotation.Nullable;
 import java.util.*;
 import java.util.logging.Level;
+import java.util.stream.Collectors;
 
 
 public class PlayerData extends OfflinePlayerData implements Closable, ExperienceTableClaimer {
@@ -299,7 +299,7 @@ public class PlayerData extends OfflinePlayerData implements Closable, Experienc
 
     public void resetSkillTree(SkillTree skillTree) {
         for (SkillTreeNode node : skillTree.getNodes()) {
-            node.getExperienceTable().reset(this,node);
+            node.getExperienceTable().reset(this, node);
             setNodeLevel(node, 0);
         }
         skillTree.setupNodeState(this);
@@ -337,7 +337,7 @@ public class PlayerData extends OfflinePlayerData implements Closable, Experienc
     public void close() {
 
         // Remove from party if it is MMO Party Module
-        if(MMOCore.plugin.partyModule instanceof MMOCorePartyModule) {
+        if (MMOCore.plugin.partyModule instanceof MMOCorePartyModule) {
             AbstractParty party = getParty();
             if (party != null && party instanceof Party)
                 ((Party) party).removeMember(this);
@@ -751,19 +751,25 @@ public class PlayerData extends OfflinePlayerData implements Closable, Experienc
         if (value <= 0)
             return;
 
-        if (hasReachedMaxLevel()) {
-            setExperience(0);
-            return;
-        }
-
         // Splitting exp through party members
         AbstractParty party;
         if (splitExp && (party = getParty()) != null) {
-            List<PlayerData> onlineMembers = party.getOnlineMembers();
-            value /= onlineMembers.size();
-            for (PlayerData member : onlineMembers)
-                if (!equals(member))
-                    member.giveExperience(value, source, null, false);
+            final List<PlayerData> nearbyMembers = party.getOnlineMembers().stream()
+                    .filter(pd -> {
+                        if (equals(pd))
+                            return false;
+                        final double maxDis = MMOCore.plugin.configManager.partyMaxExpSplitRange;
+                        return maxDis <= 0 || pd.getPlayer().getLocation().distanceSquared(getPlayer().getLocation()) < maxDis * maxDis;
+                    }).collect(Collectors.toList());
+            value /= nearbyMembers.size();
+            for (PlayerData member : nearbyMembers)
+                member.giveExperience(value, source, null, false);
+        }
+
+        // Must be placed after exp spliting
+        if (hasReachedMaxLevel()) {
+            setExperience(0);
+            return;
         }
 
         // Apply buffs AFTER splitting exp
diff --git a/MMOCore-API/src/main/java/net/Indyuce/mmocore/manager/ConfigManager.java b/MMOCore-API/src/main/java/net/Indyuce/mmocore/manager/ConfigManager.java
index 6c99ef09..3e5d85ec 100644
--- a/MMOCore-API/src/main/java/net/Indyuce/mmocore/manager/ConfigManager.java
+++ b/MMOCore-API/src/main/java/net/Indyuce/mmocore/manager/ConfigManager.java
@@ -2,8 +2,8 @@ package net.Indyuce.mmocore.manager;
 
 import io.lumine.mythic.lib.MythicLib;
 import net.Indyuce.mmocore.MMOCore;
-import net.Indyuce.mmocore.api.player.PlayerData;
 import net.Indyuce.mmocore.api.ConfigFile;
+import net.Indyuce.mmocore.api.player.PlayerData;
 import net.Indyuce.mmocore.api.util.input.ChatInput;
 import net.Indyuce.mmocore.api.util.input.PlayerInput;
 import net.Indyuce.mmocore.api.util.input.PlayerInput.InputType;
@@ -26,8 +26,8 @@ public class ConfigManager {
     public String partyChatPrefix, noSkillBoundPlaceholder;
     public ChatColor staminaFull, staminaHalf, staminaEmpty;
     public long combatLogTimer, lootChestExpireTime, lootChestPlayerCooldown, globalSkillCooldown;
-    public double lootChestsChanceWeight, fishingDropsChanceWeight;
-    public int maxPartyLevelDifference,maxBoundActiveSkills,maxBoundPassiveSkills,waypointWarpTime;
+    public double lootChestsChanceWeight, fishingDropsChanceWeight, partyMaxExpSplitRange;
+    public int maxPartyLevelDifference, maxBoundActiveSkills, maxBoundPassiveSkills, waypointWarpTime;
 
     private final FileConfiguration messages;
 
@@ -109,6 +109,7 @@ public class ConfigManager {
         lootChestsChanceWeight = MMOCore.plugin.getConfig().getDouble("chance-stat-weight.loot-chests");
         fishingDropsChanceWeight = MMOCore.plugin.getConfig().getDouble("chance-stat-weight.fishing-drops");
         maxPartyLevelDifference = MMOCore.plugin.getConfig().getInt("party.max-level-difference");
+        partyMaxExpSplitRange = MMOCore.plugin.getConfig().getDouble("party.max-exp-split-range");
         splitProfessionExp = MMOCore.plugin.getConfig().getBoolean("party.profession-exp-split");
         disableQuestBossBar = MMOCore.plugin.getConfig().getBoolean("mmocore-quests.disable-boss-bar");
 
diff --git a/MMOCore-Dist/src/main/resources/config.yml b/MMOCore-Dist/src/main/resources/config.yml
index 40a456b7..a6d6024c 100644
--- a/MMOCore-Dist/src/main/resources/config.yml
+++ b/MMOCore-Dist/src/main/resources/config.yml
@@ -149,6 +149,11 @@ party:
   # that feature.
   max-level-difference: 3
 
+  # Exp won't be split if players are too far apart.
+  #
+  # Set to 0 to disable
+  max-exp-split-range: 50
+
   # When enabled, being in a party also splits profession exp
   profession-exp-split: false