From b3dd0be06b816c9dce47dea7d4bc1090edceb5db Mon Sep 17 00:00:00 2001
From: Zoey76 <zoey_76@msn.com>
Date: Sun, 1 Sep 2019 02:07:00 -0300
Subject: [PATCH] Configuration rework

Added config reload and test.
---
 .gitignore                                    |  4 +-
 .settings/org.eclipse.jdt.core.prefs          |  2 +
 pom.xml                                       | 24 ++++-
 .../fantasy_isle/HandysBlockCheckerEvent.java |  7 +-
 .../datapack/ai/fantasy_isle/MC_Show.java     |  5 +-
 .../ai/individual/Antharas/Antharas.java      | 11 ++-
 .../datapack/ai/individual/Baium/Baium.java   |  5 +-
 .../datapack/ai/individual/Ballista.java      |  5 +-
 .../datapack/ai/individual/Beleth.java        |  5 +-
 .../datapack/ai/individual/Core.java          |  5 +-
 .../datapack/ai/individual/Orfen.java         |  5 +-
 .../datapack/ai/individual/QueenAnt.java      |  8 +-
 .../datapack/ai/individual/Valakas.java       |  7 +-
 .../ai/npc/AvantGarde/AvantGarde.java         | 11 ++-
 .../CastleChamberlain/CastleChamberlain.java  | 72 ++++++++-------
 .../ai/npc/ClanTrader/ClanTrader.java         |  9 +-
 .../ai/npc/ClassMaster/ClassMaster.java       | 58 ++++++------
 .../datapack/ai/npc/Fisherman/Fisherman.java  |  5 +-
 .../FortressSiegeManager.java                 |  6 +-
 .../ai/npc/ManorManager/ManorManager.java     |  5 +-
 .../MercenaryCaptain/MercenaryCaptain.java    |  8 +-
 .../GrandBossTeleporters.java                 |  5 +-
 .../SteelCitadelTeleport.java                 |  5 +-
 .../TerritoryManagers/TerritoryManagers.java  |  8 +-
 .../datapack/ai/npc/TownPets/TownPets.java    |  5 +-
 .../Trainers/HealerTrainer/HealerTrainer.java |  7 +-
 .../ai/npc/WyvernManager/WyvernManager.java   | 11 ++-
 .../RainbowSpringsChateau.java                |  5 +-
 .../custom/Validators/SubClassSkills.java     | 14 +--
 .../datapack/custom/events/Elpies/Elpies.java |  5 +-
 .../custom/events/Rabbits/Rabbits.java        |  5 +-
 .../datapack/custom/events/Race/Race.java     |  5 +-
 .../events/TvT/TvTManager/TvTManager.java     | 29 +++---
 .../custom/events/Wedding/Wedding.java        | 15 +--
 .../features/SkillTransfer/SkillTransfer.java |  9 +-
 .../datapack/gracia/AI/EnergySeeds.java       |  5 +-
 .../instances/SeedOfDestruction/Stage1.java   |  8 +-
 .../datapack/handlers/MasterHandler.java      | 15 +--
 .../handlers/actionhandlers/L2NpcAction.java  |  6 +-
 .../actionshifthandlers/L2NpcActionShift.java |  5 +-
 .../admincommandhandlers/AdminAdmin.java      | 92 ++++++-------------
 .../AdminAnnouncements.java                   |  5 +-
 .../admincommandhandlers/AdminBuffs.java      | 11 ++-
 .../admincommandhandlers/AdminCHSiege.java    |  5 +-
 .../AdminChangeAccessLevel.java               |  5 +-
 .../admincommandhandlers/AdminEditChar.java   | 27 +++---
 .../admincommandhandlers/AdminEffects.java    |  5 +-
 .../admincommandhandlers/AdminEnchant.java    |  7 +-
 .../AdminEventEngine.java                     | 16 ++--
 .../admincommandhandlers/AdminExpSp.java      |  7 +-
 .../admincommandhandlers/AdminHeal.java       |  7 +-
 .../admincommandhandlers/AdminHtml.java       |  7 +-
 .../admincommandhandlers/AdminInvul.java      |  7 +-
 .../admincommandhandlers/AdminKill.java       | 10 +-
 .../admincommandhandlers/AdminLogin.java      | 32 +++----
 .../admincommandhandlers/AdminMenu.java       |  7 +-
 .../admincommandhandlers/AdminPathNode.java   |  6 +-
 .../admincommandhandlers/AdminPunishment.java |  5 +-
 .../admincommandhandlers/AdminQuest.java      |  7 +-
 .../admincommandhandlers/AdminReload.java     | 44 +++++++--
 .../admincommandhandlers/AdminRes.java        |  5 +-
 .../admincommandhandlers/AdminSkill.java      |  7 +-
 .../admincommandhandlers/AdminSpawn.java      |  5 +-
 .../admincommandhandlers/AdminTeleport.java   | 12 +--
 .../AdminTerritoryWar.java                    |  5 +-
 .../admincommandhandlers/AdminTest.java       | 12 +--
 .../admincommandhandlers/AdminTvTEvent.java   |  5 +-
 .../admincommandhandlers/AdminVitality.java   |  5 +-
 .../bypasshandlers/ClanWarehouse.java         | 10 +-
 .../handlers/bypasshandlers/Festival.java     |  7 +-
 .../bypasshandlers/ItemAuctionLink.java       |  5 +-
 .../handlers/bypasshandlers/Loto.java         | 15 +--
 .../bypasshandlers/OlympiadManagerLink.java   | 19 ++--
 .../bypasshandlers/PrivateWarehouse.java      |  8 +-
 .../handlers/bypasshandlers/RentPet.java      |  8 +-
 .../handlers/bypasshandlers/SkillList.java    |  5 +-
 .../handlers/bypasshandlers/Wear.java         |  5 +-
 .../handlers/chathandlers/ChatAll.java        | 16 +---
 .../handlers/chathandlers/ChatAlliance.java   | 12 +--
 .../chathandlers/ChatBattlefield.java         | 12 +--
 .../handlers/chathandlers/ChatClan.java       | 12 +--
 .../handlers/chathandlers/ChatHeroVoice.java  | 12 +--
 .../handlers/chathandlers/ChatParty.java      | 12 +--
 .../chathandlers/ChatPartyMatchRoom.java      | 17 +---
 .../chathandlers/ChatPartyRoomAll.java        | 12 +--
 .../chathandlers/ChatPartyRoomCommander.java  | 12 +--
 .../handlers/chathandlers/ChatPetition.java   | 12 +--
 .../handlers/chathandlers/ChatShout.java      | 10 +-
 .../handlers/chathandlers/ChatTell.java       | 15 +--
 .../handlers/chathandlers/ChatTrade.java      | 10 +-
 .../handlers/custom/CustomAnnouncePkPvP.java  | 15 ++-
 .../effecthandlers/instant/Fishing.java       |  5 +-
 .../effecthandlers/instant/FoodForPet.java    |  5 +-
 .../instant/RestorationRandom.java            |  5 +-
 .../effecthandlers/instant/Summon.java        | 11 ++-
 .../itemhandlers/ExtractableItems.java        |  7 +-
 .../handlers/itemhandlers/Harvester.java      |  5 +-
 .../handlers/itemhandlers/ManaPotion.java     |  5 +-
 .../datapack/handlers/itemhandlers/Seed.java  |  5 +-
 .../handlers/targethandlers/CorpseMob.java    |  5 +-
 .../handlers/targethandlers/PartyNotMe.java   |  5 +-
 .../telnethandlers/ReloadHandler.java         |  5 +-
 .../handlers/usercommandhandlers/Time.java    |  5 +-
 .../handlers/usercommandhandlers/Unstuck.java | 12 +--
 .../voicedcommandhandlers/Banking.java        | 25 ++---
 .../handlers/voicedcommandhandlers/Lang.java  |  7 +-
 .../voicedcommandhandlers/Wedding.java        | 21 +++--
 .../hellbound/AI/NPC/Quarry/Quarry.java       |  5 +-
 .../hellbound/AI/NPC/Warpgate/Warpgate.java   |  5 +-
 .../datapack/hellbound/HellboundEngine.java   |  5 +-
 .../datapack/hellbound/HellboundLoader.java   |  5 +-
 .../datapack/instances/AbstractInstance.java  | 12 ++-
 .../instances/ChambersOfDelusion/Chamber.java | 11 ++-
 .../CrystalCaverns/CrystalCaverns.java        |  5 +-
 .../FinalEmperialTomb/FinalEmperialTomb.java  |  5 +-
 .../datapack/quests/AbstractSagaQuest.java    |  5 +-
 .../Q00050_LanoscosSpecialBait.java           |  5 +-
 .../Q00051_OFullesSpecialBait.java            |  5 +-
 .../Q00052_WilliesSpecialBait.java            |  5 +-
 .../Q00053_LinnaeusSpecialBait.java           |  5 +-
 .../Q00125_TheNameOfEvil1.java                |  7 +-
 .../Q00255_Tutorial/Q00255_Tutorial.java      |  5 +-
 .../Q00262_TradeWithTheIvoryTower.java        |  5 +-
 .../Q00279_TargetOfOpportunity.java           |  5 +-
 .../Q00290_ThreatRemoval.java                 |  5 +-
 .../Q00308_ReedFieldMaintenance.java          |  5 +-
 .../Q00309_ForAGoodCause.java                 |  5 +-
 .../Q00350_EnhanceYourWeapon.java             |  5 +-
 .../Q00610_MagicalPowerOfWaterPart2.java      |  7 +-
 .../Q00616_MagicalPowerOfFirePart2.java       |  7 +-
 .../Q00626_ADarkTwilight.java                 |  5 +-
 .../Q00627_HeartInSearchOfPower.java          |  5 +-
 .../Q00637_ThroughOnceMore.java               |  5 +-
 .../Q00643_RiseAndFallOfTheElrokiTribe.java   |  9 +-
 .../Q00688_DefeatTheElrokianRaiders.java      |  5 +-
 .../Q00690_JudesRequest.java                  |  5 +-
 .../Q00691_MatrasSuspiciousRequest.java       |  5 +-
 .../Q00692_HowtoOpposeEvil.java               |  5 +-
 .../Q10272_LightFragment.java                 |  5 +-
 .../admincommandhandlers/AdminReloadTest.java | 37 ++++++++
 140 files changed, 759 insertions(+), 657 deletions(-)
 create mode 100644 src/test/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminReloadTest.java

diff --git a/.gitignore b/.gitignore
index 762b77e7bb..621983d27a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,4 +2,6 @@
 /.classpath
 /.settings/
 /.idea/
-/target/
\ No newline at end of file
+/target/
+logs/
+test-output/
\ No newline at end of file
diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs
index e61d3770cc..5abefeed63 100644
--- a/.settings/org.eclipse.jdt.core.prefs
+++ b/.settings/org.eclipse.jdt.core.prefs
@@ -1,6 +1,8 @@
 eclipse.preferences.version=1
 org.eclipse.jdt.core.compiler.codegen.targetPlatform=11
 org.eclipse.jdt.core.compiler.compliance=11
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
 org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore
 org.eclipse.jdt.core.compiler.release=disabled
 org.eclipse.jdt.core.compiler.source=11
diff --git a/pom.xml b/pom.xml
index df1b5006a1..431ad8626d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -13,6 +13,9 @@
 		<slf4j.version>1.7.28</slf4j.version>
 		<!-- L2J -->
 		<l2j-server-game.version>2.6.1.0-SNAPSHOT</l2j-server-game.version>
+		<!-- Test -->
+		<testng.version>7.0.0</testng.version>
+		<mockito.version>3.2.4</mockito.version>
 		<!-- Plugins -->
 		<maven-jar-plugin.version>3.1.2</maven-jar-plugin.version>
 		<maven-assembly-plugin.version>3.1.1</maven-assembly-plugin.version>
@@ -28,6 +31,25 @@
 			<artifactId>l2j-server-game</artifactId>
 			<version>${l2j-server-game.version}</version>
 		</dependency>
+		<!-- Test -->
+		<dependency>
+			<groupId>org.testng</groupId>
+			<artifactId>testng</artifactId>
+			<version>${testng.version}</version>
+			<scope>test</scope>
+		</dependency>
+		<dependency>
+			<groupId>org.mockito</groupId>
+			<artifactId>mockito-core</artifactId>
+			<version>${mockito.version}</version>
+			<scope>test</scope>
+		</dependency>
+		<dependency>
+			<groupId>org.mockito</groupId>
+			<artifactId>mockito-inline</artifactId>
+			<version>${mockito.version}</version>
+			<scope>test</scope>
+		</dependency>
 	</dependencies>
 	<build>
 		<plugins>
@@ -49,7 +71,7 @@
 			<plugin>
 				<groupId>org.apache.maven.plugins</groupId>
 				<artifactId>maven-assembly-plugin</artifactId>
-				<version>${maven-assembly-plugin.version}</version><!--$NO-MVN-MAN-VER$-->
+				<version>${maven-assembly-plugin.version}</version><!--$NO-MVN-MAN-VER$ -->
 				<executions>
 					<execution>
 						<phase>package</phase>
diff --git a/src/main/java/com/l2jserver/datapack/ai/fantasy_isle/HandysBlockCheckerEvent.java b/src/main/java/com/l2jserver/datapack/ai/fantasy_isle/HandysBlockCheckerEvent.java
index 49e7b7e1ce..9722561c5a 100644
--- a/src/main/java/com/l2jserver/datapack/ai/fantasy_isle/HandysBlockCheckerEvent.java
+++ b/src/main/java/com/l2jserver/datapack/ai/fantasy_isle/HandysBlockCheckerEvent.java
@@ -18,10 +18,11 @@
  */
 package com.l2jserver.datapack.ai.fantasy_isle;
 
+import static com.l2jserver.gameserver.config.Configuration.general;
+
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.l2jserver.gameserver.config.Config;
 import com.l2jserver.gameserver.instancemanager.HandysBlockCheckerManager;
 import com.l2jserver.gameserver.model.ArenaParticipantsHolder;
 import com.l2jserver.gameserver.model.actor.L2Npc;
@@ -85,7 +86,7 @@ public class HandysBlockCheckerEvent extends Quest
 			
 			int countBlue = holder.getBlueTeamSize();
 			int countRed = holder.getRedTeamSize();
-			int minMembers = Config.MIN_BLOCK_CHECKER_TEAM_MEMBERS;
+			int minMembers = general().getBlockCheckerMinTeamMembers();
 			
 			if ((countBlue >= minMembers) && (countRed >= minMembers))
 			{
@@ -104,7 +105,7 @@ public class HandysBlockCheckerEvent extends Quest
 	
 	public static void main(String[] args)
 	{
-		if (Config.ENABLE_BLOCK_CHECKER_EVENT)
+		if (general().enableBlockCheckerEvent())
 		{
 			new HandysBlockCheckerEvent();
 			LOG.info("Handy's Block Checker event is enabled.");
diff --git a/src/main/java/com/l2jserver/datapack/ai/fantasy_isle/MC_Show.java b/src/main/java/com/l2jserver/datapack/ai/fantasy_isle/MC_Show.java
index 5b9ca291a3..ee904b17ee 100644
--- a/src/main/java/com/l2jserver/datapack/ai/fantasy_isle/MC_Show.java
+++ b/src/main/java/com/l2jserver/datapack/ai/fantasy_isle/MC_Show.java
@@ -18,6 +18,8 @@
  */
 package com.l2jserver.datapack.ai.fantasy_isle;
 
+import static com.l2jserver.gameserver.config.Configuration.general;
+
 import java.text.SimpleDateFormat;
 import java.util.HashMap;
 import java.util.Map;
@@ -26,7 +28,6 @@ import com.l2jserver.datapack.ai.npc.AbstractNpcAI;
 import com.l2jserver.gameserver.GameTimeController;
 import com.l2jserver.gameserver.ThreadPoolManager;
 import com.l2jserver.gameserver.ai.CtrlIntention;
-import com.l2jserver.gameserver.config.Config;
 import com.l2jserver.gameserver.enums.audio.Music;
 import com.l2jserver.gameserver.model.Location;
 import com.l2jserver.gameserver.model.actor.L2Npc;
@@ -307,7 +308,7 @@ public class MC_Show extends AbstractNpcAI
 		hourDiff *= 3600000;
 		minDiff *= 60000;
 		diff = hourDiff + minDiff;
-		if (Config.DEBUG)
+		if (general().debug())
 		{
 			SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
 			_log.info("Fantasy Isle: MC show script starting at " + format.format(System.currentTimeMillis() + diff) + " and is scheduled each next 4 hours.");
diff --git a/src/main/java/com/l2jserver/datapack/ai/individual/Antharas/Antharas.java b/src/main/java/com/l2jserver/datapack/ai/individual/Antharas/Antharas.java
index f67501f459..4afa341057 100644
--- a/src/main/java/com/l2jserver/datapack/ai/individual/Antharas/Antharas.java
+++ b/src/main/java/com/l2jserver/datapack/ai/individual/Antharas/Antharas.java
@@ -18,13 +18,14 @@
  */
 package com.l2jserver.datapack.ai.individual.Antharas;
 
+import static com.l2jserver.gameserver.config.Configuration.grandBoss;
+
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
 import com.l2jserver.datapack.ai.npc.AbstractNpcAI;
 import com.l2jserver.gameserver.ai.CtrlIntention;
-import com.l2jserver.gameserver.config.Config;
 import com.l2jserver.gameserver.enums.MountType;
 import com.l2jserver.gameserver.enums.audio.Music;
 import com.l2jserver.gameserver.instancemanager.GrandBossManager;
@@ -161,7 +162,7 @@ public final class Antharas extends AbstractNpcAI
 				_antharas = (L2GrandBossInstance) addSpawn(ANTHARAS, 185708, 114298, -8221, 0, false, 0);
 				_antharas.setCurrentHpMp(curr_hp, curr_mp);
 				addBoss(_antharas);
-				startQuestTimer("SPAWN_ANTHARAS", Config.ANTHARAS_WAIT_TIME * 60000, null, null);
+				startQuestTimer("SPAWN_ANTHARAS", grandBoss().getAntharasWaitTime(), null, null);
 				break;
 			}
 			case IN_FIGHT:
@@ -242,7 +243,7 @@ public final class Antharas extends AbstractNpcAI
 						if (getStatus() != WAITING)
 						{
 							setStatus(WAITING);
-							startQuestTimer("SPAWN_ANTHARAS", Config.ANTHARAS_WAIT_TIME * 60000, null, null);
+							startQuestTimer("SPAWN_ANTHARAS", grandBoss().getAntharasWaitTime(), null, null);
 						}
 					}
 				}
@@ -258,7 +259,7 @@ public final class Antharas extends AbstractNpcAI
 						if (getStatus() != WAITING)
 						{
 							setStatus(WAITING);
-							startQuestTimer("SPAWN_ANTHARAS", Config.ANTHARAS_WAIT_TIME * 60000, null, null);
+							startQuestTimer("SPAWN_ANTHARAS", grandBoss().getAntharasWaitTime(), null, null);
 						}
 					}
 				}
@@ -681,7 +682,7 @@ public final class Antharas extends AbstractNpcAI
 				zone.broadcastPacket(new SpecialCamera(npc, 1200, 20, -10, 0, 10000, 13000, 0, 0, 0, 0, 0));
 				zone.broadcastPacket(Music.BS01_D_10000.getPacket());
 				addSpawn(CUBE, 177615, 114941, -7709, 0, false, 900000);
-				long respawnTime = (Config.ANTHARAS_SPAWN_INTERVAL + getRandom(-Config.ANTHARAS_SPAWN_RANDOM, Config.ANTHARAS_SPAWN_RANDOM)) * 3600000;
+				long respawnTime = (grandBoss().getIntervalOfAntharasSpawn() + getRandom(-grandBoss().getRandomOfAntharasSpawn(), grandBoss().getRandomOfAntharasSpawn())) * 3600000;
 				setRespawn(respawnTime);
 				startQuestTimer("CLEAR_STATUS", respawnTime, null, null);
 				cancelQuestTimer("SET_REGEN", npc, null);
diff --git a/src/main/java/com/l2jserver/datapack/ai/individual/Baium/Baium.java b/src/main/java/com/l2jserver/datapack/ai/individual/Baium/Baium.java
index b31a598dcb..497603aa06 100644
--- a/src/main/java/com/l2jserver/datapack/ai/individual/Baium/Baium.java
+++ b/src/main/java/com/l2jserver/datapack/ai/individual/Baium/Baium.java
@@ -18,9 +18,10 @@
  */
 package com.l2jserver.datapack.ai.individual.Baium;
 
+import static com.l2jserver.gameserver.config.Configuration.grandBoss;
+
 import com.l2jserver.datapack.ai.npc.AbstractNpcAI;
 import com.l2jserver.gameserver.ai.CtrlIntention;
-import com.l2jserver.gameserver.config.Config;
 import com.l2jserver.gameserver.enums.CategoryType;
 import com.l2jserver.gameserver.enums.MountType;
 import com.l2jserver.gameserver.enums.audio.Music;
@@ -554,7 +555,7 @@ public final class Baium extends AbstractNpcAI
 			setStatus(DEAD);
 			addSpawn(TELE_CUBE, TELEPORT_CUBIC_LOC, false, 900000);
 			zone.broadcastPacket(Music.BS01_D_10000.getPacket());
-			long respawnTime = (Config.BAIUM_SPAWN_INTERVAL + getRandom(-Config.BAIUM_SPAWN_RANDOM, Config.BAIUM_SPAWN_RANDOM)) * 3600000;
+			long respawnTime = (grandBoss().getIntervalOfBaiumSpawn() + getRandom(-grandBoss().getRandomOfBaiumSpawn(), grandBoss().getRandomOfBaiumSpawn())) * 3600000;
 			setRespawn(respawnTime);
 			startQuestTimer("CLEAR_STATUS", respawnTime, null, null);
 			startQuestTimer("CLEAR_ZONE", 900000, null, null);
diff --git a/src/main/java/com/l2jserver/datapack/ai/individual/Ballista.java b/src/main/java/com/l2jserver/datapack/ai/individual/Ballista.java
index 35aa57cefe..42ef67b41b 100644
--- a/src/main/java/com/l2jserver/datapack/ai/individual/Ballista.java
+++ b/src/main/java/com/l2jserver/datapack/ai/individual/Ballista.java
@@ -18,8 +18,9 @@
  */
 package com.l2jserver.datapack.ai.individual;
 
+import static com.l2jserver.gameserver.config.Configuration.clan;
+
 import com.l2jserver.datapack.ai.npc.AbstractNpcAI;
-import com.l2jserver.gameserver.config.Config;
 import com.l2jserver.gameserver.model.L2Object;
 import com.l2jserver.gameserver.model.actor.L2Npc;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
@@ -79,7 +80,7 @@ public final class Ballista extends AbstractNpcAI
 			{
 				if ((caster.getClan() != null) && (caster.getClan().getLevel() >= MIN_CLAN_LV))
 				{
-					caster.getClan().addReputationScore(Config.BALLISTA_POINTS, true);
+					caster.getClan().addReputationScore(clan().getKillBallistaPoints(), true);
 					caster.sendPacket(SystemMessageId.BALLISTA_DESTROYED_CLAN_REPU_INCREASED);
 				}
 			}
diff --git a/src/main/java/com/l2jserver/datapack/ai/individual/Beleth.java b/src/main/java/com/l2jserver/datapack/ai/individual/Beleth.java
index fd9921727c..c657987999 100644
--- a/src/main/java/com/l2jserver/datapack/ai/individual/Beleth.java
+++ b/src/main/java/com/l2jserver/datapack/ai/individual/Beleth.java
@@ -18,13 +18,14 @@
  */
 package com.l2jserver.datapack.ai.individual;
 
+import static com.l2jserver.gameserver.config.Configuration.grandBoss;
+
 import java.util.List;
 import java.util.concurrent.CopyOnWriteArrayList;
 
 import com.l2jserver.datapack.ai.npc.AbstractNpcAI;
 import com.l2jserver.gameserver.ai.CtrlIntention;
 import com.l2jserver.gameserver.cache.HtmCache;
-import com.l2jserver.gameserver.config.Config;
 import com.l2jserver.gameserver.data.xml.impl.DoorData;
 import com.l2jserver.gameserver.enums.audio.Music;
 import com.l2jserver.gameserver.instancemanager.GrandBossManager;
@@ -757,7 +758,7 @@ public final class Beleth extends AbstractNpcAI
 			
 			setBelethKiller(killer);
 			GrandBossManager.getInstance().setBossStatus(REAL_BELETH, DEAD);
-			final long respawnTime = (Config.BELETH_SPAWN_INTERVAL + getRandom(-Config.BELETH_SPAWN_RANDOM, Config.BELETH_SPAWN_RANDOM)) * 3600000;
+			final long respawnTime = (grandBoss().getIntervalOfBelethSpawn() + getRandom(-grandBoss().getRandomOfBelethSpawn(), grandBoss().getRandomOfBelethSpawn())) * 3600000;
 			StatsSet info = GrandBossManager.getInstance().getStatsSet(REAL_BELETH);
 			info.set("respawn_time", System.currentTimeMillis() + respawnTime);
 			GrandBossManager.getInstance().setStatsSet(REAL_BELETH, info);
diff --git a/src/main/java/com/l2jserver/datapack/ai/individual/Core.java b/src/main/java/com/l2jserver/datapack/ai/individual/Core.java
index e168708591..864281ecee 100644
--- a/src/main/java/com/l2jserver/datapack/ai/individual/Core.java
+++ b/src/main/java/com/l2jserver/datapack/ai/individual/Core.java
@@ -18,11 +18,12 @@
  */
 package com.l2jserver.datapack.ai.individual;
 
+import static com.l2jserver.gameserver.config.Configuration.grandBoss;
+
 import java.util.List;
 import java.util.concurrent.CopyOnWriteArrayList;
 
 import com.l2jserver.datapack.ai.npc.AbstractNpcAI;
-import com.l2jserver.gameserver.config.Config;
 import com.l2jserver.gameserver.enums.audio.Music;
 import com.l2jserver.gameserver.instancemanager.GrandBossManager;
 import com.l2jserver.gameserver.model.StatsSet;
@@ -195,7 +196,7 @@ public final class Core extends AbstractNpcAI
 			_firstAttacked = false;
 			GrandBossManager.getInstance().setBossStatus(CORE, DEAD);
 			// Calculate Min and Max respawn times randomly.
-			long respawnTime = (Config.CORE_SPAWN_INTERVAL + getRandom(-Config.CORE_SPAWN_RANDOM, Config.CORE_SPAWN_RANDOM)) * 3600000;
+			long respawnTime = (grandBoss().getIntervalOfCoreSpawn() + getRandom(-grandBoss().getRandomOfCoreSpawn(), grandBoss().getRandomOfCoreSpawn())) * 3600000;
 			startQuestTimer("core_unlock", respawnTime, null, null);
 			// also save the respawn time so that the info is maintained past reboots
 			StatsSet info = GrandBossManager.getInstance().getStatsSet(CORE);
diff --git a/src/main/java/com/l2jserver/datapack/ai/individual/Orfen.java b/src/main/java/com/l2jserver/datapack/ai/individual/Orfen.java
index f4230b7ada..cc49cc5204 100644
--- a/src/main/java/com/l2jserver/datapack/ai/individual/Orfen.java
+++ b/src/main/java/com/l2jserver/datapack/ai/individual/Orfen.java
@@ -18,12 +18,13 @@
  */
 package com.l2jserver.datapack.ai.individual;
 
+import static com.l2jserver.gameserver.config.Configuration.grandBoss;
+
 import java.util.List;
 import java.util.concurrent.CopyOnWriteArrayList;
 
 import com.l2jserver.datapack.ai.npc.AbstractNpcAI;
 import com.l2jserver.gameserver.ai.CtrlIntention;
-import com.l2jserver.gameserver.config.Config;
 import com.l2jserver.gameserver.enums.audio.Music;
 import com.l2jserver.gameserver.instancemanager.GrandBossManager;
 import com.l2jserver.gameserver.model.L2Object;
@@ -334,7 +335,7 @@ public final class Orfen extends AbstractNpcAI
 			npc.broadcastPacket(Music.BS02_D_7000.getPacket());
 			GrandBossManager.getInstance().setBossStatus(ORFEN, DEAD);
 			// Calculate Min and Max respawn times randomly.
-			long respawnTime = Config.ORFEN_SPAWN_INTERVAL + getRandom(-Config.ORFEN_SPAWN_RANDOM, Config.ORFEN_SPAWN_RANDOM);
+			long respawnTime = grandBoss().getIntervalOfOrfenSpawn() + getRandom(-grandBoss().getRandomOfOrfenSpawn(), grandBoss().getRandomOfOrfenSpawn());
 			respawnTime *= 3600000;
 			startQuestTimer("orfen_unlock", respawnTime, null, null);
 			// also save the respawn time so that the info is maintained past reboots
diff --git a/src/main/java/com/l2jserver/datapack/ai/individual/QueenAnt.java b/src/main/java/com/l2jserver/datapack/ai/individual/QueenAnt.java
index 2007ea154b..9b97b52293 100644
--- a/src/main/java/com/l2jserver/datapack/ai/individual/QueenAnt.java
+++ b/src/main/java/com/l2jserver/datapack/ai/individual/QueenAnt.java
@@ -18,12 +18,14 @@
  */
 package com.l2jserver.datapack.ai.individual;
 
+import static com.l2jserver.gameserver.config.Configuration.grandBoss;
+import static com.l2jserver.gameserver.config.Configuration.npc;
+
 import java.util.List;
 import java.util.concurrent.CopyOnWriteArrayList;
 
 import com.l2jserver.datapack.ai.npc.AbstractNpcAI;
 import com.l2jserver.gameserver.ai.CtrlIntention;
-import com.l2jserver.gameserver.config.Config;
 import com.l2jserver.gameserver.enums.audio.Music;
 import com.l2jserver.gameserver.instancemanager.GrandBossManager;
 import com.l2jserver.gameserver.model.Location;
@@ -293,7 +295,7 @@ public final class QueenAnt extends AbstractNpcAI
 			return null;
 		}
 		
-		if (!Config.RAID_DISABLE_CURSE && ((character.getLevel() - npc.getLevel()) > 8))
+		if (npc().raidCurse() && ((character.getLevel() - npc.getLevel()) > 8))
 		{
 			Skill curse = null;
 			if (isMage)
@@ -333,7 +335,7 @@ public final class QueenAnt extends AbstractNpcAI
 			npc.broadcastPacket(Music.BS02_D_10000.getPacket());
 			GrandBossManager.getInstance().setBossStatus(QUEEN, DEAD);
 			// Calculate Min and Max respawn times randomly.
-			long respawnTime = Config.QUEEN_ANT_SPAWN_INTERVAL + getRandom(-Config.QUEEN_ANT_SPAWN_RANDOM, Config.QUEEN_ANT_SPAWN_RANDOM);
+			long respawnTime = grandBoss().getIntervalOfQueenAntSpawn() + getRandom(-grandBoss().getRandomOfQueenAntSpawn(), grandBoss().getRandomOfQueenAntSpawn());
 			respawnTime *= 3600000;
 			startQuestTimer("queen_unlock", respawnTime, null, null);
 			cancelQuestTimer("action", npc, null);
diff --git a/src/main/java/com/l2jserver/datapack/ai/individual/Valakas.java b/src/main/java/com/l2jserver/datapack/ai/individual/Valakas.java
index 56d962f2ec..6f9b29b1ea 100644
--- a/src/main/java/com/l2jserver/datapack/ai/individual/Valakas.java
+++ b/src/main/java/com/l2jserver/datapack/ai/individual/Valakas.java
@@ -18,13 +18,14 @@
  */
 package com.l2jserver.datapack.ai.individual;
 
+import static com.l2jserver.gameserver.config.Configuration.grandBoss;
+
 import java.util.ArrayList;
 import java.util.List;
 
 import com.l2jserver.datapack.ai.npc.AbstractNpcAI;
 import com.l2jserver.gameserver.GeoData;
 import com.l2jserver.gameserver.ai.CtrlIntention;
-import com.l2jserver.gameserver.config.Config;
 import com.l2jserver.gameserver.enums.MountType;
 import com.l2jserver.gameserver.enums.audio.Music;
 import com.l2jserver.gameserver.instancemanager.GrandBossManager;
@@ -181,7 +182,7 @@ public final class Valakas extends AbstractNpcAI
 				// Start timer to lock entry after 30 minutes
 				if (status == WAITING)
 				{
-					startQuestTimer("beginning", (Config.VALAKAS_WAIT_TIME * 60000), valakas, null);
+					startQuestTimer("beginning", grandBoss().getValakasWaitTime(), valakas, null);
 				}
 			}
 		}
@@ -441,7 +442,7 @@ public final class Valakas extends AbstractNpcAI
 		
 		GrandBossManager.getInstance().setBossStatus(VALAKAS, DEAD);
 		// Calculate Min and Max respawn times randomly.
-		long respawnTime = Config.VALAKAS_SPAWN_INTERVAL + getRandom(-Config.VALAKAS_SPAWN_RANDOM, Config.VALAKAS_SPAWN_RANDOM);
+		long respawnTime = grandBoss().getIntervalOfValakasSpawn() + getRandom(-grandBoss().getRandomOfValakasSpawn(), grandBoss().getRandomOfValakasSpawn());
 		respawnTime *= 3600000;
 		
 		startQuestTimer("valakas_unlock", respawnTime, null, null);
diff --git a/src/main/java/com/l2jserver/datapack/ai/npc/AvantGarde/AvantGarde.java b/src/main/java/com/l2jserver/datapack/ai/npc/AvantGarde/AvantGarde.java
index e1321cb3f0..e70de696aa 100644
--- a/src/main/java/com/l2jserver/datapack/ai/npc/AvantGarde/AvantGarde.java
+++ b/src/main/java/com/l2jserver/datapack/ai/npc/AvantGarde/AvantGarde.java
@@ -18,11 +18,12 @@
  */
 package com.l2jserver.datapack.ai.npc.AvantGarde;
 
+import static com.l2jserver.gameserver.config.Configuration.character;
+
 import java.util.List;
 
 import com.l2jserver.datapack.ai.npc.AbstractNpcAI;
 import com.l2jserver.datapack.custom.Validators.SubClassSkills;
-import com.l2jserver.gameserver.config.Config;
 import com.l2jserver.gameserver.data.xml.impl.MultisellData;
 import com.l2jserver.gameserver.data.xml.impl.SkillTreesData;
 import com.l2jserver.gameserver.datatables.SkillData;
@@ -179,7 +180,7 @@ public class AvantGarde extends AbstractNpcAI
 				{
 					htmltext = "32323-08.html";
 				}
-				else if (player.getAdena() < Config.FEE_DELETE_SUBCLASS_SKILLS)
+				else if (player.getAdena() < character().getFeeDeleteSubClassSkills())
 				{
 					htmltext = "32323-08no.html";
 				}
@@ -194,7 +195,7 @@ public class AvantGarde extends AbstractNpcAI
 					int activeCertifications = 0;
 					for (String varName : QUEST_VAR_NAMES)
 					{
-						for (int i = 1; i <= Config.MAX_SUBCLASS; i++)
+						for (int i = 1; i <= character().getMaxSubclass(); i++)
 						{
 							String qvar = st.getGlobalQuestVar(varName + i);
 							if (!qvar.isEmpty() && (qvar.endsWith(";") || !qvar.equals("0")))
@@ -211,7 +212,7 @@ public class AvantGarde extends AbstractNpcAI
 					{
 						for (String varName : QUEST_VAR_NAMES)
 						{
-							for (int i = 1; i <= Config.MAX_SUBCLASS; i++)
+							for (int i = 1; i <= character().getMaxSubclass(); i++)
 							{
 								final String qvarName = varName + i;
 								final String qvar = st.getGlobalQuestVar(qvarName);
@@ -266,7 +267,7 @@ public class AvantGarde extends AbstractNpcAI
 							}
 						}
 						
-						player.reduceAdena("Cleanse", Config.FEE_DELETE_SUBCLASS_SKILLS, npc, true);
+						player.reduceAdena("Cleanse", character().getFeeDeleteSubClassSkills(), npc, true);
 						htmltext = "32323-09no.html";
 						player.sendSkillList();
 					}
diff --git a/src/main/java/com/l2jserver/datapack/ai/npc/CastleChamberlain/CastleChamberlain.java b/src/main/java/com/l2jserver/datapack/ai/npc/CastleChamberlain/CastleChamberlain.java
index d7ef7ccc69..942822adf9 100644
--- a/src/main/java/com/l2jserver/datapack/ai/npc/CastleChamberlain/CastleChamberlain.java
+++ b/src/main/java/com/l2jserver/datapack/ai/npc/CastleChamberlain/CastleChamberlain.java
@@ -18,6 +18,11 @@
  */
 package com.l2jserver.datapack.ai.npc.CastleChamberlain;
 
+import static com.l2jserver.gameserver.config.Configuration.castle;
+import static com.l2jserver.gameserver.config.Configuration.character;
+import static com.l2jserver.gameserver.config.Configuration.general;
+import static com.l2jserver.gameserver.config.Configuration.sevenSings;
+
 import java.util.Arrays;
 import java.util.Calendar;
 import java.util.HashMap;
@@ -27,7 +32,6 @@ import java.util.StringTokenizer;
 
 import com.l2jserver.datapack.ai.npc.AbstractNpcAI;
 import com.l2jserver.gameserver.SevenSigns;
-import com.l2jserver.gameserver.config.Config;
 import com.l2jserver.gameserver.data.sql.impl.ClanTable;
 import com.l2jserver.gameserver.data.sql.impl.TeleportLocationTable;
 import com.l2jserver.gameserver.instancemanager.CastleManorManager;
@@ -205,19 +209,19 @@ public final class CastleChamberlain extends AbstractNpcAI
 		switch (func)
 		{
 			case Castle.FUNC_RESTORE_EXP:
-				fee = (level == 45) ? Config.CS_EXPREG1_FEE : Config.CS_EXPREG2_FEE;
+				fee = (level == 45) ? castle().getExpRegenerationFeeLvl1() : castle().getExpRegenerationFeeLvl2();
 				break;
 			case Castle.FUNC_RESTORE_HP:
-				fee = (level == 300) ? Config.CS_HPREG1_FEE : Config.CS_HPREG2_FEE;
+				fee = (level == 300) ? castle().getHpRegenerationFeeLvl1() : castle().getHpRegenerationFeeLvl2();
 				break;
 			case Castle.FUNC_RESTORE_MP:
-				fee = (level == 40) ? Config.CS_MPREG1_FEE : Config.CS_MPREG2_FEE;
+				fee = (level == 40) ? castle().getMpRegenerationFeeLvl1() : castle().getMpRegenerationFeeLvl2();
 				break;
 			case Castle.FUNC_SUPPORT:
-				fee = (level == 5) ? Config.CS_SUPPORT1_FEE : Config.CS_SUPPORT2_FEE;
+				fee = (level == 5) ? castle().getSupportFeeLvl1() : castle().getSupportFeeLvl2();
 				break;
 			case Castle.FUNC_TELEPORT:
-				fee = (level == 1) ? Config.CS_TELE1_FEE : Config.CS_TELE2_FEE;
+				fee = (level == 1) ? castle().getTeleportFunctionFeeLvl1() : castle().getTeleportFunctionFeeLvl2();
 				break;
 		}
 		return fee;
@@ -229,19 +233,19 @@ public final class CastleChamberlain extends AbstractNpcAI
 		switch (func)
 		{
 			case Castle.FUNC_RESTORE_EXP:
-				ratio = Config.CS_EXPREG_FEE_RATIO;
+				ratio = castle().getExpRegenerationFunctionFeeRatio();
 				break;
 			case Castle.FUNC_RESTORE_HP:
-				ratio = Config.CS_HPREG_FEE_RATIO;
+				ratio = castle().getHpRegenerationFunctionFeeRatio();
 				break;
 			case Castle.FUNC_RESTORE_MP:
-				ratio = Config.CS_MPREG_FEE_RATIO;
+				ratio = castle().getMpRegenerationFunctionFeeRatio();
 				break;
 			case Castle.FUNC_SUPPORT:
-				ratio = Config.CS_SUPPORT_FEE_RATIO;
+				ratio = castle().getSupportFunctionFeeRatio();
 				break;
 			case Castle.FUNC_TELEPORT:
-				ratio = Config.CS_TELE_FEE_RATIO;
+				ratio = castle().getTeleportFunctionFeeRatio();
 				break;
 		}
 		return ratio;
@@ -257,13 +261,13 @@ public final class CastleChamberlain extends AbstractNpcAI
 				switch (level)
 				{
 					case 2:
-						price = Config.OUTER_DOOR_UPGRADE_PRICE2;
+						price = castle().getOuterDoorUpgradePriceLvl2();
 						break;
 					case 3:
-						price = Config.OUTER_DOOR_UPGRADE_PRICE3;
+						price = castle().getOuterDoorUpgradePriceLvl3();
 						break;
 					case 5:
-						price = Config.OUTER_DOOR_UPGRADE_PRICE5;
+						price = castle().getOuterDoorUpgradePriceLvl5();
 						break;
 				}
 				break;
@@ -273,13 +277,13 @@ public final class CastleChamberlain extends AbstractNpcAI
 				switch (level)
 				{
 					case 2:
-						price = Config.INNER_DOOR_UPGRADE_PRICE2;
+						price = castle().getInnerDoorUpgradePriceLvl2();
 						break;
 					case 3:
-						price = Config.INNER_DOOR_UPGRADE_PRICE3;
+						price = castle().getInnerDoorUpgradePriceLvl3();
 						break;
 					case 5:
-						price = Config.INNER_DOOR_UPGRADE_PRICE5;
+						price = castle().getInnerDoorUpgradePriceLvl5();
 						break;
 				}
 				break;
@@ -289,13 +293,13 @@ public final class CastleChamberlain extends AbstractNpcAI
 				switch (level)
 				{
 					case 2:
-						price = Config.WALL_UPGRADE_PRICE2;
+						price = castle().getWallUpgradePriceLvl2();
 						break;
 					case 3:
-						price = Config.WALL_UPGRADE_PRICE3;
+						price = castle().getWallUpgradePriceLvl3();
 						break;
 					case 5:
-						price = Config.WALL_UPGRADE_PRICE5;
+						price = castle().getWallUpgradePriceLvl5();
 						break;
 				}
 				break;
@@ -355,16 +359,16 @@ public final class CastleChamberlain extends AbstractNpcAI
 		switch (level)
 		{
 			case 1:
-				price = Config.TRAP_UPGRADE_PRICE1;
+				price = castle().getTrapUpgradePriceLvl1();
 				break;
 			case 2:
-				price = Config.TRAP_UPGRADE_PRICE2;
+				price = castle().getTrapUpgradePriceLvl2();
 				break;
 			case 3:
-				price = Config.TRAP_UPGRADE_PRICE3;
+				price = castle().getTrapUpgradePriceLvl3();
 				break;
 			case 4:
-				price = Config.TRAP_UPGRADE_PRICE4;
+				price = castle().getTrapUpgradePriceLvl4();
 				break;
 		}
 		
@@ -772,7 +776,7 @@ public final class CastleChamberlain extends AbstractNpcAI
 				if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_TAXES))
 				{
 					long seedIncome = 0;
-					if (Config.ALLOW_MANOR)
+					if (general().allowManor())
 					{
 						for (SeedProduction sp : CastleManorManager.getInstance().getSeedProduction(castle.getResidenceId(), false))
 						{
@@ -801,7 +805,7 @@ public final class CastleChamberlain extends AbstractNpcAI
 				if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_TAXES))
 				{
 					final long amount = (st.hasMoreTokens()) ? Long.parseLong(st.nextToken()) : 0;
-					if ((amount > 0) && (amount < Inventory.MAX_ADENA))
+					if ((amount > 0) && (amount < character().getMaxAdena()))
 					{
 						if (player.getAdena() >= amount)
 						{
@@ -1161,7 +1165,7 @@ public final class CastleChamberlain extends AbstractNpcAI
 			}
 			case "manor":
 			{
-				if (Config.ALLOW_MANOR)
+				if (general().allowManor())
 				{
 					htmltext = (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_MANOR_ADMIN)) ? "manor.html" : "chamberlain-21.html";
 				}
@@ -1237,12 +1241,12 @@ public final class CastleChamberlain extends AbstractNpcAI
 						if ((SevenSigns.getInstance().getPlayerCabal(player.getObjectId()) == SevenSigns.CABAL_DAWN) && SevenSigns.getInstance().isCompetitionPeriod())
 						{
 							final int ticketCount = castle.getTicketBuyCount();
-							if (ticketCount < (Config.SSQ_DAWN_TICKET_QUANTITY / Config.SSQ_DAWN_TICKET_BUNDLE))
+							if (ticketCount < (sevenSings().getSevenSignsDawnTicketQuantity() / sevenSings().getSevenSignsDawnTicketBundle()))
 							{
 								final NpcHtmlMessage html = getHtmlPacket(player, npc, "ssq_selldawnticket.html");
-								html.replace("%DawnTicketLeft%", String.valueOf(Config.SSQ_DAWN_TICKET_QUANTITY - (ticketCount * Config.SSQ_DAWN_TICKET_BUNDLE)));
-								html.replace("%DawnTicketBundle%", String.valueOf(Config.SSQ_DAWN_TICKET_BUNDLE));
-								html.replace("%DawnTicketPrice%", String.valueOf(Config.SSQ_DAWN_TICKET_PRICE * Config.SSQ_DAWN_TICKET_BUNDLE));
+								html.replace("%DawnTicketLeft%", String.valueOf(sevenSings().getSevenSignsDawnTicketQuantity() - (ticketCount * sevenSings().getSevenSignsDawnTicketBundle())));
+								html.replace("%DawnTicketBundle%", String.valueOf(sevenSings().getSevenSignsDawnTicketBundle()));
+								html.replace("%DawnTicketPrice%", String.valueOf(sevenSings().getSevenSignsDawnTicketPrice() * sevenSings().getSevenSignsDawnTicketBundle()));
 								player.sendPacket(html);
 							}
 							else
@@ -1275,13 +1279,13 @@ public final class CastleChamberlain extends AbstractNpcAI
 						if ((SevenSigns.getInstance().getPlayerCabal(player.getObjectId()) == SevenSigns.CABAL_DAWN) && SevenSigns.getInstance().isCompetitionPeriod())
 						{
 							final int ticketCount = castle.getTicketBuyCount();
-							if (ticketCount < (Config.SSQ_DAWN_TICKET_QUANTITY / Config.SSQ_DAWN_TICKET_BUNDLE))
+							if (ticketCount < (sevenSings().getSevenSignsDawnTicketQuantity() / sevenSings().getSevenSignsDawnTicketBundle()))
 							{
-								final long totalCost = Config.SSQ_DAWN_TICKET_PRICE * Config.SSQ_DAWN_TICKET_BUNDLE;
+								final long totalCost = sevenSings().getSevenSignsDawnTicketPrice() * sevenSings().getSevenSignsDawnTicketBundle();
 								if (player.getAdena() >= totalCost)
 								{
 									takeItems(player, Inventory.ADENA_ID, totalCost);
-									giveItems(player, Config.SSQ_MANORS_AGREEMENT_ID, Config.SSQ_DAWN_TICKET_BUNDLE);
+									giveItems(player, sevenSings().getSevenSignsManorsAgreementId(), sevenSings().getSevenSignsDawnTicketBundle());
 									castle.setTicketBuyCount(ticketCount + 1);
 								}
 								else
diff --git a/src/main/java/com/l2jserver/datapack/ai/npc/ClanTrader/ClanTrader.java b/src/main/java/com/l2jserver/datapack/ai/npc/ClanTrader/ClanTrader.java
index 3e4d862522..fcc4f83aae 100644
--- a/src/main/java/com/l2jserver/datapack/ai/npc/ClanTrader/ClanTrader.java
+++ b/src/main/java/com/l2jserver/datapack/ai/npc/ClanTrader/ClanTrader.java
@@ -18,8 +18,9 @@
  */
 package com.l2jserver.datapack.ai.npc.ClanTrader;
 
+import static com.l2jserver.gameserver.config.Configuration.clan;
+
 import com.l2jserver.datapack.ai.npc.AbstractNpcAI;
-import com.l2jserver.gameserver.config.Config;
 import com.l2jserver.gameserver.model.ClanPrivilege;
 import com.l2jserver.gameserver.model.actor.L2Npc;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
@@ -90,17 +91,17 @@ public final class ClanTrader extends AbstractNpcAI
 			}
 			case "exchange-ba":
 			{
-				htmltext = giveReputation(npc, player, Config.BLOODALLIANCE_POINTS, BLOOD_ALLIANCE, BLOOD_ALLIANCE_COUNT);
+				htmltext = giveReputation(npc, player, clan().getBloodAlliancePoints(), BLOOD_ALLIANCE, BLOOD_ALLIANCE_COUNT);
 				break;
 			}
 			case "exchange-bo":
 			{
-				htmltext = giveReputation(npc, player, Config.BLOODOATH_POINTS, BLOOD_OATH, BLOOD_OATH_COUNT);
+				htmltext = giveReputation(npc, player, clan().getBloodOathPoints(), BLOOD_OATH, BLOOD_OATH_COUNT);
 				break;
 			}
 			case "exchange-ke":
 			{
-				htmltext = giveReputation(npc, player, Config.KNIGHTSEPAULETTE_POINTS, KNIGHTS_EPAULETTE, KNIGHTS_EPAULETTE_COUNT);
+				htmltext = giveReputation(npc, player, clan().getKnightsEpaulettePoints(), KNIGHTS_EPAULETTE, KNIGHTS_EPAULETTE_COUNT);
 				break;
 			}
 		}
diff --git a/src/main/java/com/l2jserver/datapack/ai/npc/ClassMaster/ClassMaster.java b/src/main/java/com/l2jserver/datapack/ai/npc/ClassMaster/ClassMaster.java
index 9e2dbb1241..dae8a1565d 100644
--- a/src/main/java/com/l2jserver/datapack/ai/npc/ClassMaster/ClassMaster.java
+++ b/src/main/java/com/l2jserver/datapack/ai/npc/ClassMaster/ClassMaster.java
@@ -18,11 +18,7 @@
  */
 package com.l2jserver.datapack.ai.npc.ClassMaster;
 
-import static com.l2jserver.gameserver.config.Config.ALLOW_CLASS_MASTERS;
-import static com.l2jserver.gameserver.config.Config.ALLOW_ENTIRE_TREE;
-import static com.l2jserver.gameserver.config.Config.ALTERNATE_CLASS_MASTER;
-import static com.l2jserver.gameserver.config.Config.AUTO_LEARN_FS_SKILLS;
-import static com.l2jserver.gameserver.config.Config.CLASS_MASTER_SETTINGS;
+import static com.l2jserver.gameserver.config.Configuration.character;
 import static com.l2jserver.gameserver.model.events.EventType.ON_PLAYER_LEVEL_CHANGED;
 import static com.l2jserver.gameserver.network.SystemMessageId.INVENTORY_LESS_THAN_80_PERCENT;
 import static com.l2jserver.gameserver.network.SystemMessageId.NOT_ENOUGH_ITEMS;
@@ -65,14 +61,14 @@ public final class ClassMaster extends AbstractNpcAI
 		addStartNpc(MR_CAT, MISS_QUEEN);
 		addFirstTalkId(MR_CAT, MISS_QUEEN);
 		addTalkId(MR_CAT, MISS_QUEEN);
-		if (ALTERNATE_CLASS_MASTER)
+		if (character().alternateClassMaster())
 		{
 			setOnEnterWorld(true);
 			registerTutorialEvent();
 			registerTutorialQuestionMark();
 		}
 		
-		if (ALLOW_CLASS_MASTERS)
+		if (character().allowClassMasters())
 		{
 			addSpawn(MR_CAT, new Location(147728, 27408, -2198, 16500));
 			addSpawn(MISS_QUEEN, new Location(147761, 27408, -2198, 16500));
@@ -192,7 +188,7 @@ public final class ClassMaster extends AbstractNpcAI
 		}
 		else if (event.startsWith("learn_skills"))
 		{
-			player.giveAvailableSkills(AUTO_LEARN_FS_SKILLS, true);
+			player.giveAvailableSkills(character().autoLearnForgottenScrollSkills(), true);
 		}
 		else if (event.startsWith("increase_clan_level"))
 		{
@@ -221,7 +217,7 @@ public final class ClassMaster extends AbstractNpcAI
 	
 	private void onTutorialLink(L2PcInstance player, String request)
 	{
-		if (!ALTERNATE_CLASS_MASTER || (request == null) || !request.startsWith("CO"))
+		if (!character().alternateClassMaster() || (request == null) || !request.startsWith("CO"))
 		{
 			return;
 		}
@@ -246,7 +242,7 @@ public final class ClassMaster extends AbstractNpcAI
 	@Override
 	public String onTutorialQuestionMark(L2PcInstance player, int number)
 	{
-		if (!ALTERNATE_CLASS_MASTER || (number != CUSTOM_EVENT_ID))
+		if (!character().alternateClassMaster() || (number != CUSTOM_EVENT_ID))
 		{
 			return "";
 		}
@@ -257,7 +253,7 @@ public final class ClassMaster extends AbstractNpcAI
 	
 	private void showQuestionMark(L2PcInstance player)
 	{
-		if (!ALTERNATE_CLASS_MASTER)
+		if (!character().alternateClassMaster())
 		{
 			return;
 		}
@@ -268,7 +264,7 @@ public final class ClassMaster extends AbstractNpcAI
 			return;
 		}
 		
-		if (!CLASS_MASTER_SETTINGS.isAllowed(classId.level() + 1))
+		if (!character().getClassMaster().isAllowed(classId.level() + 1))
 		{
 			return;
 		}
@@ -278,13 +274,13 @@ public final class ClassMaster extends AbstractNpcAI
 	
 	private void showHtmlMenu(L2PcInstance player, int objectId, int level)
 	{
-		if (!ALLOW_CLASS_MASTERS)
+		if (!character().allowClassMasters())
 		{
 			String msg = getHtm(player.getHtmlPrefix(), "disabled.htm");
 			showResult(player, msg);
 			return;
 		}
-		if (!CLASS_MASTER_SETTINGS.isAllowed(level))
+		if (!character().getClassMaster().isAllowed(level))
 		{
 			final NpcHtmlMessage html = new NpcHtmlMessage(objectId);
 			final int jobLevel = player.getClassId().level();
@@ -293,15 +289,15 @@ public final class ClassMaster extends AbstractNpcAI
 			switch (jobLevel)
 			{
 				case 0:
-					if (CLASS_MASTER_SETTINGS.isAllowed(1))
+					if (character().getClassMaster().isAllowed(1))
 					{
 						sb.append("Come back here when you reached level 20 to change your class.<br>");
 					}
-					else if (CLASS_MASTER_SETTINGS.isAllowed(2))
+					else if (character().getClassMaster().isAllowed(2))
 					{
 						sb.append("Come back after your first occupation change.<br>");
 					}
-					else if (CLASS_MASTER_SETTINGS.isAllowed(3))
+					else if (character().getClassMaster().isAllowed(3))
 					{
 						sb.append("Come back after your second occupation change.<br>");
 					}
@@ -311,11 +307,11 @@ public final class ClassMaster extends AbstractNpcAI
 					}
 					break;
 				case 1:
-					if (CLASS_MASTER_SETTINGS.isAllowed(2))
+					if (character().getClassMaster().isAllowed(2))
 					{
 						sb.append("Come back here when you reached level 40 to change your class.<br>");
 					}
-					else if (CLASS_MASTER_SETTINGS.isAllowed(3))
+					else if (character().getClassMaster().isAllowed(3))
 					{
 						sb.append("Come back after your second occupation change.<br>");
 					}
@@ -325,7 +321,7 @@ public final class ClassMaster extends AbstractNpcAI
 					}
 					break;
 				case 2:
-					if (CLASS_MASTER_SETTINGS.isAllowed(3))
+					if (character().getClassMaster().isAllowed(3))
 					{
 						sb.append("Come back here when you reached level 76 to change your class.<br>");
 					}
@@ -354,7 +350,7 @@ public final class ClassMaster extends AbstractNpcAI
 		}
 		
 		final int minLevel = getMinLevel(currentClassId.level());
-		if ((player.getLevel() >= minLevel) || ALLOW_ENTIRE_TREE)
+		if ((player.getLevel() >= minLevel) || character().allowEntireTree())
 		{
 			final StringBuilder menu = new StringBuilder(100);
 			for (ClassId cid : ClassId.values())
@@ -394,7 +390,7 @@ public final class ClassMaster extends AbstractNpcAI
 	private void showTutorialHtml(L2PcInstance player)
 	{
 		final ClassId currentClassId = player.getClassId();
-		if ((getMinLevel(currentClassId.level()) > player.getLevel()) && !ALLOW_ENTIRE_TREE)
+		if ((getMinLevel(currentClassId.level()) > player.getLevel()) && !character().allowEntireTree())
 		{
 			return;
 		}
@@ -423,7 +419,7 @@ public final class ClassMaster extends AbstractNpcAI
 	private boolean checkAndChangeClass(L2PcInstance player, int val)
 	{
 		final ClassId currentClassId = player.getClassId();
-		if ((getMinLevel(currentClassId.level()) > player.getLevel()) && !ALLOW_ENTIRE_TREE)
+		if ((getMinLevel(currentClassId.level()) > player.getLevel()) && !character().allowEntireTree())
 		{
 			return false;
 		}
@@ -436,14 +432,14 @@ public final class ClassMaster extends AbstractNpcAI
 		final int newJobLevel = currentClassId.level() + 1;
 		
 		// Weight/Inventory check
-		if (!CLASS_MASTER_SETTINGS.getRewardItems(newJobLevel).isEmpty() && !player.isInventoryUnder90(false))
+		if (!character().getClassMaster().getRewardItems(newJobLevel).isEmpty() && !player.isInventoryUnder90(false))
 		{
 			player.sendPacket(INVENTORY_LESS_THAN_80_PERCENT);
 			return false;
 		}
 		
 		// check if player have all required items for class transfer
-		for (ItemHolder holder : CLASS_MASTER_SETTINGS.getRequireItems(newJobLevel))
+		for (ItemHolder holder : character().getClassMaster().getRequireItems(newJobLevel))
 		{
 			if (player.getInventory().getInventoryItemCount(holder.getId(), -1) < holder.getCount())
 			{
@@ -453,7 +449,7 @@ public final class ClassMaster extends AbstractNpcAI
 		}
 		
 		// get all required items for class transfer
-		for (ItemHolder holder : CLASS_MASTER_SETTINGS.getRequireItems(newJobLevel))
+		for (ItemHolder holder : character().getClassMaster().getRequireItems(newJobLevel))
 		{
 			if (!player.destroyItemByItemId("ClassMaster", holder.getId(), holder.getCount(), player, true))
 			{
@@ -462,7 +458,7 @@ public final class ClassMaster extends AbstractNpcAI
 		}
 		
 		// reward player with items
-		for (ItemHolder holder : CLASS_MASTER_SETTINGS.getRewardItems(newJobLevel))
+		for (ItemHolder holder : character().getClassMaster().getRewardItems(newJobLevel))
 		{
 			player.addItem("ClassMaster", holder.getId(), holder.getCount(), player, true);
 		}
@@ -480,7 +476,7 @@ public final class ClassMaster extends AbstractNpcAI
 		
 		player.broadcastUserInfo();
 		
-		if (CLASS_MASTER_SETTINGS.isAllowed(player.getClassId().level() + 1) && ALTERNATE_CLASS_MASTER && (((player.getClassId().level() == 1) && (player.getLevel() >= 40)) || ((player.getClassId().level() == 2) && (player.getLevel() >= 76))))
+		if (character().getClassMaster().isAllowed(player.getClassId().level() + 1) && character().alternateClassMaster() && (((player.getClassId().level() == 1) && (player.getLevel() >= 40)) || ((player.getClassId().level() == 2) && (player.getLevel() >= 76))))
 		{
 			showQuestionMark(player);
 		}
@@ -526,17 +522,17 @@ public final class ClassMaster extends AbstractNpcAI
 	 */
 	private static boolean validateClassId(ClassId oldCID, ClassId newCID)
 	{
-		return (newCID != null) && (newCID.getRace() != null) && ((oldCID.equals(newCID.getParent()) || (ALLOW_ENTIRE_TREE && newCID.childOf(oldCID))));
+		return (newCID != null) && (newCID.getRace() != null) && ((oldCID.equals(newCID.getParent()) || (character().allowEntireTree() && newCID.childOf(oldCID))));
 	}
 	
 	private static String getRequiredItems(int level)
 	{
-		if ((CLASS_MASTER_SETTINGS.getRequireItems(level) == null) || CLASS_MASTER_SETTINGS.getRequireItems(level).isEmpty())
+		if ((character().getClassMaster().getRequireItems(level) == null) || character().getClassMaster().getRequireItems(level).isEmpty())
 		{
 			return "<tr><td>none</td></tr>";
 		}
 		final StringBuilder sb = new StringBuilder();
-		for (ItemHolder holder : CLASS_MASTER_SETTINGS.getRequireItems(level))
+		for (ItemHolder holder : character().getClassMaster().getRequireItems(level))
 		{
 			sb.append("<tr><td><font color=\"LEVEL\">");
 			sb.append(holder.getCount());
diff --git a/src/main/java/com/l2jserver/datapack/ai/npc/Fisherman/Fisherman.java b/src/main/java/com/l2jserver/datapack/ai/npc/Fisherman/Fisherman.java
index 3f19b194aa..7522fd303a 100644
--- a/src/main/java/com/l2jserver/datapack/ai/npc/Fisherman/Fisherman.java
+++ b/src/main/java/com/l2jserver/datapack/ai/npc/Fisherman/Fisherman.java
@@ -18,10 +18,11 @@
  */
 package com.l2jserver.datapack.ai.npc.Fisherman;
 
+import static com.l2jserver.gameserver.config.Configuration.character;
+
 import java.util.List;
 
 import com.l2jserver.datapack.ai.npc.AbstractNpcAI;
-import com.l2jserver.gameserver.config.Config;
 import com.l2jserver.gameserver.data.xml.impl.SkillTreesData;
 import com.l2jserver.gameserver.datatables.SkillData;
 import com.l2jserver.gameserver.model.L2SkillLearn;
@@ -104,7 +105,7 @@ public class Fisherman extends AbstractNpcAI
 	@Override
 	public String onFirstTalk(L2Npc npc, L2PcInstance player)
 	{
-		if ((player.getKarma() > 0) && !Config.ALT_GAME_KARMA_PLAYER_CAN_SHOP)
+		if ((player.getKarma() > 0) && !character().karmaPlayerCanShop())
 		{
 			return npc.getId() + "-pk.htm";
 		}
diff --git a/src/main/java/com/l2jserver/datapack/ai/npc/FortressSiegeManager/FortressSiegeManager.java b/src/main/java/com/l2jserver/datapack/ai/npc/FortressSiegeManager/FortressSiegeManager.java
index f81224e643..7dca0cebcc 100644
--- a/src/main/java/com/l2jserver/datapack/ai/npc/FortressSiegeManager/FortressSiegeManager.java
+++ b/src/main/java/com/l2jserver/datapack/ai/npc/FortressSiegeManager/FortressSiegeManager.java
@@ -18,6 +18,8 @@
  */
 package com.l2jserver.datapack.ai.npc.FortressSiegeManager;
 
+import static com.l2jserver.gameserver.config.Configuration.fortSiege;
+
 import com.l2jserver.datapack.ai.npc.AbstractNpcAI;
 import com.l2jserver.gameserver.instancemanager.FortSiegeManager;
 import com.l2jserver.gameserver.model.ClanPrivilege;
@@ -107,7 +109,7 @@ public final class FortressSiegeManager extends AbstractNpcAI
 					{
 						htmltext = "FortressSiegeManager-10.html";
 					}
-					else if ((clan.getLevel() < FortSiegeManager.getInstance().getSiegeClanMinLevel()))
+					else if ((clan.getLevel() < fortSiege().getSiegeClanMinLevel()))
 					{
 						htmltext = "FortressSiegeManager-04.html";
 					}
@@ -115,7 +117,7 @@ public final class FortressSiegeManager extends AbstractNpcAI
 					{
 						htmltext = "FortressSiegeManager-18.html";
 					}
-					else if ((clan.getCastleId() != 0) && (clan.getCastleId() != castle.getResidenceId()) && FortSiegeManager.getInstance().canRegisterJustTerritory())
+					else if ((clan.getCastleId() != 0) && (clan.getCastleId() != castle.getResidenceId()) && fortSiege().justToTerritory())
 					{
 						htmltext = "FortressSiegeManager-17.html";
 					}
diff --git a/src/main/java/com/l2jserver/datapack/ai/npc/ManorManager/ManorManager.java b/src/main/java/com/l2jserver/datapack/ai/npc/ManorManager/ManorManager.java
index cb8c7a1d58..e8757fecd2 100644
--- a/src/main/java/com/l2jserver/datapack/ai/npc/ManorManager/ManorManager.java
+++ b/src/main/java/com/l2jserver/datapack/ai/npc/ManorManager/ManorManager.java
@@ -18,8 +18,9 @@
  */
 package com.l2jserver.datapack.ai.npc.ManorManager;
 
+import static com.l2jserver.gameserver.config.Configuration.general;
+
 import com.l2jserver.datapack.ai.npc.AbstractNpcAI;
-import com.l2jserver.gameserver.config.Config;
 import com.l2jserver.gameserver.instancemanager.CastleManorManager;
 import com.l2jserver.gameserver.model.PcCondOverride;
 import com.l2jserver.gameserver.model.actor.L2Npc;
@@ -90,7 +91,7 @@ public final class ManorManager extends AbstractNpcAI
 	@Override
 	public String onFirstTalk(L2Npc npc, L2PcInstance player)
 	{
-		if (Config.ALLOW_MANOR)
+		if (general().allowManor())
 		{
 			final int castleId = npc.getTemplate().getParameters().getInt("manor_id", -1);
 			if (!player.canOverrideCond(PcCondOverride.CASTLE_CONDITIONS) && player.isClanLeader() && (castleId == player.getClan().getCastleId()))
diff --git a/src/main/java/com/l2jserver/datapack/ai/npc/MercenaryCaptain/MercenaryCaptain.java b/src/main/java/com/l2jserver/datapack/ai/npc/MercenaryCaptain/MercenaryCaptain.java
index d2ee5180f2..4240df36cf 100644
--- a/src/main/java/com/l2jserver/datapack/ai/npc/MercenaryCaptain/MercenaryCaptain.java
+++ b/src/main/java/com/l2jserver/datapack/ai/npc/MercenaryCaptain/MercenaryCaptain.java
@@ -18,6 +18,8 @@
  */
 package com.l2jserver.datapack.ai.npc.MercenaryCaptain;
 
+import static com.l2jserver.gameserver.config.Configuration.territoryWar;
+
 import java.util.HashMap;
 import java.util.Map;
 import java.util.StringTokenizer;
@@ -106,8 +108,8 @@ public final class MercenaryCaptain extends AbstractNpcAI
 				{
 					final NpcHtmlMessage html = new NpcHtmlMessage(npc.getObjectId());
 					html.setHtml(getHtm(player.getHtmlPrefix(), "36481-03.html"));
-					html.replace("%strider%", String.valueOf(TerritoryWarManager.MINTWBADGEFORSTRIDERS));
-					html.replace("%gstrider%", String.valueOf(TerritoryWarManager.MINTWBADGEFORBIGSTRIDER));
+					html.replace("%strider%", String.valueOf(territoryWar().getMinTerritoryBadgeForStriders()));
+					html.replace("%gstrider%", String.valueOf(territoryWar().getMinTerritoryBadgeForBigStrider()));
 					player.sendPacket(html);
 					break;
 				}
@@ -119,7 +121,7 @@ public final class MercenaryCaptain extends AbstractNpcAI
 				case "strider":
 				{
 					final String type = st.nextToken();
-					final int price = (type.equals("3")) ? TerritoryWarManager.MINTWBADGEFORBIGSTRIDER : TerritoryWarManager.MINTWBADGEFORSTRIDERS;
+					final int price = (type.equals("3")) ? territoryWar().getMinTerritoryBadgeForBigStrider() : territoryWar().getMinTerritoryBadgeForStriders();
 					final int badgeId = NPCS.get(npc.getId());
 					if (getQuestItemsCount(player, badgeId) < price)
 					{
diff --git a/src/main/java/com/l2jserver/datapack/ai/npc/Teleports/GrandBossTeleporters/GrandBossTeleporters.java b/src/main/java/com/l2jserver/datapack/ai/npc/Teleports/GrandBossTeleporters/GrandBossTeleporters.java
index 9c045e828a..295e846d93 100644
--- a/src/main/java/com/l2jserver/datapack/ai/npc/Teleports/GrandBossTeleporters/GrandBossTeleporters.java
+++ b/src/main/java/com/l2jserver/datapack/ai/npc/Teleports/GrandBossTeleporters/GrandBossTeleporters.java
@@ -18,9 +18,10 @@
  */
 package com.l2jserver.datapack.ai.npc.Teleports.GrandBossTeleporters;
 
+import static com.l2jserver.gameserver.config.Configuration.grandBoss;
+
 import com.l2jserver.datapack.ai.individual.Valakas;
 import com.l2jserver.datapack.ai.npc.AbstractNpcAI;
-import com.l2jserver.gameserver.config.Config;
 import com.l2jserver.gameserver.data.xml.impl.DoorData;
 import com.l2jserver.gameserver.instancemanager.GrandBossManager;
 import com.l2jserver.gameserver.instancemanager.QuestManager;
@@ -119,7 +120,7 @@ public final class GrandBossTeleporters extends AbstractNpcAI
 							if (status == 0)
 							{
 								L2GrandBossInstance valakas = GrandBossManager.getInstance().getBoss(29028);
-								valakasAI().startQuestTimer("beginning", Config.VALAKAS_WAIT_TIME * 60000, valakas, null);
+								valakasAI().startQuestTimer("beginning", grandBoss().getValakasWaitTime(), valakas, null);
 								GrandBossManager.getInstance().setBossStatus(29028, 1);
 							}
 						}
diff --git a/src/main/java/com/l2jserver/datapack/ai/npc/Teleports/SteelCitadelTeleport/SteelCitadelTeleport.java b/src/main/java/com/l2jserver/datapack/ai/npc/Teleports/SteelCitadelTeleport/SteelCitadelTeleport.java
index 31290c66a7..dbc51dcc57 100644
--- a/src/main/java/com/l2jserver/datapack/ai/npc/Teleports/SteelCitadelTeleport/SteelCitadelTeleport.java
+++ b/src/main/java/com/l2jserver/datapack/ai/npc/Teleports/SteelCitadelTeleport/SteelCitadelTeleport.java
@@ -18,8 +18,9 @@
  */
 package com.l2jserver.datapack.ai.npc.Teleports.SteelCitadelTeleport;
 
+import static com.l2jserver.gameserver.config.Configuration.grandBoss;
+
 import com.l2jserver.datapack.ai.npc.AbstractNpcAI;
-import com.l2jserver.gameserver.config.Config;
 import com.l2jserver.gameserver.instancemanager.GrandBossManager;
 import com.l2jserver.gameserver.instancemanager.ZoneManager;
 import com.l2jserver.gameserver.model.L2CommandChannel;
@@ -63,7 +64,7 @@ public final class SteelCitadelTeleport extends AbstractNpcAI
 		}
 		
 		final L2CommandChannel channel = player.getParty() == null ? null : player.getParty().getCommandChannel();
-		if ((channel == null) || (channel.getLeader().getObjectId() != player.getObjectId()) || (channel.getMemberCount() < Config.BELETH_MIN_PLAYERS))
+		if ((channel == null) || (channel.getLeader().getObjectId() != player.getObjectId()) || (channel.getMemberCount() < grandBoss().getBelethMinPlayers()))
 		{
 			return "32376-02a.htm";
 		}
diff --git a/src/main/java/com/l2jserver/datapack/ai/npc/TerritoryManagers/TerritoryManagers.java b/src/main/java/com/l2jserver/datapack/ai/npc/TerritoryManagers/TerritoryManagers.java
index f5a2ed17a7..6c8d34148c 100644
--- a/src/main/java/com/l2jserver/datapack/ai/npc/TerritoryManagers/TerritoryManagers.java
+++ b/src/main/java/com/l2jserver/datapack/ai/npc/TerritoryManagers/TerritoryManagers.java
@@ -18,6 +18,8 @@
  */
 package com.l2jserver.datapack.ai.npc.TerritoryManagers;
 
+import static com.l2jserver.gameserver.config.Configuration.territoryWar;
+
 import com.l2jserver.datapack.ai.npc.AbstractNpcAI;
 import com.l2jserver.gameserver.data.xml.impl.MultisellData;
 import com.l2jserver.gameserver.enums.Race;
@@ -100,7 +102,7 @@ public final class TerritoryManagers extends AbstractNpcAI
 				// L2J Custom for minimum badges required.
 				final NpcHtmlMessage html = new NpcHtmlMessage(npc.getObjectId());
 				html.setFile(player.getHtmlPrefix(), "data/scripts/ai/npc/TerritoryManagers/36490-04.html");
-				html.replace("%badge%", String.valueOf(TerritoryWarManager.MINTWBADGEFORNOBLESS));
+				html.replace("%badge%", String.valueOf(territoryWar().getMinTerritoryBadgeForNobless()));
 				player.sendPacket(html);
 				break;
 			}
@@ -121,7 +123,7 @@ public final class TerritoryManagers extends AbstractNpcAI
 			}
 			case "MakeMeNoble":
 			{
-				if (player.getInventory().getInventoryItemCount(itemId, -1) < TerritoryWarManager.MINTWBADGEFORNOBLESS)
+				if (player.getInventory().getInventoryItemCount(itemId, -1) < territoryWar().getMinTerritoryBadgeForNobless())
 				{
 					// If the player does not have enough Territory Badges, it cannot continue.
 					htmltext = "36490-02.html";
@@ -149,7 +151,7 @@ public final class TerritoryManagers extends AbstractNpcAI
 					processNoblesseQuest(player, 247, null);
 					
 					// Take the Territory Badges.
-					player.destroyItemByItemId(event, itemId, TerritoryWarManager.MINTWBADGEFORNOBLESS, npc, true);
+					player.destroyItemByItemId(event, itemId, territoryWar().getMinTerritoryBadgeForNobless(), npc, true);
 					// Give Noblesse Tiara to the player.
 					player.addItem(event, 7694, 1, npc, true);
 					// Set Noblesse status to the player.
diff --git a/src/main/java/com/l2jserver/datapack/ai/npc/TownPets/TownPets.java b/src/main/java/com/l2jserver/datapack/ai/npc/TownPets/TownPets.java
index a25b710604..0eacf91b41 100644
--- a/src/main/java/com/l2jserver/datapack/ai/npc/TownPets/TownPets.java
+++ b/src/main/java/com/l2jserver/datapack/ai/npc/TownPets/TownPets.java
@@ -18,9 +18,10 @@
  */
 package com.l2jserver.datapack.ai.npc.TownPets;
 
+import static com.l2jserver.gameserver.config.Configuration.general;
+
 import com.l2jserver.datapack.ai.npc.AbstractNpcAI;
 import com.l2jserver.gameserver.ai.CtrlIntention;
-import com.l2jserver.gameserver.config.Config;
 import com.l2jserver.gameserver.model.Location;
 import com.l2jserver.gameserver.model.actor.L2Npc;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
@@ -52,7 +53,7 @@ public final class TownPets extends AbstractNpcAI
 	{
 		super(TownPets.class.getSimpleName(), "ai/npc");
 		
-		if (Config.ALLOW_PET_WALKERS)
+		if (general().allowPetWalkers())
 		{
 			addSpawnId(PETS);
 		}
diff --git a/src/main/java/com/l2jserver/datapack/ai/npc/Trainers/HealerTrainer/HealerTrainer.java b/src/main/java/com/l2jserver/datapack/ai/npc/Trainers/HealerTrainer/HealerTrainer.java
index 55cfd9e133..88d193f112 100644
--- a/src/main/java/com/l2jserver/datapack/ai/npc/Trainers/HealerTrainer/HealerTrainer.java
+++ b/src/main/java/com/l2jserver/datapack/ai/npc/Trainers/HealerTrainer/HealerTrainer.java
@@ -18,10 +18,11 @@
  */
 package com.l2jserver.datapack.ai.npc.Trainers.HealerTrainer;
 
+import static com.l2jserver.gameserver.config.Configuration.character;
+
 import java.util.Collection;
 
 import com.l2jserver.datapack.ai.npc.AbstractNpcAI;
-import com.l2jserver.gameserver.config.Config;
 import com.l2jserver.gameserver.data.xml.impl.SkillTreesData;
 import com.l2jserver.gameserver.datatables.SkillData;
 import com.l2jserver.gameserver.model.L2SkillLearn;
@@ -128,7 +129,7 @@ public final class HealerTrainer extends AbstractNpcAI
 					break;
 				}
 				
-				if (player.getAdena() < Config.FEE_DELETE_TRANSFER_SKILLS)
+				if (player.getAdena() < character().getFeeDeleteTransferSkills())
 				{
 					player.sendPacket(SystemMessageId.CANNOT_RESET_SKILL_LINK_BECAUSE_NOT_ENOUGH_ADENA);
 					break;
@@ -160,7 +161,7 @@ public final class HealerTrainer extends AbstractNpcAI
 					// Adena gets reduced once.
 					if (hasSkills)
 					{
-						player.reduceAdena("Cleanse", Config.FEE_DELETE_TRANSFER_SKILLS, npc, true);
+						player.reduceAdena("Cleanse", character().getFeeDeleteTransferSkills(), npc, true);
 					}
 				}
 				break;
diff --git a/src/main/java/com/l2jserver/datapack/ai/npc/WyvernManager/WyvernManager.java b/src/main/java/com/l2jserver/datapack/ai/npc/WyvernManager/WyvernManager.java
index 7e45101f71..c0498ca3f6 100644
--- a/src/main/java/com/l2jserver/datapack/ai/npc/WyvernManager/WyvernManager.java
+++ b/src/main/java/com/l2jserver/datapack/ai/npc/WyvernManager/WyvernManager.java
@@ -18,12 +18,13 @@
  */
 package com.l2jserver.datapack.ai.npc.WyvernManager;
 
+import static com.l2jserver.gameserver.config.Configuration.castle;
+
 import java.util.HashMap;
 import java.util.Map;
 
 import com.l2jserver.datapack.ai.npc.AbstractNpcAI;
 import com.l2jserver.gameserver.SevenSigns;
-import com.l2jserver.gameserver.config.Config;
 import com.l2jserver.gameserver.model.actor.L2Npc;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.entity.Fort;
@@ -230,7 +231,7 @@ public final class WyvernManager extends AbstractNpcAI
 				{
 					htmltext = "wyvernmanager-02.html";
 				}
-				else if (Config.ALLOW_WYVERN_ALWAYS)
+				else if (castle().allowRideWyvernAlways())
 				{
 					htmltext = replaceAll(npc, player.getHtmlPrefix());
 				}
@@ -251,9 +252,9 @@ public final class WyvernManager extends AbstractNpcAI
 			}
 			case "RideWyvern":
 			{
-				if (!Config.ALLOW_WYVERN_ALWAYS)
+				if (!castle().allowRideWyvernAlways())
 				{
-					if (!Config.ALLOW_WYVERN_DURING_SIEGE && (isInSiege(npc) || player.isInSiege()))
+					if (!castle().allowRideWyvernDuringSiege() && (isInSiege(npc) || player.isInSiege()))
 					{
 						player.sendMessage("You cannot summon wyvern while in siege.");
 						return null;
@@ -287,7 +288,7 @@ public final class WyvernManager extends AbstractNpcAI
 		}
 		else
 		{
-			if (Config.ALLOW_WYVERN_ALWAYS)
+			if (castle().allowRideWyvernAlways())
 			{
 				htmltext = replaceAll(npc, player.getHtmlPrefix());
 			}
diff --git a/src/main/java/com/l2jserver/datapack/conquerablehalls/RainbowSpringsChateau/RainbowSpringsChateau.java b/src/main/java/com/l2jserver/datapack/conquerablehalls/RainbowSpringsChateau/RainbowSpringsChateau.java
index cf4685d236..5fc94a2247 100644
--- a/src/main/java/com/l2jserver/datapack/conquerablehalls/RainbowSpringsChateau/RainbowSpringsChateau.java
+++ b/src/main/java/com/l2jserver/datapack/conquerablehalls/RainbowSpringsChateau/RainbowSpringsChateau.java
@@ -18,6 +18,8 @@
  */
 package com.l2jserver.datapack.conquerablehalls.RainbowSpringsChateau;
 
+import static com.l2jserver.gameserver.config.Configuration.clanhall;
+
 import java.sql.Connection;
 import java.sql.PreparedStatement;
 import java.sql.ResultSet;
@@ -34,7 +36,6 @@ import java.util.concurrent.ScheduledFuture;
 import com.l2jserver.commons.database.ConnectionFactory;
 import com.l2jserver.gameserver.ThreadPoolManager;
 import com.l2jserver.gameserver.cache.HtmCache;
-import com.l2jserver.gameserver.config.Config;
 import com.l2jserver.gameserver.data.sql.impl.ClanTable;
 import com.l2jserver.gameserver.datatables.SpawnTable;
 import com.l2jserver.gameserver.instancemanager.ClanHallSiegeManager;
@@ -486,7 +487,7 @@ public final class RainbowSpringsChateau extends ClanHallSiegeEngine
 						{
 							html = "game_manager010.htm";
 						}
-						else if (clan.getLevel() < Config.CHS_CLAN_MINLEVEL)
+						else if (clan.getLevel() < clanhall().getMinClanLevel())
 						{
 							html = "game_manager011.htm";
 						}
diff --git a/src/main/java/com/l2jserver/datapack/custom/Validators/SubClassSkills.java b/src/main/java/com/l2jserver/datapack/custom/Validators/SubClassSkills.java
index 8ac2603585..096947b11f 100644
--- a/src/main/java/com/l2jserver/datapack/custom/Validators/SubClassSkills.java
+++ b/src/main/java/com/l2jserver/datapack/custom/Validators/SubClassSkills.java
@@ -18,11 +18,13 @@
  */
 package com.l2jserver.datapack.custom.Validators;
 
+import static com.l2jserver.gameserver.config.Configuration.character;
+import static com.l2jserver.gameserver.config.Configuration.general;
+
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 
-import com.l2jserver.gameserver.config.Config;
 import com.l2jserver.gameserver.data.xml.impl.ClassListData;
 import com.l2jserver.gameserver.enums.IllegalActionPunishmentType;
 import com.l2jserver.gameserver.model.PcCondOverride;
@@ -97,12 +99,12 @@ public final class SubClassSkills extends Quest
 	@Override
 	public String onEnterWorld(L2PcInstance player)
 	{
-		if (!Config.SKILL_CHECK_ENABLE)
+		if (!general().skillCheckEnable())
 		{
 			return null;
 		}
 		
-		if (player.canOverrideCond(PcCondOverride.SKILL_CONDITIONS) && !Config.SKILL_CHECK_GM)
+		if (player.canOverrideCond(PcCondOverride.SKILL_CONDITIONS) && !general().skillCheckGM())
 		{
 			return null;
 		}
@@ -114,7 +116,7 @@ public final class SubClassSkills extends Quest
 			{
 				Util.handleIllegalPlayerAction(player, "Player " + player.getName() + " has cert skill on subclass :" + s.getName() + "(" + s.getId() + "/" + s.getLevel() + "), class:" + ClassListData.getInstance().getClass(player.getClassId()).getClassName(), IllegalActionPunishmentType.NONE);
 				
-				if (Config.SKILL_CHECK_REMOVE)
+				if (general().skillCheckRemove())
 				{
 					player.removeSkill(s);
 				}
@@ -149,7 +151,7 @@ public final class SubClassSkills extends Quest
 		int id, index;
 		for (int i = VARS.length; --i >= 0;)
 		{
-			for (int j = Config.MAX_SUBCLASS; j > 0; j--)
+			for (int j = character().getMaxSubclass(); j > 0; j--)
 			{
 				qName = VARS[i] + String.valueOf(j);
 				qValue = st.getGlobalQuestVar(qName);
@@ -277,7 +279,7 @@ public final class SubClassSkills extends Quest
 						Util.handleIllegalPlayerAction(player, "Player " + player.getName() + " has invalid cert skill :" + skill.getName() + "(" + skill.getId() + "/" + skill.getLevel() + "), level too high", IllegalActionPunishmentType.NONE);
 					}
 					
-					if (Config.SKILL_CHECK_REMOVE)
+					if (general().skillCheckRemove())
 					{
 						player.removeSkill(skill);
 					}
diff --git a/src/main/java/com/l2jserver/datapack/custom/events/Elpies/Elpies.java b/src/main/java/com/l2jserver/datapack/custom/events/Elpies/Elpies.java
index 89ba6163bb..5e3bfe530c 100644
--- a/src/main/java/com/l2jserver/datapack/custom/events/Elpies/Elpies.java
+++ b/src/main/java/com/l2jserver/datapack/custom/events/Elpies/Elpies.java
@@ -18,12 +18,13 @@
  */
 package com.l2jserver.datapack.custom.events.Elpies;
 
+import static com.l2jserver.gameserver.config.Configuration.general;
+
 import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ScheduledFuture;
 
 import com.l2jserver.gameserver.ThreadPoolManager;
-import com.l2jserver.gameserver.config.Config;
 import com.l2jserver.gameserver.model.actor.L2Npc;
 import com.l2jserver.gameserver.model.actor.instance.L2EventMonsterInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
@@ -89,7 +90,7 @@ public final class Elpies extends Event
 		}
 		
 		// Check Custom Table - we use custom NPC's
-		if (!Config.CUSTOM_NPC_DATA)
+		if (!general().customNpcData())
 		{
 			_log.info(getName() + ": Event can't be started because custom NPC table is disabled!");
 			eventMaker.sendMessage("Event " + getName() + " can't be started because custom NPC table is disabled!");
diff --git a/src/main/java/com/l2jserver/datapack/custom/events/Rabbits/Rabbits.java b/src/main/java/com/l2jserver/datapack/custom/events/Rabbits/Rabbits.java
index 2e34a5fd06..324468ab42 100644
--- a/src/main/java/com/l2jserver/datapack/custom/events/Rabbits/Rabbits.java
+++ b/src/main/java/com/l2jserver/datapack/custom/events/Rabbits/Rabbits.java
@@ -18,12 +18,13 @@
  */
 package com.l2jserver.datapack.custom.events.Rabbits;
 
+import static com.l2jserver.gameserver.config.Configuration.general;
+
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
 
-import com.l2jserver.gameserver.config.Config;
 import com.l2jserver.gameserver.model.L2Object;
 import com.l2jserver.gameserver.model.actor.L2Npc;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
@@ -97,7 +98,7 @@ public final class Rabbits extends Event
 		}
 		
 		// Check starting conditions
-		if (!Config.CUSTOM_NPC_DATA)
+		if (!general().customNpcData())
 		{
 			_log.info(getName() + ": Event can't be started, because custom NPCs are disabled!");
 			eventMaker.sendMessage("Event " + getName() + " can't be started because custom NPCs are disabled!");
diff --git a/src/main/java/com/l2jserver/datapack/custom/events/Race/Race.java b/src/main/java/com/l2jserver/datapack/custom/events/Race/Race.java
index 01706989a6..971670fdcb 100644
--- a/src/main/java/com/l2jserver/datapack/custom/events/Race/Race.java
+++ b/src/main/java/com/l2jserver/datapack/custom/events/Race/Race.java
@@ -18,12 +18,13 @@
  */
 package com.l2jserver.datapack.custom.events.Race;
 
+import static com.l2jserver.gameserver.config.Configuration.general;
+
 import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ScheduledFuture;
 
 import com.l2jserver.gameserver.ThreadPoolManager;
-import com.l2jserver.gameserver.config.Config;
 import com.l2jserver.gameserver.datatables.SkillData;
 import com.l2jserver.gameserver.model.actor.L2Npc;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
@@ -116,7 +117,7 @@ public final class Race extends Event {
 		}
 		
 		// Check Custom Table - we use custom NPC's
-		if (!Config.CUSTOM_NPC_DATA) {
+		if (!general().customNpcData()) {
 			_log.info(getName() + ": Event can't be started, because custom npc table is disabled!");
 			eventMaker.sendMessage("Event " + getName() + " can't be started because custom NPC table is disabled!");
 			return false;
diff --git a/src/main/java/com/l2jserver/datapack/custom/events/TvT/TvTManager/TvTManager.java b/src/main/java/com/l2jserver/datapack/custom/events/TvT/TvTManager/TvTManager.java
index e3e658262e..32f3ecd164 100644
--- a/src/main/java/com/l2jserver/datapack/custom/events/TvT/TvTManager/TvTManager.java
+++ b/src/main/java/com/l2jserver/datapack/custom/events/TvT/TvTManager/TvTManager.java
@@ -18,8 +18,9 @@
  */
 package com.l2jserver.datapack.custom.events.TvT.TvTManager;
 
+import static com.l2jserver.gameserver.config.Configuration.tvt;
+
 import com.l2jserver.datapack.ai.npc.AbstractNpcAI;
-import com.l2jserver.gameserver.config.Config;
 import com.l2jserver.gameserver.handler.IVoicedCommandHandler;
 import com.l2jserver.gameserver.handler.VoicedCommandHandler;
 import com.l2jserver.gameserver.instancemanager.AntiFeedManager;
@@ -50,7 +51,7 @@ public final class TvTManager extends AbstractNpcAI implements IVoicedCommandHan
 		addTalkId(MANAGER_ID);
 		addStartNpc(MANAGER_ID);
 		
-		if (Config.TVT_ALLOW_VOICED_COMMAND)
+		if (tvt().allowVoicedInfoCommand())
 		{
 			VoicedCommandHandler.getInstance().registerHandler(this);
 		}
@@ -84,21 +85,21 @@ public final class TvTManager extends AbstractNpcAI implements IVoicedCommandHan
 				{
 					htmltext = getHtm(player.getHtmlPrefix(), "Karma.html");
 				}
-				else if ((playerLevel < Config.TVT_EVENT_MIN_LVL) || (playerLevel > Config.TVT_EVENT_MAX_LVL))
+				else if ((playerLevel < tvt().getMinPlayerLevel()) || (playerLevel > tvt().getMaxPlayerLevel()))
 				{
 					htmltext = getHtm(player.getHtmlPrefix(), "Level.html");
-					htmltext = htmltext.replaceAll("%min%", String.valueOf(Config.TVT_EVENT_MIN_LVL));
-					htmltext = htmltext.replaceAll("%max%", String.valueOf(Config.TVT_EVENT_MAX_LVL));
+					htmltext = htmltext.replaceAll("%min%", String.valueOf(tvt().getMinPlayerLevel()));
+					htmltext = htmltext.replaceAll("%max%", String.valueOf(tvt().getMaxPlayerLevel()));
 				}
-				else if ((team1Count == Config.TVT_EVENT_MAX_PLAYERS_IN_TEAMS) && (team2Count == Config.TVT_EVENT_MAX_PLAYERS_IN_TEAMS))
+				else if ((team1Count == tvt().getMaxPlayersInTeams()) && (team2Count == tvt().getMaxPlayersInTeams()))
 				{
 					htmltext = getHtm(player.getHtmlPrefix(), "TeamsFull.html");
-					htmltext = htmltext.replaceAll("%max%", String.valueOf(Config.TVT_EVENT_MAX_PLAYERS_IN_TEAMS));
+					htmltext = htmltext.replaceAll("%max%", String.valueOf(tvt().getMaxPlayersInTeams()));
 				}
-				else if ((Config.TVT_EVENT_MAX_PARTICIPANTS_PER_IP > 0) && !AntiFeedManager.getInstance().tryAddPlayer(AntiFeedManager.TVT_ID, player, Config.TVT_EVENT_MAX_PARTICIPANTS_PER_IP))
+				else if ((tvt().getMaxParticipantsPerIP() > 0) && !AntiFeedManager.getInstance().tryAddPlayer(AntiFeedManager.TVT_ID, player, tvt().getMaxParticipantsPerIP()))
 				{
 					htmltext = getHtm(player.getHtmlPrefix(), "IPRestriction.html");
-					htmltext = htmltext.replaceAll("%max%", String.valueOf(AntiFeedManager.getInstance().getLimit(player, Config.TVT_EVENT_MAX_PARTICIPANTS_PER_IP)));
+					htmltext = htmltext.replaceAll("%max%", String.valueOf(AntiFeedManager.getInstance().getLimit(player, tvt().getMaxParticipantsPerIP())));
 				}
 				else if (TvTEvent.needParticipationFee() && !TvTEvent.hasParticipationFee(player))
 				{
@@ -115,7 +116,7 @@ public final class TvTManager extends AbstractNpcAI implements IVoicedCommandHan
 			{
 				if (TvTEvent.removeParticipant(player.getObjectId()))
 				{
-					if (Config.TVT_EVENT_MAX_PARTICIPANTS_PER_IP > 0)
+					if (tvt().getMaxParticipantsPerIP() > 0)
 					{
 						AntiFeedManager.getInstance().removePlayer(AntiFeedManager.TVT_ID, player);
 					}
@@ -141,9 +142,9 @@ public final class TvTManager extends AbstractNpcAI implements IVoicedCommandHan
 			int[] teamsPlayerCounts = TvTEvent.getTeamsPlayerCounts();
 			htmltext = getHtm(player.getHtmlPrefix(), (!isParticipant ? "Participation.html" : "RemoveParticipation.html"));
 			htmltext = htmltext.replaceAll("%objectId%", String.valueOf(npc.getObjectId()));
-			htmltext = htmltext.replaceAll("%team1name%", Config.TVT_EVENT_TEAM_1_NAME);
+			htmltext = htmltext.replaceAll("%team1name%", tvt().getTeam1Name());
 			htmltext = htmltext.replaceAll("%team1playercount%", String.valueOf(teamsPlayerCounts[0]));
-			htmltext = htmltext.replaceAll("%team2name%", Config.TVT_EVENT_TEAM_2_NAME);
+			htmltext = htmltext.replaceAll("%team2name%", tvt().getTeam2Name());
 			htmltext = htmltext.replaceAll("%team2playercount%", String.valueOf(teamsPlayerCounts[1]));
 			htmltext = htmltext.replaceAll("%playercount%", String.valueOf(teamsPlayerCounts[0] + teamsPlayerCounts[1]));
 			
@@ -201,10 +202,10 @@ public final class TvTManager extends AbstractNpcAI implements IVoicedCommandHan
 		int[] teamsPlayerCounts = TvTEvent.getTeamsPlayerCounts();
 		int[] teamsPointsCounts = TvTEvent.getTeamsPoints();
 		String htmltext = getHtm(player.getHtmlPrefix(), "Status.html");
-		htmltext = htmltext.replaceAll("%team1name%", Config.TVT_EVENT_TEAM_1_NAME);
+		htmltext = htmltext.replaceAll("%team1name%", tvt().getTeam1Name());
 		htmltext = htmltext.replaceAll("%team1playercount%", String.valueOf(teamsPlayerCounts[0]));
 		htmltext = htmltext.replaceAll("%team1points%", String.valueOf(teamsPointsCounts[0]));
-		htmltext = htmltext.replaceAll("%team2name%", Config.TVT_EVENT_TEAM_2_NAME);
+		htmltext = htmltext.replaceAll("%team2name%", tvt().getTeam2Name());
 		htmltext = htmltext.replaceAll("%team2playercount%", String.valueOf(teamsPlayerCounts[1]));
 		htmltext = htmltext.replaceAll("%team2points%", String.valueOf(teamsPointsCounts[1]));
 		return htmltext;
diff --git a/src/main/java/com/l2jserver/datapack/custom/events/Wedding/Wedding.java b/src/main/java/com/l2jserver/datapack/custom/events/Wedding/Wedding.java
index d4c62ce1ab..dc999ab6ec 100644
--- a/src/main/java/com/l2jserver/datapack/custom/events/Wedding/Wedding.java
+++ b/src/main/java/com/l2jserver/datapack/custom/events/Wedding/Wedding.java
@@ -18,8 +18,9 @@
  */
 package com.l2jserver.datapack.custom.events.Wedding;
 
+import static com.l2jserver.gameserver.config.Configuration.customs;
+
 import com.l2jserver.datapack.ai.npc.AbstractNpcAI;
-import com.l2jserver.gameserver.config.Config;
 import com.l2jserver.gameserver.instancemanager.CoupleManager;
 import com.l2jserver.gameserver.model.L2World;
 import com.l2jserver.gameserver.model.actor.L2Npc;
@@ -118,14 +119,14 @@ public final class Wedding extends AbstractNpcAI
 				{
 					htmltext = sendHtml(partner, "NoFormal.html", null, null);
 				}
-				else if ((player.getAdena() < Config.L2JMOD_WEDDING_PRICE) || (partner.getAdena() < Config.L2JMOD_WEDDING_PRICE))
+				else if ((player.getAdena() < customs().getWeddingPrice()) || (partner.getAdena() < customs().getWeddingPrice()))
 				{
-					htmltext = sendHtml(partner, "Adena.html", "%fee%", String.valueOf(Config.L2JMOD_WEDDING_PRICE));
+					htmltext = sendHtml(partner, "Adena.html", "%fee%", String.valueOf(customs().getWeddingPrice()));
 				}
 				else
 				{
-					player.reduceAdena("Wedding", Config.L2JMOD_WEDDING_PRICE, player.getLastFolkNPC(), true);
-					partner.reduceAdena("Wedding", Config.L2JMOD_WEDDING_PRICE, player.getLastFolkNPC(), true);
+					player.reduceAdena("Wedding", customs().getWeddingPrice(), player.getLastFolkNPC(), true);
+					partner.reduceAdena("Wedding", customs().getWeddingPrice(), player.getLastFolkNPC(), true);
 					
 					// Accept the wedding request
 					player.setMarryAccepted(true);
@@ -179,7 +180,7 @@ public final class Wedding extends AbstractNpcAI
 	public String onFirstTalk(L2Npc npc, L2PcInstance player)
 	{
 		final String htmltext = getHtm(player.getHtmlPrefix(), "Start.html");
-		return htmltext.replaceAll("%fee%", String.valueOf(Config.L2JMOD_WEDDING_PRICE));
+		return htmltext.replaceAll("%fee%", String.valueOf(customs().getWeddingPrice()));
 	}
 	
 	private String sendHtml(L2PcInstance player, String fileName, String regex, String replacement)
@@ -195,7 +196,7 @@ public final class Wedding extends AbstractNpcAI
 	
 	private static boolean isWearingFormalWear(L2PcInstance player)
 	{
-		if (Config.L2JMOD_WEDDING_FORMALWEAR)
+		if (customs().weddingFormalWear())
 		{
 			final L2ItemInstance formalWear = player.getChestArmorInstance();
 			return (formalWear != null) && (formalWear.getId() == FORMAL_WEAR);
diff --git a/src/main/java/com/l2jserver/datapack/features/SkillTransfer/SkillTransfer.java b/src/main/java/com/l2jserver/datapack/features/SkillTransfer/SkillTransfer.java
index 0e4a97f344..b916e9c206 100644
--- a/src/main/java/com/l2jserver/datapack/features/SkillTransfer/SkillTransfer.java
+++ b/src/main/java/com/l2jserver/datapack/features/SkillTransfer/SkillTransfer.java
@@ -18,8 +18,9 @@
  */
 package com.l2jserver.datapack.features.SkillTransfer;
 
+import static com.l2jserver.gameserver.config.Configuration.general;
+
 import com.l2jserver.datapack.ai.npc.AbstractNpcAI;
-import com.l2jserver.gameserver.config.Config;
 import com.l2jserver.gameserver.data.xml.impl.ClassListData;
 import com.l2jserver.gameserver.data.xml.impl.SkillTreesData;
 import com.l2jserver.gameserver.enums.IllegalActionPunishmentType;
@@ -56,7 +57,7 @@ public final class SkillTransfer extends AbstractNpcAI
 		super(SkillTransfer.class.getSimpleName(), "features");
 		setPlayerProfessionChangeId(this::onProfessionChange);
 		setPlayerProfessionCancelId(this::onProfessionCancel);
-		setOnEnterWorld(Config.SKILL_CHECK_ENABLE);
+		setOnEnterWorld(general().skillCheckEnable());
 	}
 	
 	public void onProfessionChange(OnPlayerProfessionChange event)
@@ -102,7 +103,7 @@ public final class SkillTransfer extends AbstractNpcAI
 	@Override
 	public String onEnterWorld(L2PcInstance player)
 	{
-		if (!player.canOverrideCond(PcCondOverride.SKILL_CONDITIONS) || Config.SKILL_CHECK_GM)
+		if (!player.canOverrideCond(PcCondOverride.SKILL_CONDITIONS) || general().skillCheckGM())
 		{
 			final int index = getTransferClassIndex(player);
 			if (index < 0)
@@ -127,7 +128,7 @@ public final class SkillTransfer extends AbstractNpcAI
 						{
 							final String className = ClassListData.getInstance().getClass(player.getClassId()).getClassName();
 							Util.handleIllegalPlayerAction(player, "Player " + player.getName() + " has too many transfered skills or items, skill:" + s.getName() + " (" + sk.getId() + "/" + sk.getLevel() + "), class:" + className, IllegalActionPunishmentType.BROADCAST);
-							if (Config.SKILL_CHECK_REMOVE)
+							if (general().skillCheckRemove())
 							{
 								player.removeSkill(sk);
 							}
diff --git a/src/main/java/com/l2jserver/datapack/gracia/AI/EnergySeeds.java b/src/main/java/com/l2jserver/datapack/gracia/AI/EnergySeeds.java
index 29b3ea877e..9c4cb86ea6 100644
--- a/src/main/java/com/l2jserver/datapack/gracia/AI/EnergySeeds.java
+++ b/src/main/java/com/l2jserver/datapack/gracia/AI/EnergySeeds.java
@@ -18,6 +18,8 @@
  */
 package com.l2jserver.datapack.gracia.AI;
 
+import static com.l2jserver.gameserver.config.Configuration.rates;
+
 import java.util.HashMap;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
@@ -26,7 +28,6 @@ import com.l2jserver.datapack.ai.npc.AbstractNpcAI;
 import com.l2jserver.datapack.quests.Q00692_HowtoOpposeEvil.Q00692_HowtoOpposeEvil;
 import com.l2jserver.gameserver.ThreadPoolManager;
 import com.l2jserver.gameserver.ai.CtrlIntention;
-import com.l2jserver.gameserver.config.Config;
 import com.l2jserver.gameserver.data.xml.impl.DoorData;
 import com.l2jserver.gameserver.data.xml.impl.NpcData;
 import com.l2jserver.gameserver.enums.audio.Sound;
@@ -387,7 +388,7 @@ public class EnergySeeds extends AbstractNpcAI
 	
 	private void handleQuestDrop(L2PcInstance player, int itemId)
 	{
-		double chance = HOWTOOPPOSEEVIL_CHANCE * Config.RATE_QUEST_DROP;
+		double chance = HOWTOOPPOSEEVIL_CHANCE * rates().getRateQuestDrop();
 		int numItems = (int) (chance / 100);
 		chance = chance % 100;
 		if (getRandom(100) < chance)
diff --git a/src/main/java/com/l2jserver/datapack/gracia/instances/SeedOfDestruction/Stage1.java b/src/main/java/com/l2jserver/datapack/gracia/instances/SeedOfDestruction/Stage1.java
index a09bd31627..3e14c07293 100644
--- a/src/main/java/com/l2jserver/datapack/gracia/instances/SeedOfDestruction/Stage1.java
+++ b/src/main/java/com/l2jserver/datapack/gracia/instances/SeedOfDestruction/Stage1.java
@@ -18,6 +18,9 @@
  */
 package com.l2jserver.datapack.gracia.instances.SeedOfDestruction;
 
+import static com.l2jserver.gameserver.config.Configuration.general;
+import static com.l2jserver.gameserver.config.Configuration.server;
+
 import java.io.File;
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -36,7 +39,6 @@ import org.w3c.dom.Node;
 import com.l2jserver.datapack.instances.AbstractInstance;
 import com.l2jserver.gameserver.GeoData;
 import com.l2jserver.gameserver.ai.CtrlIntention;
-import com.l2jserver.gameserver.config.Config;
 import com.l2jserver.gameserver.enums.InstanceType;
 import com.l2jserver.gameserver.enums.TrapAction;
 import com.l2jserver.gameserver.instancemanager.GraciaSeedsManager;
@@ -237,7 +239,7 @@ public final class Stage1 extends AbstractInstance
 			factory.setValidating(false);
 			factory.setIgnoringComments(true);
 			
-			File file = new File(Config.DATAPACK_ROOT + "/data/spawnZones/seed_of_destruction.xml");
+			File file = new File(server().getDatapackRoot(), "/data/spawnZones/seed_of_destruction.xml");
 			if (!file.exists())
 			{
 				_log.severe("[Seed of Destruction] Missing seed_of_destruction.xml. The quest wont work without it!");
@@ -444,7 +446,7 @@ public final class Stage1 extends AbstractInstance
 		{
 			_log.log(Level.WARNING, "[Seed of Destruction] Could not parse data.xml file: " + e.getMessage(), e);
 		}
-		if (Config.DEBUG)
+		if (general().debug())
 		{
 			_log.info("[Seed of Destruction] Loaded " + spawnCount + " spawns data.");
 			_log.info("[Seed of Destruction] Loaded " + _spawnZoneList.size() + " spawn zones data.");
diff --git a/src/main/java/com/l2jserver/datapack/handlers/MasterHandler.java b/src/main/java/com/l2jserver/datapack/handlers/MasterHandler.java
index 3faf744175..646ad2080f 100644
--- a/src/main/java/com/l2jserver/datapack/handlers/MasterHandler.java
+++ b/src/main/java/com/l2jserver/datapack/handlers/MasterHandler.java
@@ -18,6 +18,8 @@
  */
 package com.l2jserver.datapack.handlers;
 
+import static com.l2jserver.gameserver.config.Configuration.customs;
+
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -263,7 +265,6 @@ import com.l2jserver.datapack.handlers.voicedcommandhandlers.Debug;
 import com.l2jserver.datapack.handlers.voicedcommandhandlers.Lang;
 import com.l2jserver.datapack.handlers.voicedcommandhandlers.StatsVCmd;
 import com.l2jserver.datapack.handlers.voicedcommandhandlers.Wedding;
-import com.l2jserver.gameserver.config.Config;
 import com.l2jserver.gameserver.handler.ActionHandler;
 import com.l2jserver.gameserver.handler.ActionShiftHandler;
 import com.l2jserver.gameserver.handler.AdminCommandHandler;
@@ -558,12 +559,12 @@ public class MasterHandler {
 		// TODO: Add configuration options for this voiced commands:
 		// CastleVCmd.class,
 		// SetVCmd.class,
-		(Config.L2JMOD_ALLOW_WEDDING ? Wedding.class : null),
-		(Config.BANKING_SYSTEM_ENABLED ? Banking.class : null),
-		(Config.L2JMOD_CHAT_ADMIN ? ChatAdmin.class : null),
-		(Config.L2JMOD_MULTILANG_ENABLE && Config.L2JMOD_MULTILANG_VOICED_ALLOW ? Lang.class : null),
-		(Config.L2JMOD_DEBUG_VOICE_COMMAND ? Debug.class : null),
-		(Config.L2JMOD_ALLOW_CHANGE_PASSWORD ? ChangePassword.class : null),
+		(customs().allowWedding() ? Wedding.class : null),
+		(customs().bankingEnabled() ? Banking.class : null),
+		(customs().chatAdmin() ? ChatAdmin.class : null),
+		(customs().multiLangEnable() && customs().multiLangVoiceCommand() ? Lang.class : null),
+		(customs().debugVoiceCommand() ? Debug.class : null),
+		(customs().allowChangePassword() ? ChangePassword.class : null),
 	};
 	
 	// TODO(Zoey76): Add this handler.
diff --git a/src/main/java/com/l2jserver/datapack/handlers/actionhandlers/L2NpcAction.java b/src/main/java/com/l2jserver/datapack/handlers/actionhandlers/L2NpcAction.java
index dddd5a7c61..e0a9038504 100644
--- a/src/main/java/com/l2jserver/datapack/handlers/actionhandlers/L2NpcAction.java
+++ b/src/main/java/com/l2jserver/datapack/handlers/actionhandlers/L2NpcAction.java
@@ -18,10 +18,11 @@
  */
 package com.l2jserver.datapack.handlers.actionhandlers;
 
+import static com.l2jserver.gameserver.config.Configuration.character;
+
 import com.l2jserver.commons.util.Rnd;
 import com.l2jserver.gameserver.GeoData;
 import com.l2jserver.gameserver.ai.CtrlIntention;
-import com.l2jserver.gameserver.config.Config;
 import com.l2jserver.gameserver.enums.InstanceType;
 import com.l2jserver.gameserver.handler.IActionHandler;
 import com.l2jserver.gameserver.model.L2Object;
@@ -135,7 +136,8 @@ public class L2NpcAction implements IActionHandler
 							npc.showChatWindow(activeChar);
 						}
 					}
-					if ((Config.PLAYER_MOVEMENT_BLOCK_TIME > 0) && !activeChar.isGM())
+					
+					if ((character().getNpcTalkBlockingTime() > 0) && !activeChar.isGM())
 					{
 						activeChar.updateNotMoveUntil();
 					}
diff --git a/src/main/java/com/l2jserver/datapack/handlers/actionshifthandlers/L2NpcActionShift.java b/src/main/java/com/l2jserver/datapack/handlers/actionshifthandlers/L2NpcActionShift.java
index e02a7661a8..ca6b73faa9 100644
--- a/src/main/java/com/l2jserver/datapack/handlers/actionshifthandlers/L2NpcActionShift.java
+++ b/src/main/java/com/l2jserver/datapack/handlers/actionshifthandlers/L2NpcActionShift.java
@@ -18,10 +18,11 @@
  */
 package com.l2jserver.datapack.handlers.actionshifthandlers;
 
+import static com.l2jserver.gameserver.config.Configuration.npc;
+
 import java.util.Set;
 
 import com.l2jserver.datapack.handlers.bypasshandlers.NpcViewMod;
-import com.l2jserver.gameserver.config.Config;
 import com.l2jserver.gameserver.enums.InstanceType;
 import com.l2jserver.gameserver.handler.IActionShiftHandler;
 import com.l2jserver.gameserver.instancemanager.WalkingManager;
@@ -180,7 +181,7 @@ public class L2NpcActionShift implements IActionShiftHandler
 			}
 			activeChar.sendPacket(html);
 		}
-		else if (Config.ALT_GAME_VIEWNPC)
+		else if (npc().viewNpc())
 		{
 			if (!target.isNpc())
 			{
diff --git a/src/main/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminAdmin.java b/src/main/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminAdmin.java
index ce7885fa52..e4d11ba700 100644
--- a/src/main/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminAdmin.java
+++ b/src/main/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminAdmin.java
@@ -18,10 +18,15 @@
  */
 package com.l2jserver.datapack.handlers.admincommandhandlers;
 
+import static com.l2jserver.gameserver.config.Configuration.character;
+import static com.l2jserver.gameserver.config.Configuration.rates;
+
 import java.util.StringTokenizer;
 import java.util.logging.Logger;
 
-import com.l2jserver.gameserver.config.Config;
+import org.aeonbits.owner.Mutable;
+
+import com.l2jserver.gameserver.config.Configuration;
 import com.l2jserver.gameserver.data.xml.impl.AdminData;
 import com.l2jserver.gameserver.handler.IAdminCommandHandler;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
@@ -220,68 +225,29 @@ public class AdminAdmin implements IAdminCommandHandler
 			}
 			AdminHtml.showAdminHtml(activeChar, "gm_menu.htm");
 		}
-		else if (command.startsWith("admin_setconfig"))
-		{
+		else if (command.startsWith("admin_set")) {
 			StringTokenizer st = new StringTokenizer(command);
 			st.nextToken();
-			try
-			{
-				String pName = st.nextToken();
-				String pValue = st.nextToken();
-				if (Config.setParameterValue(pName, pValue))
-				{
-					activeChar.sendMessage("Config parameter " + pName + " set to " + pValue);
-				}
-				else
-				{
-					activeChar.sendMessage("Invalid parameter!");
+			try {
+				String configName = st.nextToken();
+				String name = st.nextToken();
+				String value = st.nextToken();
+				
+				final var field = Configuration.class.getDeclaredField(configName);
+				if (field.getType().isInstance(Mutable.class)) {
+					try {
+						((Mutable) field.get(Configuration.class)).setProperty(name, value);
+						activeChar.sendMessage("Set " + name + "=" + value + " in " + configName + ".");
+					} catch (Exception ex) {
+						activeChar.sendMessage("Failed to set " + name + "=" + value + " in " + configName + ".");
+					}
 				}
-			}
-			catch (Exception e)
-			{
+			} catch (Exception ex) {
 				activeChar.sendMessage("Usage: //setconfig <parameter> <value>");
-			}
-			finally
-			{
+			} finally {
 				showConfigPage(activeChar);
 			}
 		}
-		else if (command.startsWith("admin_set"))
-		{
-			StringTokenizer st = new StringTokenizer(command);
-			String[] cmd = st.nextToken().split("_");
-			try
-			{
-				String[] parameter = st.nextToken().split("=");
-				String pName = parameter[0].trim();
-				String pValue = parameter[1].trim();
-				if (Config.setParameterValue(pName, pValue))
-				{
-					activeChar.sendMessage("parameter " + pName + " succesfully set to " + pValue);
-				}
-				else
-				{
-					activeChar.sendMessage("Invalid parameter!");
-				}
-			}
-			catch (Exception e)
-			{
-				if (cmd.length == 2)
-				{
-					activeChar.sendMessage("Usage: //set parameter=value");
-				}
-			}
-			finally
-			{
-				if (cmd.length == 3)
-				{
-					if (cmd[2].equalsIgnoreCase("mod"))
-					{
-						AdminHtml.showAdminHtml(activeChar, "mods_menu.htm");
-					}
-				}
-			}
-		}
 		else if (command.startsWith("admin_gmon"))
 		{
 			// nothing
@@ -343,15 +309,15 @@ public class AdminAdmin implements IAdminCommandHandler
 		replyMSG.append("<center><table width=270><tr><td width=60><button value=\"Main\" action=\"bypass -h admin_admin\" width=60 height=25 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td><td width=150>Config Server Panel</td><td width=60><button value=\"Back\" action=\"bypass -h admin_admin4\" width=60 height=25 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td></tr></table></center><br>");
 		replyMSG.append("<center><table width=260><tr><td width=140></td><td width=40></td><td width=40></td></tr>");
 		replyMSG.append("<tr><td><font color=\"00AA00\">Drop:</font></td><td></td><td></td></tr>");
-		replyMSG.append("<tr><td><font color=\"LEVEL\">Rate EXP</font> = " + Config.RATE_XP + "</td><td><edit var=\"param1\" width=40 height=15></td><td><button value=\"Set\" action=\"bypass -h admin_setconfig RateXp $param1\" width=40 height=25 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td></tr>");
-		replyMSG.append("<tr><td><font color=\"LEVEL\">Rate SP</font> = " + Config.RATE_SP + "</td><td><edit var=\"param2\" width=40 height=15></td><td><button value=\"Set\" action=\"bypass -h admin_setconfig RateSp $param2\" width=40 height=25 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td></tr>");
-		replyMSG.append("<tr><td><font color=\"LEVEL\">Rate Drop Spoil</font> = " + Config.RATE_CORPSE_DROP_CHANCE_MULTIPLIER + "</td><td><edit var=\"param4\" width=40 height=15></td><td><button value=\"Set\" action=\"bypass -h admin_setconfig RateDropSpoil $param4\" width=40 height=25 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td></tr>");
+		replyMSG.append("<tr><td><font color=\"LEVEL\">Rate EXP</font> = " + rates().getRateXp() + "</td><td><edit var=\"param1\" width=40 height=15></td><td><button value=\"Set\" action=\"bypass -h admin_setconfig RateXp $param1\" width=40 height=25 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td></tr>");
+		replyMSG.append("<tr><td><font color=\"LEVEL\">Rate SP</font> = " + rates().getRateSp() + "</td><td><edit var=\"param2\" width=40 height=15></td><td><button value=\"Set\" action=\"bypass -h admin_setconfig RateSp $param2\" width=40 height=25 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td></tr>");
+		replyMSG.append("<tr><td><font color=\"LEVEL\">Rate Drop Spoil</font> = " + rates().getCorpseDropChanceMultiplier() + "</td><td><edit var=\"param4\" width=40 height=15></td><td><button value=\"Set\" action=\"bypass -h admin_setconfig RateDropSpoil $param4\" width=40 height=25 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td></tr>");
 		replyMSG.append("<tr><td width=140></td><td width=40></td><td width=40></td></tr>");
 		replyMSG.append("<tr><td><font color=\"00AA00\">Enchant:</font></td><td></td><td></td></tr>");
-		replyMSG.append("<tr><td><font color=\"LEVEL\">Enchant Element Stone</font> = " + Config.ENCHANT_CHANCE_ELEMENT_STONE + "</td><td><edit var=\"param8\" width=40 height=15></td><td><button value=\"Set\" action=\"bypass -h admin_setconfig EnchantChanceElementStone $param8\" width=40 height=25 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td></tr>");
-		replyMSG.append("<tr><td><font color=\"LEVEL\">Enchant Element Crystal</font> = " + Config.ENCHANT_CHANCE_ELEMENT_CRYSTAL + "</td><td><edit var=\"param9\" width=40 height=15></td><td><button value=\"Set\" action=\"bypass -h admin_setconfig EnchantChanceElementCrystal $param9\" width=40 height=25 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td></tr>");
-		replyMSG.append("<tr><td><font color=\"LEVEL\">Enchant Element Jewel</font> = " + Config.ENCHANT_CHANCE_ELEMENT_JEWEL + "</td><td><edit var=\"param10\" width=40 height=15></td><td><button value=\"Set\" action=\"bypass -h admin_setconfig EnchantChanceElementJewel $param10\" width=40 height=25 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td></tr>");
-		replyMSG.append("<tr><td><font color=\"LEVEL\">Enchant Element Energy</font> = " + Config.ENCHANT_CHANCE_ELEMENT_ENERGY + "</td><td><edit var=\"param11\" width=40 height=15></td><td><button value=\"Set\" action=\"bypass -h admin_setconfig EnchantChanceElementEnergy $param11\" width=40 height=25 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td></tr>");
+		replyMSG.append("<tr><td><font color=\"LEVEL\">Enchant Element Stone</font> = " + character().getEnchantChanceElementStone() + "</td><td><edit var=\"param8\" width=40 height=15></td><td><button value=\"Set\" action=\"bypass -h admin_setconfig EnchantChanceElementStone $param8\" width=40 height=25 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td></tr>");
+		replyMSG.append("<tr><td><font color=\"LEVEL\">Enchant Element Crystal</font> = " + character().getEnchantChanceElementCrystal() + "</td><td><edit var=\"param9\" width=40 height=15></td><td><button value=\"Set\" action=\"bypass -h admin_setconfig EnchantChanceElementCrystal $param9\" width=40 height=25 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td></tr>");
+		replyMSG.append("<tr><td><font color=\"LEVEL\">Enchant Element Jewel</font> = " + character().getEnchantChanceElementJewel() + "</td><td><edit var=\"param10\" width=40 height=15></td><td><button value=\"Set\" action=\"bypass -h admin_setconfig EnchantChanceElementJewel $param10\" width=40 height=25 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td></tr>");
+		replyMSG.append("<tr><td><font color=\"LEVEL\">Enchant Element Energy</font> = " + character().getEnchantChanceElementEnergy() + "</td><td><edit var=\"param11\" width=40 height=15></td><td><button value=\"Set\" action=\"bypass -h admin_setconfig EnchantChanceElementEnergy $param11\" width=40 height=25 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td></tr>");
 		
 		replyMSG.append("</table></body></html>");
 		adminReply.setHtml(replyMSG.toString());
diff --git a/src/main/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminAnnouncements.java b/src/main/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminAnnouncements.java
index 706e67ba17..7eff1fe625 100644
--- a/src/main/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminAnnouncements.java
+++ b/src/main/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminAnnouncements.java
@@ -18,10 +18,11 @@
  */
 package com.l2jserver.datapack.handlers.admincommandhandlers;
 
+import static com.l2jserver.gameserver.config.Configuration.general;
+
 import java.util.StringTokenizer;
 
 import com.l2jserver.gameserver.cache.HtmCache;
-import com.l2jserver.gameserver.config.Config;
 import com.l2jserver.gameserver.data.sql.impl.AnnouncementsTable;
 import com.l2jserver.gameserver.handler.IAdminCommandHandler;
 import com.l2jserver.gameserver.model.PageResult;
@@ -74,7 +75,7 @@ public class AdminAnnouncements implements IAdminCommandHandler
 				}
 				else
 				{
-					if (Config.GM_ANNOUNCER_NAME)
+					if (general().gmShowAnnouncerName())
 					{
 						announce = announce + " [" + activeChar.getName() + "]";
 					}
diff --git a/src/main/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminBuffs.java b/src/main/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminBuffs.java
index 381092d8bf..71cd729adc 100644
--- a/src/main/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminBuffs.java
+++ b/src/main/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminBuffs.java
@@ -18,12 +18,13 @@
  */
 package com.l2jserver.datapack.handlers.admincommandhandlers;
 
+import static com.l2jserver.gameserver.config.Configuration.general;
+
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
 import java.util.StringTokenizer;
 
-import com.l2jserver.gameserver.config.Config;
 import com.l2jserver.gameserver.data.xml.impl.SkillTreesData;
 import com.l2jserver.gameserver.handler.IAdminCommandHandler;
 import com.l2jserver.gameserver.model.L2Object;
@@ -197,7 +198,7 @@ public class AdminBuffs implements IAdminCommandHandler
 		}
 		else if (command.startsWith("admin_switch_gm_buffs"))
 		{
-			if (Config.GM_GIVE_SPECIAL_SKILLS != Config.GM_GIVE_SPECIAL_AURA_SKILLS)
+			if (general().gmGiveSpecialSkills() != general().gmGiveSpecialAuraSkills())
 			{
 				final boolean toAuraSkills = activeChar.getKnownSkill(7041) != null;
 				switchSkills(activeChar, toAuraSkills);
@@ -325,7 +326,7 @@ public class AdminBuffs implements IAdminCommandHandler
 		// Send the packet
 		activeChar.sendPacket(new NpcHtmlMessage(html.toString()));
 		
-		if (Config.GMAUDIT)
+		if (general().gmAudit())
 		{
 			GMAudit.auditGMAction(activeChar.getName() + " [" + activeChar.getObjectId() + "]", "getbuffs", target.getName() + " (" + Integer.toString(target.getObjectId()) + ")", "");
 		}
@@ -351,7 +352,7 @@ public class AdminBuffs implements IAdminCommandHandler
 			}
 			
 			showBuffs(activeChar, target, 1, false);
-			if (Config.GMAUDIT)
+			if (general().gmAudit())
 			{
 				GMAudit.auditGMAction(activeChar.getName() + " [" + activeChar.getObjectId() + "]", "stopbuff", target.getName() + " (" + objId + ")", Integer.toString(skillId));
 			}
@@ -374,7 +375,7 @@ public class AdminBuffs implements IAdminCommandHandler
 			target.stopAllEffects();
 			activeChar.sendMessage("Removed all effects from " + target.getName() + " (" + objId + ")");
 			showBuffs(activeChar, target, 1, false);
-			if (Config.GMAUDIT)
+			if (general().gmAudit())
 			{
 				GMAudit.auditGMAction(activeChar.getName() + " [" + activeChar.getObjectId() + "]", "stopallbuffs", target.getName() + " (" + objId + ")", "");
 			}
diff --git a/src/main/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminCHSiege.java b/src/main/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminCHSiege.java
index bc94969f1b..9a546d3cdb 100644
--- a/src/main/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminCHSiege.java
+++ b/src/main/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminCHSiege.java
@@ -18,9 +18,10 @@
  */
 package com.l2jserver.datapack.handlers.admincommandhandlers;
 
+import static com.l2jserver.gameserver.config.Configuration.general;
+
 import java.util.Calendar;
 
-import com.l2jserver.gameserver.config.Config;
 import com.l2jserver.gameserver.data.sql.impl.ClanTable;
 import com.l2jserver.gameserver.handler.IAdminCommandHandler;
 import com.l2jserver.gameserver.instancemanager.ClanHallSiegeManager;
@@ -61,7 +62,7 @@ public final class AdminCHSiege implements IAdminCommandHandler
 	{
 		final String[] split = command.split(" ");
 		SiegableHall hall = null;
-		if (Config.NO_QUESTS)
+		if (general().noQuests())
 		{
 			activeChar.sendMessage("AltDevNoQuests = true; Clan Hall Sieges are disabled!");
 			return false;
diff --git a/src/main/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminChangeAccessLevel.java b/src/main/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminChangeAccessLevel.java
index a57fe9b117..d2cfae6056 100644
--- a/src/main/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminChangeAccessLevel.java
+++ b/src/main/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminChangeAccessLevel.java
@@ -18,12 +18,13 @@
  */
 package com.l2jserver.datapack.handlers.admincommandhandlers;
 
+import static com.l2jserver.gameserver.config.Configuration.general;
+
 import java.sql.Connection;
 import java.sql.PreparedStatement;
 import java.sql.SQLException;
 
 import com.l2jserver.commons.database.ConnectionFactory;
-import com.l2jserver.gameserver.config.Config;
 import com.l2jserver.gameserver.data.xml.impl.AdminData;
 import com.l2jserver.gameserver.handler.IAdminCommandHandler;
 import com.l2jserver.gameserver.model.L2AccessLevel;
@@ -94,7 +95,7 @@ public final class AdminChangeAccessLevel implements IAdminCommandHandler
 				catch (SQLException se)
 				{
 					activeChar.sendMessage("SQLException while changing character's access level");
-					if (Config.DEBUG)
+					if (general().debug())
 					{
 						se.printStackTrace();
 					}
diff --git a/src/main/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminEditChar.java b/src/main/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminEditChar.java
index e2d5dad64d..58d66ad4e7 100644
--- a/src/main/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminEditChar.java
+++ b/src/main/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminEditChar.java
@@ -18,6 +18,8 @@
  */
 package com.l2jserver.datapack.handlers.admincommandhandlers;
 
+import static com.l2jserver.gameserver.config.Configuration.general;
+
 import java.sql.Connection;
 import java.sql.PreparedStatement;
 import java.util.ArrayList;
@@ -30,7 +32,6 @@ import java.util.StringTokenizer;
 import java.util.logging.Logger;
 
 import com.l2jserver.commons.database.ConnectionFactory;
-import com.l2jserver.gameserver.config.Config;
 import com.l2jserver.gameserver.data.sql.impl.CharNameTable;
 import com.l2jserver.gameserver.data.xml.impl.ClassListData;
 import com.l2jserver.gameserver.data.xml.impl.TransformData;
@@ -189,7 +190,7 @@ public class AdminEditChar implements IAdminCommandHandler {
 				setTargetKarma(activeChar, karma);
 			}
 			catch (Exception e) {
-				if (Config.DEVELOPER) {
+				if (general().developer()) {
 					_log.warning("Set karma error: " + e);
 				}
 				activeChar.sendMessage("Usage: //setkarma <new_karma_value>");
@@ -213,9 +214,9 @@ public class AdminEditChar implements IAdminCommandHandler {
 					activeChar.sendPacket(SystemMessageId.INCORRECT_TARGET);
 				}
 			}
-			catch (Exception e) {
-				if (Config.DEVELOPER) {
-					_log.warning("Set pk error: " + e);
+			catch (Exception ex) {
+				if (general().developer()) {
+					_log.warning("Set pk error: " + ex);
 				}
 				activeChar.sendMessage("Usage: //setpk <pk_count>");
 			}
@@ -238,9 +239,9 @@ public class AdminEditChar implements IAdminCommandHandler {
 					activeChar.sendPacket(SystemMessageId.INCORRECT_TARGET);
 				}
 			}
-			catch (Exception e) {
-				if (Config.DEVELOPER) {
-					_log.warning("Set pvp error: " + e);
+			catch (Exception ex) {
+				if (general().developer()) {
+					_log.warning("Set pvp error: " + ex);
 				}
 				activeChar.sendMessage("Usage: //setpvp <pvp_count>");
 			}
@@ -263,9 +264,9 @@ public class AdminEditChar implements IAdminCommandHandler {
 					activeChar.sendPacket(SystemMessageId.INCORRECT_TARGET);
 				}
 			}
-			catch (Exception e) {
-				if (Config.DEVELOPER) {
-					_log.warning("Set Fame error: " + e);
+			catch (Exception ex) {
+				if (general().developer()) {
+					_log.warning("Set Fame error: " + ex);
 				}
 				activeChar.sendMessage("Usage: //setfame <new_fame_value>");
 			}
@@ -875,14 +876,14 @@ public class AdminEditChar implements IAdminCommandHandler {
 			player.sendPacket(sm);
 			// Admin information
 			activeChar.sendMessage("Successfully Changed karma for " + player.getName() + " from (" + oldKarma + ") to (" + newKarma + ").");
-			if (Config.DEBUG) {
+			if (general().debug()) {
 				_log.fine("[SET KARMA] [GM]" + activeChar.getName() + " Changed karma for " + player.getName() + " from (" + oldKarma + ") to (" + newKarma + ").");
 			}
 		}
 		else {
 			// tell admin of mistake
 			activeChar.sendMessage("You must enter a value for karma greater than or equal to 0.");
-			if (Config.DEBUG) {
+			if (general().debug()) {
 				_log.fine("[SET KARMA] ERROR: [GM]" + activeChar.getName() + " entered an incorrect value for new karma: " + newKarma + " for " + player.getName() + ".");
 			}
 		}
diff --git a/src/main/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminEffects.java b/src/main/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminEffects.java
index 0788c0f0f4..fc4960bf74 100644
--- a/src/main/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminEffects.java
+++ b/src/main/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminEffects.java
@@ -18,10 +18,11 @@
  */
 package com.l2jserver.datapack.handlers.admincommandhandlers;
 
+import static com.l2jserver.gameserver.config.Configuration.general;
+
 import java.util.Collection;
 import java.util.StringTokenizer;
 
-import com.l2jserver.gameserver.config.Config;
 import com.l2jserver.gameserver.datatables.SkillData;
 import com.l2jserver.gameserver.enums.Team;
 import com.l2jserver.gameserver.handler.IAdminCommandHandler;
@@ -532,7 +533,7 @@ public class AdminEffects implements IAdminCommandHandler
 			}
 			catch (Exception e)
 			{
-				if (Config.DEBUG)
+				if (general().debug())
 				{
 					e.printStackTrace();
 				}
diff --git a/src/main/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminEnchant.java b/src/main/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminEnchant.java
index abca5db8e2..3893258a59 100644
--- a/src/main/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminEnchant.java
+++ b/src/main/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminEnchant.java
@@ -18,9 +18,10 @@
  */
 package com.l2jserver.datapack.handlers.admincommandhandlers;
 
+import static com.l2jserver.gameserver.config.Configuration.general;
+
 import java.util.logging.Logger;
 
-import com.l2jserver.gameserver.config.Config;
 import com.l2jserver.gameserver.handler.IAdminCommandHandler;
 import com.l2jserver.gameserver.model.L2Object;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
@@ -150,7 +151,7 @@ public class AdminEnchant implements IAdminCommandHandler
 				}
 				catch (StringIndexOutOfBoundsException e)
 				{
-					if (Config.DEVELOPER)
+					if (general().developer())
 					{
 						_log.warning("Set enchant error: " + e);
 					}
@@ -158,7 +159,7 @@ public class AdminEnchant implements IAdminCommandHandler
 				}
 				catch (NumberFormatException e)
 				{
-					if (Config.DEVELOPER)
+					if (general().developer())
 					{
 						_log.warning("Set enchant error: " + e);
 					}
diff --git a/src/main/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminEventEngine.java b/src/main/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminEventEngine.java
index 989deb662b..909c6b08c1 100644
--- a/src/main/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminEventEngine.java
+++ b/src/main/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminEventEngine.java
@@ -18,6 +18,8 @@
  */
 package com.l2jserver.datapack.handlers.admincommandhandlers;
 
+import static com.l2jserver.gameserver.config.Configuration.server;
+
 import java.io.BufferedReader;
 import java.io.File;
 import java.io.FileInputStream;
@@ -27,7 +29,6 @@ import java.io.PrintStream;
 import java.util.StringTokenizer;
 
 import com.l2jserver.commons.util.Rnd;
-import com.l2jserver.gameserver.config.Config;
 import com.l2jserver.gameserver.data.xml.impl.AdminData;
 import com.l2jserver.gameserver.data.xml.impl.TransformData;
 import com.l2jserver.gameserver.enums.audio.Music;
@@ -103,7 +104,6 @@ public class AdminEventEngine implements IAdminCommandHandler
 					showMainPage(activeChar);
 				}
 			}
-			
 			else if (actualCommand.equals("admin_event_new"))
 			{
 				showNewEventPage(activeChar);
@@ -113,7 +113,6 @@ public class AdminEventEngine implements IAdminCommandHandler
 				// There is an exception here for not using the ST. We use spaces (ST delim) for the event info.
 				tempBuffer += command.substring(10);
 				showNewEventPage(activeChar);
-				
 			}
 			else if (actualCommand.startsWith("admin_event_see"))
 			{
@@ -123,7 +122,7 @@ public class AdminEventEngine implements IAdminCommandHandler
 				{
 					final NpcHtmlMessage adminReply = new NpcHtmlMessage();
 					
-					try (FileInputStream fis = new FileInputStream(Config.DATAPACK_ROOT + "/data/events/" + eventName);
+					try (FileInputStream fis = new FileInputStream(server().getDatapackRoot() + "/data/events/" + eventName);
 						InputStreamReader isr = new InputStreamReader(fis);
 						BufferedReader br = new BufferedReader(isr))
 					{
@@ -138,17 +137,14 @@ public class AdminEventEngine implements IAdminCommandHandler
 				}
 				catch (Exception e)
 				{
-					
 					e.printStackTrace();
-					
 				}
-				
 			}
 			else if (actualCommand.startsWith("admin_event_del"))
 			{
 				// There is an exception here for not using the ST. We use spaces (ST delim) for the event name.
 				String eventName = command.substring(16);
-				File file = new File(Config.DATAPACK_ROOT + "/data/events/" + eventName);
+				File file = new File(server().getDatapackRoot() + "/data/events/" + eventName);
 				file.delete();
 				showMainPage(activeChar);
 			}
@@ -167,7 +163,7 @@ public class AdminEventEngine implements IAdminCommandHandler
 			{
 				try
 				{
-					try (FileOutputStream file = new FileOutputStream(new File(Config.DATAPACK_ROOT, "data/events/" + tempName));
+					try (FileOutputStream file = new FileOutputStream(new File(server().getDatapackRoot(), "data/events/" + tempName));
 						PrintStream p = new PrintStream(file))
 					{
 						p.println(activeChar.getName());
@@ -442,7 +438,7 @@ public class AdminEventEngine implements IAdminCommandHandler
 	
 	private String showStoredEvents()
 	{
-		final File dir = new File(Config.DATAPACK_ROOT, "/data/events");
+		final File dir = new File(server().getDatapackRoot(), "/data/events");
 		if (dir.isFile())
 		{
 			return "<font color=\"FF0000\">The directory '" + dir.getAbsolutePath() + "' is a file or is corrupted!</font><br>";
diff --git a/src/main/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminExpSp.java b/src/main/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminExpSp.java
index 043035a9fb..7c24450ebe 100644
--- a/src/main/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminExpSp.java
+++ b/src/main/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminExpSp.java
@@ -18,10 +18,11 @@
  */
 package com.l2jserver.datapack.handlers.admincommandhandlers;
 
+import static com.l2jserver.gameserver.config.Configuration.general;
+
 import java.util.StringTokenizer;
 import java.util.logging.Logger;
 
-import com.l2jserver.gameserver.config.Config;
 import com.l2jserver.gameserver.data.xml.impl.ClassListData;
 import com.l2jserver.gameserver.handler.IAdminCommandHandler;
 import com.l2jserver.gameserver.model.L2Object;
@@ -153,7 +154,7 @@ public class AdminExpSp implements IAdminCommandHandler
 			player.broadcastUserInfo();
 			// Admin information
 			activeChar.sendMessage("Added " + expval + " xp and " + spval + " sp to " + player.getName() + ".");
-			if (Config.DEBUG)
+			if (general().debug())
 			{
 				_log.fine("GM: " + activeChar.getName() + "(" + activeChar.getObjectId() + ") added " + expval + " xp and " + spval + " sp to " + player.getObjectId() + ".");
 			}
@@ -201,7 +202,7 @@ public class AdminExpSp implements IAdminCommandHandler
 			player.broadcastUserInfo();
 			// Admin information
 			activeChar.sendMessage("Removed " + expval + " xp and " + spval + " sp from " + player.getName() + ".");
-			if (Config.DEBUG)
+			if (general().debug())
 			{
 				_log.fine("GM: " + activeChar.getName() + "(" + activeChar.getObjectId() + ") removed " + expval + " xp and " + spval + " sp from " + player.getObjectId() + ".");
 			}
diff --git a/src/main/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminHeal.java b/src/main/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminHeal.java
index 297f1395a2..bbe8bd882d 100644
--- a/src/main/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminHeal.java
+++ b/src/main/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminHeal.java
@@ -18,10 +18,11 @@
  */
 package com.l2jserver.datapack.handlers.admincommandhandlers;
 
+import static com.l2jserver.gameserver.config.Configuration.general;
+
 import java.util.Collection;
 import java.util.logging.Logger;
 
-import com.l2jserver.gameserver.config.Config;
 import com.l2jserver.gameserver.handler.IAdminCommandHandler;
 import com.l2jserver.gameserver.model.L2Object;
 import com.l2jserver.gameserver.model.L2World;
@@ -57,7 +58,7 @@ public class AdminHeal implements IAdminCommandHandler
 			}
 			catch (StringIndexOutOfBoundsException e)
 			{
-				if (Config.DEVELOPER)
+				if (general().developer())
 				{
 					_log.warning("Heal error: " + e);
 				}
@@ -129,7 +130,7 @@ public class AdminHeal implements IAdminCommandHandler
 			{
 				target.setCurrentCp(target.getMaxCp());
 			}
-			if (Config.DEBUG)
+			if (general().debug())
 			{
 				_log.fine("GM: " + activeChar.getName() + "(" + activeChar.getObjectId() + ") healed character " + target.getName());
 			}
diff --git a/src/main/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminHtml.java b/src/main/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminHtml.java
index 4ca27fa6e3..78239f839c 100644
--- a/src/main/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminHtml.java
+++ b/src/main/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminHtml.java
@@ -18,11 +18,12 @@
  */
 package com.l2jserver.datapack.handlers.admincommandhandlers;
 
+import static com.l2jserver.gameserver.config.Configuration.server;
+
 import java.io.File;
 import java.util.StringTokenizer;
 
 import com.l2jserver.gameserver.cache.HtmCache;
-import com.l2jserver.gameserver.config.Config;
 import com.l2jserver.gameserver.handler.IAdminCommandHandler;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.network.serverpackets.NpcHtmlMessage;
@@ -86,7 +87,7 @@ public class AdminHtml implements IAdminCommandHandler
 	/**
 	 * Shows a html message to activeChar.
 	 * @param activeChar activeChar where html message is shown.
-	 * @param path relative path from Config.DATAPACK_ROOT to html.
+	 * @param path relative path from Configuration.getInstance().server().getDatapackRoot() to html.
 	 * @param reload {@code true} will reload html and show it {@code false} will show it from cache.
 	 */
 	public static void showHtml(L2PcInstance activeChar, String path, boolean reload)
@@ -98,7 +99,7 @@ public class AdminHtml implements IAdminCommandHandler
 		}
 		else
 		{
-			File file = new File(Config.DATAPACK_ROOT, path);
+			File file = new File(server().getDatapackRoot(), path);
 			content = HtmCache.getInstance().loadFile(file);
 		}
 		final NpcHtmlMessage html = new NpcHtmlMessage();
diff --git a/src/main/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminInvul.java b/src/main/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminInvul.java
index 3a47707c67..3e03a0265d 100644
--- a/src/main/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminInvul.java
+++ b/src/main/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminInvul.java
@@ -18,9 +18,10 @@
  */
 package com.l2jserver.datapack.handlers.admincommandhandlers;
 
+import static com.l2jserver.gameserver.config.Configuration.general;
+
 import java.util.logging.Logger;
 
-import com.l2jserver.gameserver.config.Config;
 import com.l2jserver.gameserver.handler.IAdminCommandHandler;
 import com.l2jserver.gameserver.model.L2Object;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
@@ -71,7 +72,7 @@ public class AdminInvul implements IAdminCommandHandler
 		{
 			activeChar.setIsInvul(false);
 			text = activeChar.getName() + " is now mortal";
-			if (Config.DEBUG)
+			if (general().debug())
 			{
 				_log.fine("GM: Gm removed invul mode from character " + activeChar.getName() + "(" + activeChar.getObjectId() + ")");
 			}
@@ -80,7 +81,7 @@ public class AdminInvul implements IAdminCommandHandler
 		{
 			activeChar.setIsInvul(true);
 			text = activeChar.getName() + " is now invulnerable";
-			if (Config.DEBUG)
+			if (general().debug())
 			{
 				_log.fine("GM: Gm activated invul mode for character " + activeChar.getName() + "(" + activeChar.getObjectId() + ")");
 			}
diff --git a/src/main/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminKill.java b/src/main/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminKill.java
index 6530d1a063..f5863589b3 100644
--- a/src/main/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminKill.java
+++ b/src/main/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminKill.java
@@ -18,10 +18,12 @@
  */
 package com.l2jserver.datapack.handlers.admincommandhandlers;
 
+import static com.l2jserver.gameserver.config.Configuration.customs;
+import static com.l2jserver.gameserver.config.Configuration.general;
+
 import java.util.StringTokenizer;
 import java.util.logging.Logger;
 
-import com.l2jserver.gameserver.config.Config;
 import com.l2jserver.gameserver.handler.IAdminCommandHandler;
 import com.l2jserver.gameserver.model.L2Object;
 import com.l2jserver.gameserver.model.L2World;
@@ -135,9 +137,9 @@ public class AdminKill implements IAdminCommandHandler
 			}
 			target.reduceCurrentHp(target.getMaxHp() + target.getMaxCp() + 1, activeChar, null);
 		}
-		else if (Config.L2JMOD_CHAMPION_ENABLE && target.isChampion())
+		else if (customs().championEnable() && target.isChampion())
 		{
-			target.reduceCurrentHp((target.getMaxHp() * Config.L2JMOD_CHAMPION_HP) + 1, activeChar, null);
+			target.reduceCurrentHp((target.getMaxHp() * customs().getChampionHp()) + 1, activeChar, null);
 		}
 		else
 		{
@@ -155,7 +157,7 @@ public class AdminKill implements IAdminCommandHandler
 				target.setIsInvul(true);
 			}
 		}
-		if (Config.DEBUG)
+		if (general().debug())
 		{
 			_log.fine("GM: " + activeChar.getName() + "(" + activeChar.getObjectId() + ")" + " killed character " + target.getObjectId());
 		}
diff --git a/src/main/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminLogin.java b/src/main/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminLogin.java
index 1cc4dc8959..9fc60219db 100644
--- a/src/main/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminLogin.java
+++ b/src/main/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminLogin.java
@@ -18,10 +18,12 @@
  */
 package com.l2jserver.datapack.handlers.admincommandhandlers;
 
+import static com.l2jserver.gameserver.config.Configuration.general;
+
 import java.util.StringTokenizer;
 
 import com.l2jserver.gameserver.LoginServerThread;
-import com.l2jserver.gameserver.config.Config;
+import com.l2jserver.gameserver.config.converter.ServerListTypeConverter;
 import com.l2jserver.gameserver.handler.IAdminCommandHandler;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.network.gameserverpackets.ServerStatus;
@@ -101,11 +103,12 @@ public class AdminLogin implements IAdminCommandHandler
 				}
 				catch (NumberFormatException e)
 				{
-					newType = Config.getServerTypeId(modes);
+					newType = ServerListTypeConverter.getServerTypeId(modes);
 				}
-				if (Config.SERVER_LIST_TYPE != newType)
+				
+				if (general().getServerListType() != newType)
 				{
-					Config.SERVER_LIST_TYPE = newType;
+					general().setProperty("ServerListType", String.valueOf(newType));
 					LoginServerThread.getInstance().sendServerType();
 					activeChar.sendMessage("Server Type changed to " + getServerTypeName(newType));
 					showMainPage(activeChar);
@@ -132,9 +135,9 @@ public class AdminLogin implements IAdminCommandHandler
 				try
 				{
 					age = Integer.parseInt(mode);
-					if (Config.SERVER_LIST_AGE != age)
+					if (general().getServerListAge() != age)
 					{
-						Config.SERVER_LIST_TYPE = age;
+						general().setProperty("ServerListAge", String.valueOf(age));
 						LoginServerThread.getInstance().sendServerStatus(ServerStatus.SERVER_AGE, age);
 						activeChar.sendMessage("Server Age changed to " + age);
 						showMainPage(activeChar);
@@ -162,17 +165,14 @@ public class AdminLogin implements IAdminCommandHandler
 		return true;
 	}
 	
-	/**
-	 * @param activeChar
-	 */
 	private void showMainPage(L2PcInstance activeChar)
 	{
 		final NpcHtmlMessage html = new NpcHtmlMessage();
 		html.setFile(activeChar.getHtmlPrefix(), "data/html/admin/login.htm");
 		html.replace("%server_name%", LoginServerThread.getInstance().getServerName());
 		html.replace("%status%", LoginServerThread.getInstance().getStatusString());
-		html.replace("%clock%", getServerTypeName(Config.SERVER_LIST_TYPE));
-		html.replace("%brackets%", String.valueOf(Config.SERVER_LIST_BRACKET));
+		html.replace("%clock%", getServerTypeName(general().getServerListType()));
+		html.replace("%brackets%", String.valueOf(general().getServerListBrackets()));
 		html.replace("%max_players%", String.valueOf(LoginServerThread.getInstance().getMaxPlayer()));
 		activeChar.sendPacket(html);
 	}
@@ -220,22 +220,16 @@ public class AdminLogin implements IAdminCommandHandler
 		return nameType;
 	}
 	
-	/**
-	 *
-	 */
 	private void allowToAll()
 	{
 		LoginServerThread.getInstance().setServerStatus(ServerStatus.STATUS_AUTO);
-		Config.SERVER_GMONLY = false;
+		general().setProperty("ServerGMOnly", "false");
 	}
 	
-	/**
-	 *
-	 */
 	private void gmOnly()
 	{
 		LoginServerThread.getInstance().setServerStatus(ServerStatus.STATUS_GM_ONLY);
-		Config.SERVER_GMONLY = true;
+		general().setProperty("ServerGMOnly", "true");
 	}
 	
 	@Override
diff --git a/src/main/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminMenu.java b/src/main/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminMenu.java
index 6b3fdb02ca..746d0d8583 100644
--- a/src/main/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminMenu.java
+++ b/src/main/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminMenu.java
@@ -18,11 +18,12 @@
  */
 package com.l2jserver.datapack.handlers.admincommandhandlers;
 
+import static com.l2jserver.gameserver.config.Configuration.customs;
+
 import java.util.StringTokenizer;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
-import com.l2jserver.gameserver.config.Config;
 import com.l2jserver.gameserver.data.xml.impl.AdminData;
 import com.l2jserver.gameserver.handler.AdminCommandHandler;
 import com.l2jserver.gameserver.handler.IAdminCommandHandler;
@@ -253,9 +254,9 @@ public class AdminMenu implements IAdminCommandHandler
 				target.reduceCurrentHp(target.getMaxHp() + target.getMaxCp() + 1, activeChar, null);
 				filename = "charmanage.htm";
 			}
-			else if (Config.L2JMOD_CHAMPION_ENABLE && target.isChampion())
+			else if (customs().championEnable() && target.isChampion())
 			{
-				target.reduceCurrentHp((target.getMaxHp() * Config.L2JMOD_CHAMPION_HP) + 1, activeChar, null);
+				target.reduceCurrentHp((target.getMaxHp() * customs().getChampionHp()) + 1, activeChar, null);
 			}
 			else
 			{
diff --git a/src/main/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminPathNode.java b/src/main/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminPathNode.java
index 74ee304ac2..34bb938ca6 100644
--- a/src/main/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminPathNode.java
+++ b/src/main/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminPathNode.java
@@ -18,9 +18,10 @@
  */
 package com.l2jserver.datapack.handlers.admincommandhandlers;
 
+import static com.l2jserver.gameserver.config.Configuration.geodata;
+
 import java.util.List;
 
-import com.l2jserver.gameserver.config.Config;
 import com.l2jserver.gameserver.handler.IAdminCommandHandler;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.pathfinding.AbstractNodeLoc;
@@ -69,8 +70,7 @@ public class AdminPathNode implements IAdminCommandHandler
 		}
 		else if (command.equals("admin_find_path"))
 		{
-			if (Config.PATHFINDING == 0)
-			{
+			if (geodata().getPathFinding() == 0) {
 				activeChar.sendMessage("PathFinding is disabled.");
 				return true;
 			}
diff --git a/src/main/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminPunishment.java b/src/main/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminPunishment.java
index 989126101b..b1d49f4f98 100644
--- a/src/main/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminPunishment.java
+++ b/src/main/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminPunishment.java
@@ -18,6 +18,8 @@
  */
 package com.l2jserver.datapack.handlers.admincommandhandlers;
 
+import static com.l2jserver.gameserver.config.Configuration.ip;
+
 import java.net.InetAddress;
 import java.net.UnknownHostException;
 import java.text.SimpleDateFormat;
@@ -27,7 +29,6 @@ import java.util.logging.Level;
 import java.util.logging.Logger;
 
 import com.l2jserver.gameserver.cache.HtmCache;
-import com.l2jserver.gameserver.config.Config;
 import com.l2jserver.gameserver.data.sql.impl.CharNameTable;
 import com.l2jserver.gameserver.handler.IAdminCommandHandler;
 import com.l2jserver.gameserver.instancemanager.PunishmentManager;
@@ -262,7 +263,7 @@ public class AdminPunishment implements IAdminCommandHandler
 						{
 							throw new UnknownHostException("You cannot ban any local address!");
 						}
-						else if (Config.GAME_SERVER_HOSTS.contains(addr.getHostAddress()))
+						else if (ip().getHosts().contains(addr.getHostAddress()))
 						{
 							throw new UnknownHostException("You cannot ban your gameserver's address!");
 						}
diff --git a/src/main/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminQuest.java b/src/main/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminQuest.java
index 29fc44955f..3df800d011 100644
--- a/src/main/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminQuest.java
+++ b/src/main/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminQuest.java
@@ -18,6 +18,8 @@
  */
 package com.l2jserver.datapack.handlers.admincommandhandlers;
 
+import static com.l2jserver.gameserver.config.Configuration.server;
+
 import java.io.File;
 import java.util.List;
 import java.util.Set;
@@ -28,7 +30,6 @@ import javax.script.ScriptException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.l2jserver.gameserver.config.Config;
 import com.l2jserver.gameserver.handler.IAdminCommandHandler;
 import com.l2jserver.gameserver.instancemanager.QuestManager;
 import com.l2jserver.gameserver.model.actor.L2Character;
@@ -123,14 +124,14 @@ public class AdminQuest implements IAdminCommandHandler
 			}
 			else
 			{
-				File file = new File(Config.SCRIPT_ROOT, "com/l2jserver/datapack/" + parts[1]);
+				File file = new File(server().getScriptRoot(), "com/l2jserver/datapack/" + parts[1]);
 				// Trying to reload by script name.
 				if (!file.exists())
 				{
 					Quest quest = QuestManager.getInstance().getQuest(parts[1]);
 					if (quest != null)
 					{
-						file = new File(Config.SCRIPT_ROOT, "com/l2jserver/datapack/" + quest.getClass().getName().replaceAll("\\.", "/") + ".java");
+						file = new File(server().getScriptRoot(), "com/l2jserver/datapack/" + quest.getClass().getName().replaceAll("\\.", "/") + ".java");
 					}
 				}
 				
diff --git a/src/main/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminReload.java b/src/main/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminReload.java
index 3d94b8b201..9d09a22fcd 100644
--- a/src/main/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminReload.java
+++ b/src/main/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminReload.java
@@ -18,11 +18,15 @@
  */
 package com.l2jserver.datapack.handlers.admincommandhandlers;
 
+import static com.l2jserver.gameserver.config.Configuration.server;
+
 import java.io.File;
 import java.util.StringTokenizer;
 
+import org.aeonbits.owner.Reloadable;
+
 import com.l2jserver.gameserver.cache.HtmCache;
-import com.l2jserver.gameserver.config.Config;
+import com.l2jserver.gameserver.config.Configuration;
 import com.l2jserver.gameserver.data.sql.impl.CrestTable;
 import com.l2jserver.gameserver.data.sql.impl.TeleportLocationTable;
 import com.l2jserver.gameserver.data.xml.impl.AdminData;
@@ -74,10 +78,34 @@ public class AdminReload implements IAdminCommandHandler
 			final String type = st.nextToken();
 			switch (type.toLowerCase())
 			{
-				case "config":
-				{
-					Config.load();
-					AdminData.getInstance().broadcastMessageToGMs(activeChar.getName() + ": Reloaded Configs.");
+				case "config": {
+					if (st.hasMoreElements()) {
+						final var configName = st.nextToken();
+						try {
+							final var field = Configuration.class.getDeclaredField(configName);
+							if (Reloadable.class.isAssignableFrom(field.getType())) {
+								field.setAccessible(true);
+								((Reloadable) field.get(null)).reload();
+								AdminData.getInstance().broadcastMessageToGMs(activeChar.getName() + ": Reloaded " + configName + " configuration.");
+							} else {
+								activeChar.sendMessage(configName + " configuration cannot be reloaded.");
+							}
+						} catch (Exception ex) {
+							activeChar.sendMessage("Failed to reload configuration " + configName + ".");
+						}
+					} else {
+						for (var field : Configuration.class.getDeclaredFields()) {
+							if (Reloadable.class.isAssignableFrom(field.getType())) {
+								try {
+									field.setAccessible(true);
+									((Reloadable) field.get(null)).reload();
+								} catch (Exception ex) {
+									activeChar.sendMessage("Failed to reload configuration " + field.getName() + ".");
+								}
+							}
+						}
+						AdminData.getInstance().broadcastMessageToGMs(activeChar.getName() + ": Reloaded all configurations.");
+					}
 					break;
 				}
 				case "access":
@@ -130,7 +158,7 @@ public class AdminReload implements IAdminCommandHandler
 					if (st.hasMoreElements())
 					{
 						final String path = st.nextToken();
-						final File file = new File(Config.DATAPACK_ROOT, "data/html/" + path);
+						final File file = new File(server().getDatapackRoot(), "data/html/" + path);
 						if (file.exists())
 						{
 							HtmCache.getInstance().reload(file);
@@ -205,14 +233,14 @@ public class AdminReload implements IAdminCommandHandler
 				}
 				case "effect":
 				{
-					final File file = new File(Config.SCRIPT_ROOT, "com/l2jserver/datapack/handlers/EffectMasterHandler.java");
+					final File file = new File(server().getScriptRoot(), "com/l2jserver/datapack/handlers/EffectMasterHandler.java");
 					ScriptEngineManager.getInstance().compileScript(file);
 					AdminData.getInstance().broadcastMessageToGMs(activeChar.getName() + ": Reloaded Effects.");
 					break;
 				}
 				case "handler":
 				{
-					final File file = new File(Config.SCRIPT_ROOT, "com/l2jserver/datapack/handlers/MasterHandler.java");
+					final File file = new File(server().getScriptRoot(), "com/l2jserver/datapack/handlers/MasterHandler.java");
 					ScriptEngineManager.getInstance().compileScript(file);
 					AdminData.getInstance().broadcastMessageToGMs(activeChar.getName() + ": Reloaded Handlers.");
 					break;
diff --git a/src/main/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminRes.java b/src/main/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminRes.java
index 0ffc3e6b30..07526f9e6e 100644
--- a/src/main/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminRes.java
+++ b/src/main/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminRes.java
@@ -18,9 +18,10 @@
  */
 package com.l2jserver.datapack.handlers.admincommandhandlers;
 
+import static com.l2jserver.gameserver.config.Configuration.general;
+
 import java.util.logging.Logger;
 
-import com.l2jserver.gameserver.config.Config;
 import com.l2jserver.gameserver.handler.IAdminCommandHandler;
 import com.l2jserver.gameserver.model.L2Object;
 import com.l2jserver.gameserver.model.L2World;
@@ -126,7 +127,7 @@ public class AdminRes implements IAdminCommandHandler
 		
 		doResurrect((L2Character) obj);
 		
-		if (Config.DEBUG)
+		if (general().debug())
 		{
 			_log.fine("GM: " + activeChar.getName() + "(" + activeChar.getObjectId() + ") resurrected character " + obj.getObjectId());
 		}
diff --git a/src/main/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminSkill.java b/src/main/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminSkill.java
index abd0696a88..1446531e99 100644
--- a/src/main/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminSkill.java
+++ b/src/main/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminSkill.java
@@ -18,12 +18,13 @@
  */
 package com.l2jserver.datapack.handlers.admincommandhandlers;
 
+import static com.l2jserver.gameserver.config.Configuration.general;
+
 import java.util.Map;
 import java.util.StringTokenizer;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
-import com.l2jserver.gameserver.config.Config;
 import com.l2jserver.gameserver.data.xml.impl.ClassListData;
 import com.l2jserver.gameserver.data.xml.impl.SkillTreesData;
 import com.l2jserver.gameserver.datatables.SkillData;
@@ -474,7 +475,7 @@ public class AdminSkill implements IAdminCommandHandler
 				player.sendSkillList();
 				// Admin info.
 				activeChar.sendMessage("You gave the skill " + name + " to " + player.getName() + ".");
-				if (Config.DEBUG)
+				if (general().debug())
 				{
 					_log.fine("[GM]" + activeChar.getName() + " gave skill " + name + " to " + player.getName() + ".");
 				}
@@ -509,7 +510,7 @@ public class AdminSkill implements IAdminCommandHandler
 			player.removeSkill(skill);
 			// Admin information
 			activeChar.sendMessage("You removed the skill " + skillname + " from " + player.getName() + ".");
-			if (Config.DEBUG)
+			if (general().debug())
 			{
 				_log.fine("[GM]" + activeChar.getName() + " removed skill " + skillname + " from " + player.getName() + ".");
 			}
diff --git a/src/main/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminSpawn.java b/src/main/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminSpawn.java
index 2fef5e50e8..f76e08e7a6 100644
--- a/src/main/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminSpawn.java
+++ b/src/main/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminSpawn.java
@@ -18,6 +18,8 @@
  */
 package com.l2jserver.datapack.handlers.admincommandhandlers;
 
+import static com.l2jserver.gameserver.config.Configuration.general;
+
 import java.util.List;
 import java.util.NoSuchElementException;
 import java.util.StringTokenizer;
@@ -26,7 +28,6 @@ import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
 import com.l2jserver.gameserver.SevenSigns;
-import com.l2jserver.gameserver.config.Config;
 import com.l2jserver.gameserver.data.xml.impl.AdminData;
 import com.l2jserver.gameserver.data.xml.impl.NpcData;
 import com.l2jserver.gameserver.datatables.SpawnTable;
@@ -413,7 +414,7 @@ public class AdminSpawn implements IAdminCommandHandler
 		try
 		{
 			final L2Spawn spawn = new L2Spawn(template);
-			if (Config.SAVE_GMSPAWN_ON_CUSTOM)
+			if (general().saveGmSpawnOnCustom())
 			{
 				spawn.setCustom(true);
 			}
diff --git a/src/main/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminTeleport.java b/src/main/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminTeleport.java
index ca1bc2f7f9..c929da5069 100644
--- a/src/main/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminTeleport.java
+++ b/src/main/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminTeleport.java
@@ -18,6 +18,8 @@
  */
 package com.l2jserver.datapack.handlers.admincommandhandlers;
 
+import static com.l2jserver.gameserver.config.Configuration.general;
+
 import java.sql.Connection;
 import java.sql.PreparedStatement;
 import java.sql.SQLException;
@@ -27,7 +29,6 @@ import java.util.logging.Logger;
 
 import com.l2jserver.commons.database.ConnectionFactory;
 import com.l2jserver.gameserver.ai.CtrlIntention;
-import com.l2jserver.gameserver.config.Config;
 import com.l2jserver.gameserver.datatables.SpawnTable;
 import com.l2jserver.gameserver.handler.IAdminCommandHandler;
 import com.l2jserver.gameserver.instancemanager.MapRegionManager;
@@ -131,7 +132,7 @@ public class AdminTeleport implements IAdminCommandHandler
 			}
 			catch (Exception e)
 			{
-				if (Config.DEBUG)
+				if (general().debug())
 				{
 					_log.info("admin_walk: " + e);
 				}
@@ -540,7 +541,7 @@ public class AdminTeleport implements IAdminCommandHandler
 			try
 			{
 				spawn = new L2Spawn(target.getTemplate().getId());
-				if (Config.SAVE_GMSPAWN_ON_CUSTOM)
+				if (general().saveGmSpawnOnCustom())
 				{
 					spawn.setCustom(true);
 				}
@@ -563,7 +564,7 @@ public class AdminTeleport implements IAdminCommandHandler
 				
 				activeChar.sendMessage("Created " + target.getTemplate().getName() + " on " + target.getObjectId() + ".");
 				
-				if (Config.DEBUG)
+				if (general().debug())
 				{
 					_log.fine("Spawn at X=" + spawn.getX() + " Y=" + spawn.getY() + " Z=" + spawn.getZ());
 					_log.warning("GM: " + activeChar.getName() + "(" + activeChar.getObjectId() + ") moved NPC " + target.getObjectId());
@@ -591,7 +592,7 @@ public class AdminTeleport implements IAdminCommandHandler
 			try
 			{
 				final L2Spawn spawnDat = new L2Spawn(target.getId());
-				if (Config.SAVE_GMSPAWN_ON_CUSTOM)
+				if (general().saveGmSpawnOnCustom())
 				{
 					spawn.setCustom(true);
 				}
@@ -615,5 +616,4 @@ public class AdminTeleport implements IAdminCommandHandler
 			activeChar.sendPacket(SystemMessageId.INCORRECT_TARGET);
 		}
 	}
-	
 }
diff --git a/src/main/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminTerritoryWar.java b/src/main/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminTerritoryWar.java
index 6c837ce933..229cb41da9 100644
--- a/src/main/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminTerritoryWar.java
+++ b/src/main/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminTerritoryWar.java
@@ -18,6 +18,9 @@
  */
 package com.l2jserver.datapack.handlers.admincommandhandlers;
 
+import static com.l2jserver.gameserver.config.Configuration.territoryWar;
+import static java.util.concurrent.TimeUnit.MINUTES;
+
 import java.util.Calendar;
 import java.util.List;
 import java.util.StringTokenizer;
@@ -121,7 +124,7 @@ public class AdminTerritoryWar implements IAdminCommandHandler
 		}
 		else if (command.equalsIgnoreCase("admin_territory_war_end"))
 		{
-			TerritoryWarManager.getInstance().setTWStartTimeInMillis(System.currentTimeMillis() - TerritoryWarManager.WARLENGTH);
+			TerritoryWarManager.getInstance().setTWStartTimeInMillis(System.currentTimeMillis() - MINUTES.toMillis(territoryWar().getWarLength()));
 		}
 		else if (command.equalsIgnoreCase("admin_territory_wards_list"))
 		{
diff --git a/src/main/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminTest.java b/src/main/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminTest.java
index 0506bea428..c5e959c425 100644
--- a/src/main/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminTest.java
+++ b/src/main/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminTest.java
@@ -18,11 +18,12 @@
  */
 package com.l2jserver.datapack.handlers.admincommandhandlers;
 
+import static com.l2jserver.gameserver.config.Configuration.general;
+
 import java.util.NoSuchElementException;
 import java.util.StringTokenizer;
 
 import com.l2jserver.gameserver.ThreadPoolManager;
-import com.l2jserver.gameserver.config.Config;
 import com.l2jserver.gameserver.datatables.SkillData;
 import com.l2jserver.gameserver.handler.IAdminCommandHandler;
 import com.l2jserver.gameserver.model.L2Object;
@@ -80,20 +81,15 @@ public class AdminTest implements IAdminCommandHandler
 		}
 		else if (command.equals("admin_known on"))
 		{
-			Config.CHECK_KNOWN = true;
+			general().setProperty("CheckKnownList", "true");
 		}
 		else if (command.equals("admin_known off"))
 		{
-			Config.CHECK_KNOWN = false;
+			general().setProperty("CheckKnownList", "false");
 		}
 		return true;
 	}
 	
-	/**
-	 * @param activeChar
-	 * @param id
-	 * @param msu
-	 */
 	private void adminTestSkill(L2PcInstance activeChar, int id, boolean msu)
 	{
 		L2Character caster;
diff --git a/src/main/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminTvTEvent.java b/src/main/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminTvTEvent.java
index 939991eaf6..e967e31342 100644
--- a/src/main/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminTvTEvent.java
+++ b/src/main/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminTvTEvent.java
@@ -18,7 +18,8 @@
  */
 package com.l2jserver.datapack.handlers.admincommandhandlers;
 
-import com.l2jserver.gameserver.config.Config;
+import static com.l2jserver.gameserver.config.Configuration.tvt;
+
 import com.l2jserver.gameserver.handler.IAdminCommandHandler;
 import com.l2jserver.gameserver.model.L2Object;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
@@ -107,6 +108,6 @@ public class AdminTvTEvent implements IAdminCommandHandler
 			return;
 		}
 		
-		new TvTEventTeleporter(playerInstance, Config.TVT_EVENT_PARTICIPATION_NPC_COORDINATES, true, true);
+		new TvTEventTeleporter(playerInstance, tvt().getParticipationNpcLoc(), true, true);
 	}
 }
diff --git a/src/main/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminVitality.java b/src/main/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminVitality.java
index 4fa0805673..9650d85ca3 100644
--- a/src/main/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminVitality.java
+++ b/src/main/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminVitality.java
@@ -18,9 +18,10 @@
  */
 package com.l2jserver.datapack.handlers.admincommandhandlers;
 
+import static com.l2jserver.gameserver.config.Configuration.vitality;
+
 import java.util.StringTokenizer;
 
-import com.l2jserver.gameserver.config.Config;
 import com.l2jserver.gameserver.handler.IAdminCommandHandler;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.actor.stat.PcStat;
@@ -48,7 +49,7 @@ public class AdminVitality implements IAdminCommandHandler
 			return false;
 		}
 		
-		if (!Config.ENABLE_VITALITY)
+		if (!vitality().enabled())
 		{
 			activeChar.sendMessage("Vitality is not enabled on the server!");
 			return false;
diff --git a/src/main/java/com/l2jserver/datapack/handlers/bypasshandlers/ClanWarehouse.java b/src/main/java/com/l2jserver/datapack/handlers/bypasshandlers/ClanWarehouse.java
index a97d3cd858..793cfcdb78 100644
--- a/src/main/java/com/l2jserver/datapack/handlers/bypasshandlers/ClanWarehouse.java
+++ b/src/main/java/com/l2jserver/datapack/handlers/bypasshandlers/ClanWarehouse.java
@@ -18,9 +18,11 @@
  */
 package com.l2jserver.datapack.handlers.bypasshandlers;
 
+import static com.l2jserver.gameserver.config.Configuration.customs;
+import static com.l2jserver.gameserver.config.Configuration.general;
+
 import java.util.logging.Level;
 
-import com.l2jserver.gameserver.config.Config;
 import com.l2jserver.gameserver.handler.IBypassHandler;
 import com.l2jserver.gameserver.model.ClanPrivilege;
 import com.l2jserver.gameserver.model.actor.L2Character;
@@ -75,7 +77,7 @@ public class ClanWarehouse implements IBypassHandler
 		{
 			if (command.toLowerCase().startsWith(COMMANDS[0])) // WithdrawC
 			{
-				if (Config.L2JMOD_ENABLE_WAREHOUSESORTING_CLAN)
+				if (customs().enableWarehouseSortingClan())
 				{
 					final NpcHtmlMessage msg = new NpcHtmlMessage(((L2Npc) target).getObjectId());
 					msg.setFile(activeChar.getHtmlPrefix(), "data/html/mods/WhSortedC.htm");
@@ -112,7 +114,7 @@ public class ClanWarehouse implements IBypassHandler
 				activeChar.setActiveWarehouse(activeChar.getClan().getWarehouse());
 				activeChar.setInventoryBlockingStatus(true);
 				
-				if (Config.DEBUG)
+				if (general().debug())
 				{
 					_log.fine("Source: L2WarehouseInstance.java; Player: " + activeChar.getName() + "; Command: showDepositWindowClan; Message: Showing items to deposit.");
 				}
@@ -164,7 +166,7 @@ public class ClanWarehouse implements IBypassHandler
 			player.sendPacket(new WareHouseWithdrawalList(player, WareHouseWithdrawalList.CLAN));
 		}
 		
-		if (Config.DEBUG)
+		if (general().debug())
 		{
 			_log.fine("Source: L2WarehouseInstance.java; Player: " + player.getName() + "; Command: showRetrieveWindowClan; Message: Showing stored items.");
 		}
diff --git a/src/main/java/com/l2jserver/datapack/handlers/bypasshandlers/Festival.java b/src/main/java/com/l2jserver/datapack/handlers/bypasshandlers/Festival.java
index f6ac5bb750..7e6e0a6c38 100644
--- a/src/main/java/com/l2jserver/datapack/handlers/bypasshandlers/Festival.java
+++ b/src/main/java/com/l2jserver/datapack/handlers/bypasshandlers/Festival.java
@@ -18,13 +18,14 @@
  */
 package com.l2jserver.datapack.handlers.bypasshandlers;
 
+import static com.l2jserver.gameserver.config.Configuration.sevenSings;
+
 import java.util.Calendar;
 import java.util.List;
 import java.util.logging.Level;
 
 import com.l2jserver.gameserver.SevenSigns;
 import com.l2jserver.gameserver.SevenSignsFestival;
-import com.l2jserver.gameserver.config.Config;
 import com.l2jserver.gameserver.handler.IBypassHandler;
 import com.l2jserver.gameserver.model.L2Party;
 import com.l2jserver.gameserver.model.L2Party.messageType;
@@ -101,7 +102,7 @@ public class Festival implements IBypassHandler
 					}
 					
 					// Check to see if the party has at least 5 members.
-					if (party.getMemberCount() < Config.ALT_FESTIVAL_MIN_PLAYER)
+					if (party.getMemberCount() < sevenSings().getFestivalMinPlayer())
 					{
 						npc.showChatWindow(activeChar, 2, "b", false);
 						return true;
@@ -311,7 +312,7 @@ public class Festival implements IBypassHandler
 					}
 					else
 					{
-						if (party.getMemberCount() > Config.ALT_FESTIVAL_MIN_PLAYER)
+						if (party.getMemberCount() > sevenSings().getFestivalMinPlayer())
 						{
 							party.removePartyMember(activeChar, messageType.Expelled);
 						}
diff --git a/src/main/java/com/l2jserver/datapack/handlers/bypasshandlers/ItemAuctionLink.java b/src/main/java/com/l2jserver/datapack/handlers/bypasshandlers/ItemAuctionLink.java
index 96cba167fa..882515a024 100644
--- a/src/main/java/com/l2jserver/datapack/handlers/bypasshandlers/ItemAuctionLink.java
+++ b/src/main/java/com/l2jserver/datapack/handlers/bypasshandlers/ItemAuctionLink.java
@@ -18,12 +18,13 @@
  */
 package com.l2jserver.datapack.handlers.bypasshandlers;
 
+import static com.l2jserver.gameserver.config.Configuration.general;
+
 import java.text.SimpleDateFormat;
 import java.util.Date;
 import java.util.StringTokenizer;
 import java.util.logging.Level;
 
-import com.l2jserver.gameserver.config.Config;
 import com.l2jserver.gameserver.handler.IBypassHandler;
 import com.l2jserver.gameserver.instancemanager.ItemAuctionManager;
 import com.l2jserver.gameserver.model.actor.L2Character;
@@ -50,7 +51,7 @@ public class ItemAuctionLink implements IBypassHandler
 			return false;
 		}
 		
-		if (!Config.ALT_ITEM_AUCTION_ENABLED)
+		if (!general().itemAuctionEnabled())
 		{
 			activeChar.sendPacket(SystemMessageId.NO_AUCTION_PERIOD);
 			return true;
diff --git a/src/main/java/com/l2jserver/datapack/handlers/bypasshandlers/Loto.java b/src/main/java/com/l2jserver/datapack/handlers/bypasshandlers/Loto.java
index 7a0e30cd2b..337be811a3 100644
--- a/src/main/java/com/l2jserver/datapack/handlers/bypasshandlers/Loto.java
+++ b/src/main/java/com/l2jserver/datapack/handlers/bypasshandlers/Loto.java
@@ -18,9 +18,10 @@
  */
 package com.l2jserver.datapack.handlers.bypasshandlers;
 
+import static com.l2jserver.gameserver.config.Configuration.general;
+
 import java.text.DateFormat;
 
-import com.l2jserver.gameserver.config.Config;
 import com.l2jserver.gameserver.handler.IBypassHandler;
 import com.l2jserver.gameserver.idfactory.IdFactory;
 import com.l2jserver.gameserver.instancemanager.games.Lottery;
@@ -191,7 +192,7 @@ public class Loto implements IBypassHandler
 				return;
 			}
 			
-			long price = Config.ALT_LOTTERY_TICKET_PRICE;
+			long price = general().getLotteryTicketPrice();
 			int lotonumber = Lottery.getInstance().getId();
 			int enchant = 0;
 			int type2 = 0;
@@ -329,11 +330,11 @@ public class Loto implements IBypassHandler
 		html.replace("%objectId%", String.valueOf(npc.getObjectId()));
 		html.replace("%race%", "" + Lottery.getInstance().getId());
 		html.replace("%adena%", "" + Lottery.getInstance().getPrize());
-		html.replace("%ticket_price%", "" + Config.ALT_LOTTERY_TICKET_PRICE);
-		html.replace("%prize5%", "" + (Config.ALT_LOTTERY_5_NUMBER_RATE * 100));
-		html.replace("%prize4%", "" + (Config.ALT_LOTTERY_4_NUMBER_RATE * 100));
-		html.replace("%prize3%", "" + (Config.ALT_LOTTERY_3_NUMBER_RATE * 100));
-		html.replace("%prize2%", "" + Config.ALT_LOTTERY_2_AND_1_NUMBER_PRIZE);
+		html.replace("%ticket_price%", "" +general().getLotteryTicketPrice());
+		html.replace("%prize5%", "" + (general().getLottery5NumberRate() * 100));
+		html.replace("%prize4%", "" + (general().getLottery4NumberRate() * 100));
+		html.replace("%prize3%", "" + (general().getLottery3NumberRate() * 100));
+		html.replace("%prize2%", "" + general().getLottery2and1NumberPrize());
 		html.replace("%enddate%", "" + DateFormat.getDateInstance().format(Lottery.getInstance().getEndDate()));
 		player.sendPacket(html);
 		
diff --git a/src/main/java/com/l2jserver/datapack/handlers/bypasshandlers/OlympiadManagerLink.java b/src/main/java/com/l2jserver/datapack/handlers/bypasshandlers/OlympiadManagerLink.java
index d538efe2cb..7f3a7b6316 100644
--- a/src/main/java/com/l2jserver/datapack/handlers/bypasshandlers/OlympiadManagerLink.java
+++ b/src/main/java/com/l2jserver/datapack/handlers/bypasshandlers/OlympiadManagerLink.java
@@ -18,11 +18,12 @@
  */
 package com.l2jserver.datapack.handlers.bypasshandlers;
 
+import static com.l2jserver.gameserver.config.Configuration.olympiad;
+
 import java.util.Collection;
 import java.util.List;
 import java.util.logging.Level;
 
-import com.l2jserver.gameserver.config.Config;
 import com.l2jserver.gameserver.data.sql.impl.NpcBufferTable;
 import com.l2jserver.gameserver.data.sql.impl.NpcBufferTable.NpcBufferData;
 import com.l2jserver.gameserver.data.xml.impl.MultisellData;
@@ -59,9 +60,9 @@ public class OlympiadManagerLink implements IBypassHandler
 		"olympiad"
 	};
 	
-	private static final String FEWER_THAN = "Fewer than " + String.valueOf(Config.ALT_OLY_REG_DISPLAY);
-	private static final String MORE_THAN = "More than " + String.valueOf(Config.ALT_OLY_REG_DISPLAY);
-	private static final int GATE_PASS = Config.ALT_OLY_COMP_RITEM;
+	private static final String FEWER_THAN = "Fewer than " + String.valueOf(olympiad().getRegistrationDisplayNumber());
+	private static final String MORE_THAN = "More than " + String.valueOf(olympiad().getRegistrationDisplayNumber());
+	private static final int GATE_PASS = olympiad().getCompetitionRewardItem();
 	
 	private static final int[] BUFFS =
 	{
@@ -157,11 +158,11 @@ public class OlympiadManagerLink implements IBypassHandler
 							}
 						}
 						html.setFile(activeChar.getHtmlPrefix(), Olympiad.OLYMPIAD_HTML_PATH + "noble_registered.htm");
-						if (Config.ALT_OLY_REG_DISPLAY > 0)
+						if (olympiad().getRegistrationDisplayNumber() > 0)
 						{
-							html.replace("%listClassed%", classed < Config.ALT_OLY_REG_DISPLAY ? FEWER_THAN : MORE_THAN);
-							html.replace("%listNonClassedTeam%", teams < Config.ALT_OLY_REG_DISPLAY ? FEWER_THAN : MORE_THAN);
-							html.replace("%listNonClassed%", nonClassed < Config.ALT_OLY_REG_DISPLAY ? FEWER_THAN : MORE_THAN);
+							html.replace("%listClassed%", classed < olympiad().getRegistrationDisplayNumber() ? FEWER_THAN : MORE_THAN);
+							html.replace("%listNonClassedTeam%", teams < olympiad().getRegistrationDisplayNumber() ? FEWER_THAN : MORE_THAN);
+							html.replace("%listNonClassed%", nonClassed < olympiad().getRegistrationDisplayNumber() ? FEWER_THAN : MORE_THAN);
 						}
 						else
 						{
@@ -290,7 +291,7 @@ public class OlympiadManagerLink implements IBypassHandler
 				
 				if (buffCount > 0)
 				{
-					html.setFile(activeChar.getHtmlPrefix(), buffCount == Config.ALT_OLY_MAX_BUFFS ? Olympiad.OLYMPIAD_HTML_PATH + "olympiad_buffs.htm" : Olympiad.OLYMPIAD_HTML_PATH + "olympiad_5buffs.htm");
+					html.setFile(activeChar.getHtmlPrefix(), buffCount == olympiad().getMaxBuffs() ? Olympiad.OLYMPIAD_HTML_PATH + "olympiad_buffs.htm" : Olympiad.OLYMPIAD_HTML_PATH + "olympiad_5buffs.htm");
 					html.replace("%objectId%", String.valueOf(target.getObjectId()));
 					activeChar.sendPacket(html);
 				}
diff --git a/src/main/java/com/l2jserver/datapack/handlers/bypasshandlers/PrivateWarehouse.java b/src/main/java/com/l2jserver/datapack/handlers/bypasshandlers/PrivateWarehouse.java
index c8b2fd4eb4..1b381c13af 100644
--- a/src/main/java/com/l2jserver/datapack/handlers/bypasshandlers/PrivateWarehouse.java
+++ b/src/main/java/com/l2jserver/datapack/handlers/bypasshandlers/PrivateWarehouse.java
@@ -18,9 +18,11 @@
  */
 package com.l2jserver.datapack.handlers.bypasshandlers;
 
+import static com.l2jserver.gameserver.config.Configuration.customs;
+import static com.l2jserver.gameserver.config.Configuration.general;
+
 import java.util.logging.Level;
 
-import com.l2jserver.gameserver.config.Config;
 import com.l2jserver.gameserver.handler.IBypassHandler;
 import com.l2jserver.gameserver.model.actor.L2Character;
 import com.l2jserver.gameserver.model.actor.L2Npc;
@@ -59,7 +61,7 @@ public class PrivateWarehouse implements IBypassHandler
 		{
 			if (command.toLowerCase().startsWith(COMMANDS[0])) // WithdrawP
 			{
-				if (Config.L2JMOD_ENABLE_WAREHOUSESORTING_PRIVATE)
+				if (customs().enableWarehouseSortingPrivate())
 				{
 					final NpcHtmlMessage msg = new NpcHtmlMessage(((L2Npc) target).getObjectId());
 					msg.setFile(activeChar.getHtmlPrefix(), "data/html/mods/WhSortedP.htm");
@@ -128,7 +130,7 @@ public class PrivateWarehouse implements IBypassHandler
 			player.sendPacket(new WareHouseWithdrawalList(player, WareHouseWithdrawalList.PRIVATE));
 		}
 		
-		if (Config.DEBUG)
+		if (general().debug())
 		{
 			_log.fine("Source: L2WarehouseInstance.java; Player: " + player.getName() + "; Command: showRetrieveWindow; Message: Showing stored items.");
 		}
diff --git a/src/main/java/com/l2jserver/datapack/handlers/bypasshandlers/RentPet.java b/src/main/java/com/l2jserver/datapack/handlers/bypasshandlers/RentPet.java
index 42a7df7e17..f9ba349d6c 100644
--- a/src/main/java/com/l2jserver/datapack/handlers/bypasshandlers/RentPet.java
+++ b/src/main/java/com/l2jserver/datapack/handlers/bypasshandlers/RentPet.java
@@ -18,9 +18,11 @@
  */
 package com.l2jserver.datapack.handlers.bypasshandlers;
 
+import static com.l2jserver.gameserver.config.Configuration.general;
+import static com.l2jserver.gameserver.config.Configuration.npc;
+
 import java.util.StringTokenizer;
 
-import com.l2jserver.gameserver.config.Config;
 import com.l2jserver.gameserver.handler.IBypassHandler;
 import com.l2jserver.gameserver.model.actor.L2Character;
 import com.l2jserver.gameserver.model.actor.L2Npc;
@@ -44,12 +46,12 @@ public class RentPet implements IBypassHandler
 			return false;
 		}
 		
-		if (!Config.ALLOW_RENTPET)
+		if (!general().allowRentPet())
 		{
 			return false;
 		}
 		
-		if (!Config.LIST_PET_RENT_NPC.contains(target.getId()))
+		if (!npc().getPetRentNPCs().contains(target.getId()))
 		{
 			return false;
 		}
diff --git a/src/main/java/com/l2jserver/datapack/handlers/bypasshandlers/SkillList.java b/src/main/java/com/l2jserver/datapack/handlers/bypasshandlers/SkillList.java
index 0061287fd3..e031c849eb 100644
--- a/src/main/java/com/l2jserver/datapack/handlers/bypasshandlers/SkillList.java
+++ b/src/main/java/com/l2jserver/datapack/handlers/bypasshandlers/SkillList.java
@@ -18,10 +18,11 @@
  */
 package com.l2jserver.datapack.handlers.bypasshandlers;
 
+import static com.l2jserver.gameserver.config.Configuration.character;
+
 import java.util.List;
 import java.util.logging.Level;
 
-import com.l2jserver.gameserver.config.Config;
 import com.l2jserver.gameserver.data.xml.impl.SkillTreesData;
 import com.l2jserver.gameserver.handler.IBypassHandler;
 import com.l2jserver.gameserver.model.actor.L2Character;
@@ -47,7 +48,7 @@ public class SkillList implements IBypassHandler
 			return false;
 		}
 		
-		if (Config.ALT_GAME_SKILL_LEARN)
+		if (character().skillLearn())
 		{
 			try
 			{
diff --git a/src/main/java/com/l2jserver/datapack/handlers/bypasshandlers/Wear.java b/src/main/java/com/l2jserver/datapack/handlers/bypasshandlers/Wear.java
index 8648ebfa98..69d09184e0 100644
--- a/src/main/java/com/l2jserver/datapack/handlers/bypasshandlers/Wear.java
+++ b/src/main/java/com/l2jserver/datapack/handlers/bypasshandlers/Wear.java
@@ -18,10 +18,11 @@
  */
 package com.l2jserver.datapack.handlers.bypasshandlers;
 
+import static com.l2jserver.gameserver.config.Configuration.general;
+
 import java.util.StringTokenizer;
 import java.util.logging.Level;
 
-import com.l2jserver.gameserver.config.Config;
 import com.l2jserver.gameserver.data.xml.impl.BuyListData;
 import com.l2jserver.gameserver.handler.IBypassHandler;
 import com.l2jserver.gameserver.model.actor.L2Character;
@@ -45,7 +46,7 @@ public class Wear implements IBypassHandler
 			return false;
 		}
 		
-		if (!Config.ALLOW_WEAR)
+		if (!general().allowWear())
 		{
 			return false;
 		}
diff --git a/src/main/java/com/l2jserver/datapack/handlers/chathandlers/ChatAll.java b/src/main/java/com/l2jserver/datapack/handlers/chathandlers/ChatAll.java
index b732a5aeab..ad107c1f2a 100644
--- a/src/main/java/com/l2jserver/datapack/handlers/chathandlers/ChatAll.java
+++ b/src/main/java/com/l2jserver/datapack/handlers/chathandlers/ChatAll.java
@@ -18,11 +18,12 @@
  */
 package com.l2jserver.datapack.handlers.chathandlers;
 
+import static com.l2jserver.gameserver.config.Configuration.general;
+
 import java.util.Collection;
 import java.util.StringTokenizer;
 import java.util.logging.Logger;
 
-import com.l2jserver.gameserver.config.Config;
 import com.l2jserver.gameserver.handler.IChatHandler;
 import com.l2jserver.gameserver.handler.IVoicedCommandHandler;
 import com.l2jserver.gameserver.handler.VoicedCommandHandler;
@@ -30,7 +31,6 @@ import com.l2jserver.gameserver.model.BlockList;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.serverpackets.CreatureSay;
-import com.l2jserver.gameserver.util.Util;
 
 /**
  * A chat handler
@@ -45,9 +45,6 @@ public class ChatAll implements IChatHandler
 		0
 	};
 	
-	/**
-	 * Handle chat type 'all'
-	 */
 	@Override
 	public void handleChat(int type, L2PcInstance activeChar, String params, String text)
 	{
@@ -67,7 +64,7 @@ public class ChatAll implements IChatHandler
 			else
 			{
 				command = text.substring(1);
-				if (Config.DEBUG)
+				if (general().debug())
 				{
 					_log.info("Command: " + command);
 				}
@@ -80,7 +77,7 @@ public class ChatAll implements IChatHandler
 			}
 			else
 			{
-				if (Config.DEBUG)
+				if (general().debug())
 				{
 					_log.warning("No handler registered for bypass '" + command + "'");
 				}
@@ -89,7 +86,7 @@ public class ChatAll implements IChatHandler
 		}
 		if (!vcd_used)
 		{
-			if (activeChar.isChatBanned() && Util.contains(Config.BAN_CHAT_CHANNELS, type))
+			if (activeChar.isChatBanned() && general().getBanChatChannels().contains(type))
 			{
 				activeChar.sendPacket(SystemMessageId.CHATTING_IS_CURRENTLY_PROHIBITED);
 				return;
@@ -119,9 +116,6 @@ public class ChatAll implements IChatHandler
 		}
 	}
 	
-	/**
-	 * Returns the chat types registered to this handler.
-	 */
 	@Override
 	public int[] getChatTypeList()
 	{
diff --git a/src/main/java/com/l2jserver/datapack/handlers/chathandlers/ChatAlliance.java b/src/main/java/com/l2jserver/datapack/handlers/chathandlers/ChatAlliance.java
index fdb5ebc147..9f8cd14885 100644
--- a/src/main/java/com/l2jserver/datapack/handlers/chathandlers/ChatAlliance.java
+++ b/src/main/java/com/l2jserver/datapack/handlers/chathandlers/ChatAlliance.java
@@ -18,12 +18,12 @@
  */
 package com.l2jserver.datapack.handlers.chathandlers;
 
-import com.l2jserver.gameserver.config.Config;
+import static com.l2jserver.gameserver.config.Configuration.general;
+
 import com.l2jserver.gameserver.handler.IChatHandler;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.serverpackets.CreatureSay;
-import com.l2jserver.gameserver.util.Util;
 
 public class ChatAlliance implements IChatHandler
 {
@@ -32,15 +32,12 @@ public class ChatAlliance implements IChatHandler
 		9
 	};
 	
-	/**
-	 * Handle chat type 'alliance'
-	 */
 	@Override
 	public void handleChat(int type, L2PcInstance activeChar, String target, String text)
 	{
 		if (activeChar.getClan() != null)
 		{
-			if (activeChar.isChatBanned() && Util.contains(Config.BAN_CHAT_CHANNELS, type))
+			if (activeChar.isChatBanned() && general().getBanChatChannels().contains(type))
 			{
 				activeChar.sendPacket(SystemMessageId.CHATTING_IS_CURRENTLY_PROHIBITED);
 				return;
@@ -51,9 +48,6 @@ public class ChatAlliance implements IChatHandler
 		}
 	}
 	
-	/**
-	 * Returns the chat types registered to this handler.
-	 */
 	@Override
 	public int[] getChatTypeList()
 	{
diff --git a/src/main/java/com/l2jserver/datapack/handlers/chathandlers/ChatBattlefield.java b/src/main/java/com/l2jserver/datapack/handlers/chathandlers/ChatBattlefield.java
index 82d2813ca5..8e902eae2e 100644
--- a/src/main/java/com/l2jserver/datapack/handlers/chathandlers/ChatBattlefield.java
+++ b/src/main/java/com/l2jserver/datapack/handlers/chathandlers/ChatBattlefield.java
@@ -18,14 +18,14 @@
  */
 package com.l2jserver.datapack.handlers.chathandlers;
 
-import com.l2jserver.gameserver.config.Config;
+import static com.l2jserver.gameserver.config.Configuration.general;
+
 import com.l2jserver.gameserver.handler.IChatHandler;
 import com.l2jserver.gameserver.instancemanager.TerritoryWarManager;
 import com.l2jserver.gameserver.model.L2World;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.serverpackets.CreatureSay;
-import com.l2jserver.gameserver.util.Util;
 
 /**
  * A chat handler
@@ -38,15 +38,12 @@ public class ChatBattlefield implements IChatHandler
 		20
 	};
 	
-	/**
-	 * Handle chat type 'battlefield'
-	 */
 	@Override
 	public void handleChat(int type, L2PcInstance activeChar, String target, String text)
 	{
 		if (TerritoryWarManager.getInstance().isTWChannelOpen() && (activeChar.getSiegeSide() > 0))
 		{
-			if (activeChar.isChatBanned() && Util.contains(Config.BAN_CHAT_CHANNELS, type))
+			if (activeChar.isChatBanned() && general().getBanChatChannels().contains(type))
 			{
 				activeChar.sendPacket(SystemMessageId.CHATTING_IS_CURRENTLY_PROHIBITED);
 				return;
@@ -63,9 +60,6 @@ public class ChatBattlefield implements IChatHandler
 		}
 	}
 	
-	/**
-	 * Returns the chat types registered to this handler.
-	 */
 	@Override
 	public int[] getChatTypeList()
 	{
diff --git a/src/main/java/com/l2jserver/datapack/handlers/chathandlers/ChatClan.java b/src/main/java/com/l2jserver/datapack/handlers/chathandlers/ChatClan.java
index a052256454..0ca5f3e933 100644
--- a/src/main/java/com/l2jserver/datapack/handlers/chathandlers/ChatClan.java
+++ b/src/main/java/com/l2jserver/datapack/handlers/chathandlers/ChatClan.java
@@ -18,12 +18,12 @@
  */
 package com.l2jserver.datapack.handlers.chathandlers;
 
-import com.l2jserver.gameserver.config.Config;
+import static com.l2jserver.gameserver.config.Configuration.general;
+
 import com.l2jserver.gameserver.handler.IChatHandler;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.serverpackets.CreatureSay;
-import com.l2jserver.gameserver.util.Util;
 
 /**
  * A chat handler
@@ -36,15 +36,12 @@ public class ChatClan implements IChatHandler
 		4
 	};
 	
-	/**
-	 * Handle chat type 'clan'
-	 */
 	@Override
 	public void handleChat(int type, L2PcInstance activeChar, String target, String text)
 	{
 		if (activeChar.getClan() != null)
 		{
-			if (activeChar.isChatBanned() && Util.contains(Config.BAN_CHAT_CHANNELS, type))
+			if (activeChar.isChatBanned() && general().getBanChatChannels().contains(type))
 			{
 				activeChar.sendPacket(SystemMessageId.CHATTING_IS_CURRENTLY_PROHIBITED);
 				return;
@@ -55,9 +52,6 @@ public class ChatClan implements IChatHandler
 		}
 	}
 	
-	/**
-	 * Returns the chat types registered to this handler.
-	 */
 	@Override
 	public int[] getChatTypeList()
 	{
diff --git a/src/main/java/com/l2jserver/datapack/handlers/chathandlers/ChatHeroVoice.java b/src/main/java/com/l2jserver/datapack/handlers/chathandlers/ChatHeroVoice.java
index 74cbe3c3bd..bda964a40b 100644
--- a/src/main/java/com/l2jserver/datapack/handlers/chathandlers/ChatHeroVoice.java
+++ b/src/main/java/com/l2jserver/datapack/handlers/chathandlers/ChatHeroVoice.java
@@ -18,7 +18,8 @@
  */
 package com.l2jserver.datapack.handlers.chathandlers;
 
-import com.l2jserver.gameserver.config.Config;
+import static com.l2jserver.gameserver.config.Configuration.general;
+
 import com.l2jserver.gameserver.handler.IChatHandler;
 import com.l2jserver.gameserver.model.BlockList;
 import com.l2jserver.gameserver.model.L2World;
@@ -26,7 +27,6 @@ import com.l2jserver.gameserver.model.PcCondOverride;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.serverpackets.CreatureSay;
-import com.l2jserver.gameserver.util.Util;
 
 /**
  * Hero chat handler.
@@ -39,15 +39,12 @@ public class ChatHeroVoice implements IChatHandler
 		17
 	};
 	
-	/**
-	 * Handle chat type 'hero voice'
-	 */
 	@Override
 	public void handleChat(int type, L2PcInstance activeChar, String target, String text)
 	{
 		if (activeChar.isHero() || activeChar.canOverrideCond(PcCondOverride.CHAT_CONDITIONS))
 		{
-			if (activeChar.isChatBanned() && Util.contains(Config.BAN_CHAT_CHANNELS, type))
+			if (activeChar.isChatBanned() && general().getBanChatChannels().contains(type))
 			{
 				activeChar.sendPacket(SystemMessageId.CHATTING_IS_CURRENTLY_PROHIBITED);
 				return;
@@ -70,9 +67,6 @@ public class ChatHeroVoice implements IChatHandler
 		}
 	}
 	
-	/**
-	 * Returns the chat types registered to this handler.
-	 */
 	@Override
 	public int[] getChatTypeList()
 	{
diff --git a/src/main/java/com/l2jserver/datapack/handlers/chathandlers/ChatParty.java b/src/main/java/com/l2jserver/datapack/handlers/chathandlers/ChatParty.java
index eb8e0787f4..8f163f0b51 100644
--- a/src/main/java/com/l2jserver/datapack/handlers/chathandlers/ChatParty.java
+++ b/src/main/java/com/l2jserver/datapack/handlers/chathandlers/ChatParty.java
@@ -18,12 +18,12 @@
  */
 package com.l2jserver.datapack.handlers.chathandlers;
 
-import com.l2jserver.gameserver.config.Config;
+import static com.l2jserver.gameserver.config.Configuration.general;
+
 import com.l2jserver.gameserver.handler.IChatHandler;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.serverpackets.CreatureSay;
-import com.l2jserver.gameserver.util.Util;
 
 /**
  * A chat handler
@@ -36,15 +36,12 @@ public class ChatParty implements IChatHandler
 		3
 	};
 	
-	/**
-	 * Handle chat type 'party'
-	 */
 	@Override
 	public void handleChat(int type, L2PcInstance activeChar, String target, String text)
 	{
 		if (activeChar.isInParty())
 		{
-			if (activeChar.isChatBanned() && Util.contains(Config.BAN_CHAT_CHANNELS, type))
+			if (activeChar.isChatBanned() && general().getBanChatChannels().contains(type))
 			{
 				activeChar.sendPacket(SystemMessageId.CHATTING_IS_CURRENTLY_PROHIBITED);
 				return;
@@ -55,9 +52,6 @@ public class ChatParty implements IChatHandler
 		}
 	}
 	
-	/**
-	 * Returns the chat types registered to this handler.
-	 */
 	@Override
 	public int[] getChatTypeList()
 	{
diff --git a/src/main/java/com/l2jserver/datapack/handlers/chathandlers/ChatPartyMatchRoom.java b/src/main/java/com/l2jserver/datapack/handlers/chathandlers/ChatPartyMatchRoom.java
index 4898b3a88d..68bbf17bb4 100644
--- a/src/main/java/com/l2jserver/datapack/handlers/chathandlers/ChatPartyMatchRoom.java
+++ b/src/main/java/com/l2jserver/datapack/handlers/chathandlers/ChatPartyMatchRoom.java
@@ -18,14 +18,14 @@
  */
 package com.l2jserver.datapack.handlers.chathandlers;
 
-import com.l2jserver.gameserver.config.Config;
+import static com.l2jserver.gameserver.config.Configuration.general;
+
 import com.l2jserver.gameserver.handler.IChatHandler;
 import com.l2jserver.gameserver.model.PartyMatchRoom;
 import com.l2jserver.gameserver.model.PartyMatchRoomList;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.serverpackets.CreatureSay;
-import com.l2jserver.gameserver.util.Util;
 
 /**
  * A chat handler
@@ -38,9 +38,6 @@ public class ChatPartyMatchRoom implements IChatHandler
 		14
 	};
 	
-	/**
-	 * Handle chat type 'partymatchroom'
-	 */
 	@Override
 	public void handleChat(int type, L2PcInstance activeChar, String target, String text)
 	{
@@ -49,7 +46,7 @@ public class ChatPartyMatchRoom implements IChatHandler
 			PartyMatchRoom _room = PartyMatchRoomList.getInstance().getPlayerRoom(activeChar);
 			if (_room != null)
 			{
-				if (activeChar.isChatBanned() && Util.contains(Config.BAN_CHAT_CHANNELS, type))
+				if (activeChar.isChatBanned() && general().getBanChatChannels().contains(type))
 				{
 					activeChar.sendPacket(SystemMessageId.CHATTING_IS_CURRENTLY_PROHIBITED);
 					return;
@@ -64,17 +61,9 @@ public class ChatPartyMatchRoom implements IChatHandler
 		}
 	}
 	
-	/**
-	 * Returns the chat types registered to this handler
-	 */
 	@Override
 	public int[] getChatTypeList()
 	{
 		return COMMAND_IDS;
 	}
-	
-	public static void main(String[] args)
-	{
-		new ChatPartyMatchRoom();
-	}
 }
\ No newline at end of file
diff --git a/src/main/java/com/l2jserver/datapack/handlers/chathandlers/ChatPartyRoomAll.java b/src/main/java/com/l2jserver/datapack/handlers/chathandlers/ChatPartyRoomAll.java
index bc9036046a..a2085aa933 100644
--- a/src/main/java/com/l2jserver/datapack/handlers/chathandlers/ChatPartyRoomAll.java
+++ b/src/main/java/com/l2jserver/datapack/handlers/chathandlers/ChatPartyRoomAll.java
@@ -18,12 +18,12 @@
  */
 package com.l2jserver.datapack.handlers.chathandlers;
 
-import com.l2jserver.gameserver.config.Config;
+import static com.l2jserver.gameserver.config.Configuration.general;
+
 import com.l2jserver.gameserver.handler.IChatHandler;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.serverpackets.CreatureSay;
-import com.l2jserver.gameserver.util.Util;
 
 /**
  * A chat handler
@@ -36,9 +36,6 @@ public class ChatPartyRoomAll implements IChatHandler
 		16
 	};
 	
-	/**
-	 * Handle chat type 'party room all'
-	 */
 	@Override
 	public void handleChat(int type, L2PcInstance activeChar, String target, String text)
 	{
@@ -46,7 +43,7 @@ public class ChatPartyRoomAll implements IChatHandler
 		{
 			if (activeChar.getParty().isInCommandChannel() && activeChar.getParty().isLeader(activeChar))
 			{
-				if (activeChar.isChatBanned() && Util.contains(Config.BAN_CHAT_CHANNELS, type))
+				if (activeChar.isChatBanned() && general().getBanChatChannels().contains(type))
 				{
 					activeChar.sendPacket(SystemMessageId.CHATTING_IS_CURRENTLY_PROHIBITED);
 					return;
@@ -58,9 +55,6 @@ public class ChatPartyRoomAll implements IChatHandler
 		}
 	}
 	
-	/**
-	 * Returns the chat types registered to this handler.
-	 */
 	@Override
 	public int[] getChatTypeList()
 	{
diff --git a/src/main/java/com/l2jserver/datapack/handlers/chathandlers/ChatPartyRoomCommander.java b/src/main/java/com/l2jserver/datapack/handlers/chathandlers/ChatPartyRoomCommander.java
index be71daf384..49e6121456 100644
--- a/src/main/java/com/l2jserver/datapack/handlers/chathandlers/ChatPartyRoomCommander.java
+++ b/src/main/java/com/l2jserver/datapack/handlers/chathandlers/ChatPartyRoomCommander.java
@@ -18,12 +18,12 @@
  */
 package com.l2jserver.datapack.handlers.chathandlers;
 
-import com.l2jserver.gameserver.config.Config;
+import static com.l2jserver.gameserver.config.Configuration.general;
+
 import com.l2jserver.gameserver.handler.IChatHandler;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.serverpackets.CreatureSay;
-import com.l2jserver.gameserver.util.Util;
 
 /**
  * A chat handler
@@ -36,9 +36,6 @@ public class ChatPartyRoomCommander implements IChatHandler
 		15
 	};
 	
-	/**
-	 * Handle chat type 'party room commander'
-	 */
 	@Override
 	public void handleChat(int type, L2PcInstance activeChar, String target, String text)
 	{
@@ -46,7 +43,7 @@ public class ChatPartyRoomCommander implements IChatHandler
 		{
 			if (activeChar.getParty().isInCommandChannel() && activeChar.getParty().getCommandChannel().getLeader().equals(activeChar))
 			{
-				if (activeChar.isChatBanned() && Util.contains(Config.BAN_CHAT_CHANNELS, type))
+				if (activeChar.isChatBanned() && general().getBanChatChannels().contains(type))
 				{
 					activeChar.sendPacket(SystemMessageId.CHATTING_IS_CURRENTLY_PROHIBITED);
 					return;
@@ -58,9 +55,6 @@ public class ChatPartyRoomCommander implements IChatHandler
 		}
 	}
 	
-	/**
-	 * Returns the chat types registered to this handler.
-	 */
 	@Override
 	public int[] getChatTypeList()
 	{
diff --git a/src/main/java/com/l2jserver/datapack/handlers/chathandlers/ChatPetition.java b/src/main/java/com/l2jserver/datapack/handlers/chathandlers/ChatPetition.java
index dadb3e6122..a89fcf9694 100644
--- a/src/main/java/com/l2jserver/datapack/handlers/chathandlers/ChatPetition.java
+++ b/src/main/java/com/l2jserver/datapack/handlers/chathandlers/ChatPetition.java
@@ -18,12 +18,12 @@
  */
 package com.l2jserver.datapack.handlers.chathandlers;
 
-import com.l2jserver.gameserver.config.Config;
+import static com.l2jserver.gameserver.config.Configuration.general;
+
 import com.l2jserver.gameserver.handler.IChatHandler;
 import com.l2jserver.gameserver.instancemanager.PetitionManager;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.network.SystemMessageId;
-import com.l2jserver.gameserver.util.Util;
 
 /**
  * A chat handler
@@ -37,13 +37,10 @@ public class ChatPetition implements IChatHandler
 		7
 	};
 	
-	/**
-	 * Handle chat type 'petition player'
-	 */
 	@Override
 	public void handleChat(int type, L2PcInstance activeChar, String target, String text)
 	{
-		if (activeChar.isChatBanned() && Util.contains(Config.BAN_CHAT_CHANNELS, type))
+		if (activeChar.isChatBanned() && general().getBanChatChannels().contains(type))
 		{
 			activeChar.sendPacket(SystemMessageId.CHATTING_IS_CURRENTLY_PROHIBITED);
 			return;
@@ -58,9 +55,6 @@ public class ChatPetition implements IChatHandler
 		PetitionManager.getInstance().sendActivePetitionMessage(activeChar, text);
 	}
 	
-	/**
-	 * Returns the chat types registered to this handler.
-	 */
 	@Override
 	public int[] getChatTypeList()
 	{
diff --git a/src/main/java/com/l2jserver/datapack/handlers/chathandlers/ChatShout.java b/src/main/java/com/l2jserver/datapack/handlers/chathandlers/ChatShout.java
index 77325b181a..8e24a367a4 100644
--- a/src/main/java/com/l2jserver/datapack/handlers/chathandlers/ChatShout.java
+++ b/src/main/java/com/l2jserver/datapack/handlers/chathandlers/ChatShout.java
@@ -18,7 +18,8 @@
  */
 package com.l2jserver.datapack.handlers.chathandlers;
 
-import com.l2jserver.gameserver.config.Config;
+import static com.l2jserver.gameserver.config.Configuration.general;
+
 import com.l2jserver.gameserver.handler.IChatHandler;
 import com.l2jserver.gameserver.instancemanager.MapRegionManager;
 import com.l2jserver.gameserver.model.BlockList;
@@ -27,7 +28,6 @@ import com.l2jserver.gameserver.model.PcCondOverride;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.serverpackets.CreatureSay;
-import com.l2jserver.gameserver.util.Util;
 
 /**
  * Shout chat handler.
@@ -46,14 +46,14 @@ public class ChatShout implements IChatHandler
 	@Override
 	public void handleChat(int type, L2PcInstance activeChar, String target, String text)
 	{
-		if (activeChar.isChatBanned() && Util.contains(Config.BAN_CHAT_CHANNELS, type))
+		if (activeChar.isChatBanned() && general().getBanChatChannels().contains(type))
 		{
 			activeChar.sendPacket(SystemMessageId.CHATTING_IS_CURRENTLY_PROHIBITED);
 			return;
 		}
 		
 		final CreatureSay cs = new CreatureSay(activeChar.getObjectId(), type, activeChar.getName(), text);
-		if (Config.DEFAULT_GLOBAL_CHAT.equalsIgnoreCase("on") || (Config.DEFAULT_GLOBAL_CHAT.equalsIgnoreCase("gm") && activeChar.canOverrideCond(PcCondOverride.CHAT_CONDITIONS)))
+		if (general().getGlobalChat().equalsIgnoreCase("on") || (general().getGlobalChat().equalsIgnoreCase("gm") && activeChar.canOverrideCond(PcCondOverride.CHAT_CONDITIONS)))
 		{
 			int region = MapRegionManager.getInstance().getMapRegionLocId(activeChar);
 			for (L2PcInstance player : L2World.getInstance().getPlayers())
@@ -64,7 +64,7 @@ public class ChatShout implements IChatHandler
 				}
 			}
 		}
-		else if (Config.DEFAULT_GLOBAL_CHAT.equalsIgnoreCase("global"))
+		else if (general().getGlobalChat().equalsIgnoreCase("global"))
 		{
 			if (!activeChar.canOverrideCond(PcCondOverride.CHAT_CONDITIONS) && !activeChar.getFloodProtectors().getGlobalChat().tryPerformAction("global chat"))
 			{
diff --git a/src/main/java/com/l2jserver/datapack/handlers/chathandlers/ChatTell.java b/src/main/java/com/l2jserver/datapack/handlers/chathandlers/ChatTell.java
index d468fab1cd..e9e7e61859 100644
--- a/src/main/java/com/l2jserver/datapack/handlers/chathandlers/ChatTell.java
+++ b/src/main/java/com/l2jserver/datapack/handlers/chathandlers/ChatTell.java
@@ -18,7 +18,9 @@
  */
 package com.l2jserver.datapack.handlers.chathandlers;
 
-import com.l2jserver.gameserver.config.Config;
+import static com.l2jserver.gameserver.config.Configuration.character;
+import static com.l2jserver.gameserver.config.Configuration.general;
+
 import com.l2jserver.gameserver.handler.IChatHandler;
 import com.l2jserver.gameserver.model.BlockList;
 import com.l2jserver.gameserver.model.L2World;
@@ -26,7 +28,6 @@ import com.l2jserver.gameserver.model.PcCondOverride;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.serverpackets.CreatureSay;
-import com.l2jserver.gameserver.util.Util;
 
 /**
  * Tell chat handler.
@@ -45,13 +46,13 @@ public class ChatTell implements IChatHandler
 	@Override
 	public void handleChat(int type, L2PcInstance activeChar, String target, String text)
 	{
-		if (activeChar.isChatBanned() && Util.contains(Config.BAN_CHAT_CHANNELS, type))
+		if (activeChar.isChatBanned() && general().getBanChatChannels().contains(type))
 		{
 			activeChar.sendPacket(SystemMessageId.CHATTING_IS_CURRENTLY_PROHIBITED);
 			return;
 		}
 		
-		if (Config.JAIL_DISABLE_CHAT && activeChar.isJailed() && !activeChar.canOverrideCond(PcCondOverride.CHAT_CONDITIONS))
+		if (general().jailDisableChat() && activeChar.isJailed() && !activeChar.canOverrideCond(PcCondOverride.CHAT_CONDITIONS))
 		{
 			activeChar.sendPacket(SystemMessageId.CHATTING_PROHIBITED);
 			return;
@@ -70,7 +71,7 @@ public class ChatTell implements IChatHandler
 		
 		if ((receiver != null) && !receiver.isSilenceMode(activeChar.getObjectId()))
 		{
-			if (Config.JAIL_DISABLE_CHAT && receiver.isJailed() && !activeChar.canOverrideCond(PcCondOverride.CHAT_CONDITIONS))
+			if (general().jailDisableChat() && receiver.isJailed() && !activeChar.canOverrideCond(PcCondOverride.CHAT_CONDITIONS))
 			{
 				activeChar.sendMessage("Player is in jail.");
 				return;
@@ -87,8 +88,8 @@ public class ChatTell implements IChatHandler
 			}
 			if (!BlockList.isBlocked(receiver, activeChar))
 			{
-				// Allow reciever to send PMs to this char, which is in silence mode.
-				if (Config.SILENCE_MODE_EXCLUDE && activeChar.isSilenceMode())
+				// Allow receiver to send PMs to this char, which is in silence mode.
+				if (character().silenceModeExclude() && activeChar.isSilenceMode())
 				{
 					activeChar.addSilenceModeExcluded(receiver.getObjectId());
 				}
diff --git a/src/main/java/com/l2jserver/datapack/handlers/chathandlers/ChatTrade.java b/src/main/java/com/l2jserver/datapack/handlers/chathandlers/ChatTrade.java
index 5c79818f44..bf6211f10a 100644
--- a/src/main/java/com/l2jserver/datapack/handlers/chathandlers/ChatTrade.java
+++ b/src/main/java/com/l2jserver/datapack/handlers/chathandlers/ChatTrade.java
@@ -18,7 +18,8 @@
  */
 package com.l2jserver.datapack.handlers.chathandlers;
 
-import com.l2jserver.gameserver.config.Config;
+import static com.l2jserver.gameserver.config.Configuration.general;
+
 import com.l2jserver.gameserver.handler.IChatHandler;
 import com.l2jserver.gameserver.instancemanager.MapRegionManager;
 import com.l2jserver.gameserver.model.BlockList;
@@ -27,7 +28,6 @@ import com.l2jserver.gameserver.model.PcCondOverride;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.serverpackets.CreatureSay;
-import com.l2jserver.gameserver.util.Util;
 
 /**
  * Trade chat handler.
@@ -46,14 +46,14 @@ public class ChatTrade implements IChatHandler
 	@Override
 	public void handleChat(int type, L2PcInstance activeChar, String target, String text)
 	{
-		if (activeChar.isChatBanned() && Util.contains(Config.BAN_CHAT_CHANNELS, type))
+		if (activeChar.isChatBanned() && general().getBanChatChannels().contains(type))
 		{
 			activeChar.sendPacket(SystemMessageId.CHATTING_IS_CURRENTLY_PROHIBITED);
 			return;
 		}
 		
 		final CreatureSay cs = new CreatureSay(activeChar.getObjectId(), type, activeChar.getName(), text);
-		if (Config.DEFAULT_TRADE_CHAT.equalsIgnoreCase("on") || (Config.DEFAULT_TRADE_CHAT.equalsIgnoreCase("gm") && activeChar.canOverrideCond(PcCondOverride.CHAT_CONDITIONS)))
+		if (general().getTradeChat().equalsIgnoreCase("on") || (general().getTradeChat().equalsIgnoreCase("gm") && activeChar.canOverrideCond(PcCondOverride.CHAT_CONDITIONS)))
 		{
 			int region = MapRegionManager.getInstance().getMapRegionLocId(activeChar);
 			for (L2PcInstance player : L2World.getInstance().getPlayers())
@@ -64,7 +64,7 @@ public class ChatTrade implements IChatHandler
 				}
 			}
 		}
-		else if (Config.DEFAULT_TRADE_CHAT.equalsIgnoreCase("global"))
+		else if (general().getTradeChat().equalsIgnoreCase("global"))
 		{
 			if (!activeChar.canOverrideCond(PcCondOverride.CHAT_CONDITIONS) && !activeChar.getFloodProtectors().getGlobalChat().tryPerformAction("global chat"))
 			{
diff --git a/src/main/java/com/l2jserver/datapack/handlers/custom/CustomAnnouncePkPvP.java b/src/main/java/com/l2jserver/datapack/handlers/custom/CustomAnnouncePkPvP.java
index 87fc4b4cd3..611ae603cf 100644
--- a/src/main/java/com/l2jserver/datapack/handlers/custom/CustomAnnouncePkPvP.java
+++ b/src/main/java/com/l2jserver/datapack/handlers/custom/CustomAnnouncePkPvP.java
@@ -18,7 +18,8 @@
  */
 package com.l2jserver.datapack.handlers.custom;
 
-import com.l2jserver.gameserver.config.Config;
+import static com.l2jserver.gameserver.config.Configuration.customs;
+
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.events.Containers;
 import com.l2jserver.gameserver.model.events.EventType;
@@ -36,16 +37,12 @@ public class CustomAnnouncePkPvP
 	
 	public CustomAnnouncePkPvP()
 	{
-		if (Config.ANNOUNCE_PK_PVP)
+		if (customs().announcePkPvP())
 		{
 			Containers.Players().addListener(new ConsumerEventListener(Containers.Players(), EventType.ON_PLAYER_PVP_KILL, (OnPlayerPvPKill event) -> OnPlayerPvPKill(event), this));
 		}
 	}
 	
-	/**
-	 * @param event
-	 * @return
-	 */
 	private Object OnPlayerPvPKill(OnPlayerPvPKill event)
 	{
 		L2PcInstance pk = event.getActiveChar();
@@ -55,13 +52,13 @@ public class CustomAnnouncePkPvP
 		}
 		L2PcInstance player = event.getTarget();
 		
-		String msg = Config.ANNOUNCE_PVP_MSG;
+		String msg = customs().getAnnouncePvpMsg();
 		if (player.getPvpFlag() == 0)
 		{
-			msg = Config.ANNOUNCE_PK_MSG;
+			msg = customs().getAnnouncePkMsg();
 		}
 		msg = msg.replace("$killer", pk.getName()).replace("$target", player.getName());
-		if (Config.ANNOUNCE_PK_PVP_NORMAL_MESSAGE)
+		if (customs().announcePkPvPNormalMessage())
 		{
 			SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.S1);
 			sm.addString(msg);
diff --git a/src/main/java/com/l2jserver/datapack/handlers/effecthandlers/instant/Fishing.java b/src/main/java/com/l2jserver/datapack/handlers/effecthandlers/instant/Fishing.java
index 99265ca4bc..5428341142 100644
--- a/src/main/java/com/l2jserver/datapack/handlers/effecthandlers/instant/Fishing.java
+++ b/src/main/java/com/l2jserver/datapack/handlers/effecthandlers/instant/Fishing.java
@@ -18,9 +18,10 @@
  */
 package com.l2jserver.datapack.handlers.effecthandlers.instant;
 
+import static com.l2jserver.gameserver.config.Configuration.general;
+
 import com.l2jserver.commons.util.Rnd;
 import com.l2jserver.gameserver.GeoData;
-import com.l2jserver.gameserver.config.Config;
 import com.l2jserver.gameserver.instancemanager.ZoneManager;
 import com.l2jserver.gameserver.model.PcCondOverride;
 import com.l2jserver.gameserver.model.StatsSet;
@@ -79,7 +80,7 @@ public final class Fishing extends AbstractEffect
 		
 		final L2PcInstance player = activeChar.getActingPlayer();
 		
-		if (!Config.ALLOWFISHING && !player.canOverrideCond(PcCondOverride.SKILL_CONDITIONS))
+		if (!general().allowFishing() && !player.canOverrideCond(PcCondOverride.SKILL_CONDITIONS))
 		{
 			player.sendMessage("Fishing is disabled!");
 			return;
diff --git a/src/main/java/com/l2jserver/datapack/handlers/effecthandlers/instant/FoodForPet.java b/src/main/java/com/l2jserver/datapack/handlers/effecthandlers/instant/FoodForPet.java
index 0915870263..fa1ee9c13f 100644
--- a/src/main/java/com/l2jserver/datapack/handlers/effecthandlers/instant/FoodForPet.java
+++ b/src/main/java/com/l2jserver/datapack/handlers/effecthandlers/instant/FoodForPet.java
@@ -18,7 +18,8 @@
  */
 package com.l2jserver.datapack.handlers.effecthandlers.instant;
 
-import com.l2jserver.gameserver.config.Config;
+import static com.l2jserver.gameserver.config.Configuration.rates;
+
 import com.l2jserver.gameserver.enums.MountType;
 import com.l2jserver.gameserver.model.StatsSet;
 import com.l2jserver.gameserver.model.actor.L2Character;
@@ -62,7 +63,7 @@ public final class FoodForPet extends AbstractEffect
 		if (activeChar.isPet())
 		{
 			final L2PetInstance pet = (L2PetInstance) activeChar;
-			pet.setCurrentFed(pet.getCurrentFed() + (_normal * Config.PET_FOOD_RATE));
+			pet.setCurrentFed(pet.getCurrentFed() + (_normal * rates().getPetFoodRate()));
 		}
 		else if (activeChar.isPlayer())
 		{
diff --git a/src/main/java/com/l2jserver/datapack/handlers/effecthandlers/instant/RestorationRandom.java b/src/main/java/com/l2jserver/datapack/handlers/effecthandlers/instant/RestorationRandom.java
index 5449be62b2..68b8277861 100644
--- a/src/main/java/com/l2jserver/datapack/handlers/effecthandlers/instant/RestorationRandom.java
+++ b/src/main/java/com/l2jserver/datapack/handlers/effecthandlers/instant/RestorationRandom.java
@@ -18,11 +18,12 @@
  */
 package com.l2jserver.datapack.handlers.effecthandlers.instant;
 
+import static com.l2jserver.gameserver.config.Configuration.rates;
+
 import java.util.ArrayList;
 import java.util.List;
 
 import com.l2jserver.commons.util.Rnd;
-import com.l2jserver.gameserver.config.Config;
 import com.l2jserver.gameserver.model.L2ExtractableProductItem;
 import com.l2jserver.gameserver.model.L2ExtractableSkill;
 import com.l2jserver.gameserver.model.StatsSet;
@@ -110,7 +111,7 @@ public final class RestorationRandom extends AbstractEffect
 			{
 				continue;
 			}
-			player.addItem("Extract", item.getId(), (long) (item.getCount() * Config.RATE_EXTRACTABLE), info.getEffector(), true);
+			player.addItem("Extract", item.getId(), (long) (item.getCount() * rates().getRateExtractable()), info.getEffector(), true);
 		}
 	}
 }
diff --git a/src/main/java/com/l2jserver/datapack/handlers/effecthandlers/instant/Summon.java b/src/main/java/com/l2jserver/datapack/handlers/effecthandlers/instant/Summon.java
index 233ae092aa..19d89fa00e 100644
--- a/src/main/java/com/l2jserver/datapack/handlers/effecthandlers/instant/Summon.java
+++ b/src/main/java/com/l2jserver/datapack/handlers/effecthandlers/instant/Summon.java
@@ -18,7 +18,8 @@
  */
 package com.l2jserver.datapack.handlers.effecthandlers.instant;
 
-import com.l2jserver.gameserver.config.Config;
+import static com.l2jserver.gameserver.config.Configuration.character;
+
 import com.l2jserver.gameserver.data.json.ExperienceData;
 import com.l2jserver.gameserver.data.xml.impl.NpcData;
 import com.l2jserver.gameserver.enums.Race;
@@ -86,14 +87,14 @@ public final class Summon extends AbstractEffect
 		summon.setItemConsume(_consumeItem);
 		summon.setItemConsumeInterval(consumeItemInterval);
 		
-		if (summon.getLevel() >= Config.MAX_PET_LEVEL)
+		if (summon.getLevel() >= character().getMaxPetLevel())
 		{
-			summon.getStat().setExp(ExperienceData.getInstance().getExpForLevel(Config.MAX_PET_LEVEL - 1));
-			_log.warning(Summon.class.getSimpleName() + ": (" + summon.getName() + ") NpcID: " + summon.getId() + " has a level above " + Config.MAX_PET_LEVEL + ". Please rectify.");
+			summon.getStat().setExp(ExperienceData.getInstance().getExpForLevel(character().getMaxPetLevel() - 1));
+			_log.warning(Summon.class.getSimpleName() + ": (" + summon.getName() + ") NpcID: " + summon.getId() + " has a level above " + character().getMaxPetLevel() + ". Please rectify.");
 		}
 		else
 		{
-			summon.getStat().setExp(ExperienceData.getInstance().getExpForLevel(summon.getLevel() % Config.MAX_PET_LEVEL));
+			summon.getStat().setExp(ExperienceData.getInstance().getExpForLevel(summon.getLevel() % character().getMaxPetLevel()));
 		}
 		
 		summon.setCurrentHp(summon.getMaxHp());
diff --git a/src/main/java/com/l2jserver/datapack/handlers/itemhandlers/ExtractableItems.java b/src/main/java/com/l2jserver/datapack/handlers/itemhandlers/ExtractableItems.java
index 003f497d72..178d2f9512 100644
--- a/src/main/java/com/l2jserver/datapack/handlers/itemhandlers/ExtractableItems.java
+++ b/src/main/java/com/l2jserver/datapack/handlers/itemhandlers/ExtractableItems.java
@@ -18,10 +18,11 @@
  */
 package com.l2jserver.datapack.handlers.itemhandlers;
 
+import static com.l2jserver.gameserver.config.Configuration.rates;
+
 import java.util.List;
 
 import com.l2jserver.commons.util.Rnd;
-import com.l2jserver.gameserver.config.Config;
 import com.l2jserver.gameserver.handler.IItemHandler;
 import com.l2jserver.gameserver.model.L2ExtractableProduct;
 import com.l2jserver.gameserver.model.actor.L2Playable;
@@ -65,8 +66,8 @@ public class ExtractableItems implements IItemHandler
 		{
 			if (Rnd.get(100000) <= expi.getChance())
 			{
-				final int min = (int) (expi.getMin() * Config.RATE_EXTRACTABLE);
-				final int max = (int) (expi.getMax() * Config.RATE_EXTRACTABLE);
+				final int min = (int) (expi.getMin() * rates().getRateExtractable());
+				final int max = (int) (expi.getMax() * rates().getRateExtractable());
 				
 				int createItemAmount = (max == min) ? min : (Rnd.get((max - min) + 1) + min);
 				if (createItemAmount == 0)
diff --git a/src/main/java/com/l2jserver/datapack/handlers/itemhandlers/Harvester.java b/src/main/java/com/l2jserver/datapack/handlers/itemhandlers/Harvester.java
index 38df1b9370..d793685ea2 100644
--- a/src/main/java/com/l2jserver/datapack/handlers/itemhandlers/Harvester.java
+++ b/src/main/java/com/l2jserver/datapack/handlers/itemhandlers/Harvester.java
@@ -18,7 +18,8 @@
  */
 package com.l2jserver.datapack.handlers.itemhandlers;
 
-import com.l2jserver.gameserver.config.Config;
+import static com.l2jserver.gameserver.config.Configuration.general;
+
 import com.l2jserver.gameserver.handler.IItemHandler;
 import com.l2jserver.gameserver.model.L2Object;
 import com.l2jserver.gameserver.model.actor.L2Character;
@@ -37,7 +38,7 @@ public final class Harvester implements IItemHandler
 	@Override
 	public boolean useItem(L2Playable playable, L2ItemInstance item, boolean forceUse)
 	{
-		if (!Config.ALLOW_MANOR)
+		if (!general().allowManor())
 		{
 			return false;
 		}
diff --git a/src/main/java/com/l2jserver/datapack/handlers/itemhandlers/ManaPotion.java b/src/main/java/com/l2jserver/datapack/handlers/itemhandlers/ManaPotion.java
index 3ca36a3ac5..54bd24e53b 100644
--- a/src/main/java/com/l2jserver/datapack/handlers/itemhandlers/ManaPotion.java
+++ b/src/main/java/com/l2jserver/datapack/handlers/itemhandlers/ManaPotion.java
@@ -18,7 +18,8 @@
  */
 package com.l2jserver.datapack.handlers.itemhandlers;
 
-import com.l2jserver.gameserver.config.Config;
+import static com.l2jserver.gameserver.config.Configuration.customs;
+
 import com.l2jserver.gameserver.model.actor.L2Playable;
 import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
 import com.l2jserver.gameserver.network.SystemMessageId;
@@ -28,7 +29,7 @@ public class ManaPotion extends ItemSkills
 	@Override
 	public boolean useItem(L2Playable playable, L2ItemInstance item, boolean forceUse)
 	{
-		if (!Config.L2JMOD_ENABLE_MANA_POTIONS_SUPPORT)
+		if (!customs().enableManaPotionSupport())
 		{
 			playable.sendPacket(SystemMessageId.NOTHING_HAPPENED);
 			return false;
diff --git a/src/main/java/com/l2jserver/datapack/handlers/itemhandlers/Seed.java b/src/main/java/com/l2jserver/datapack/handlers/itemhandlers/Seed.java
index c034563ac0..88fa9227bc 100644
--- a/src/main/java/com/l2jserver/datapack/handlers/itemhandlers/Seed.java
+++ b/src/main/java/com/l2jserver/datapack/handlers/itemhandlers/Seed.java
@@ -18,7 +18,8 @@
  */
 package com.l2jserver.datapack.handlers.itemhandlers;
 
-import com.l2jserver.gameserver.config.Config;
+import static com.l2jserver.gameserver.config.Configuration.general;
+
 import com.l2jserver.gameserver.handler.IItemHandler;
 import com.l2jserver.gameserver.instancemanager.CastleManorManager;
 import com.l2jserver.gameserver.instancemanager.MapRegionManager;
@@ -41,7 +42,7 @@ public class Seed implements IItemHandler
 	@Override
 	public boolean useItem(L2Playable playable, L2ItemInstance item, boolean forceUse)
 	{
-		if (!Config.ALLOW_MANOR)
+		if (!general().allowManor())
 		{
 			return false;
 		}
diff --git a/src/main/java/com/l2jserver/datapack/handlers/targethandlers/CorpseMob.java b/src/main/java/com/l2jserver/datapack/handlers/targethandlers/CorpseMob.java
index f4bb575d4a..3b41fe40de 100644
--- a/src/main/java/com/l2jserver/datapack/handlers/targethandlers/CorpseMob.java
+++ b/src/main/java/com/l2jserver/datapack/handlers/targethandlers/CorpseMob.java
@@ -18,7 +18,8 @@
  */
 package com.l2jserver.datapack.handlers.targethandlers;
 
-import com.l2jserver.gameserver.config.Config;
+import static com.l2jserver.gameserver.config.Configuration.npc;
+
 import com.l2jserver.gameserver.handler.ITargetTypeHandler;
 import com.l2jserver.gameserver.model.L2Object;
 import com.l2jserver.gameserver.model.actor.L2Attackable;
@@ -48,7 +49,7 @@ public class CorpseMob implements ITargetTypeHandler
 			return EMPTY_TARGET_LIST;
 		}
 		
-		if (skill.hasEffectType(L2EffectType.HP_DRAIN) && ((L2Attackable) target).isOldCorpse(activeChar.getActingPlayer(), Config.CORPSE_CONSUME_SKILL_ALLOWED_TIME_BEFORE_DECAY, true))
+		if (skill.hasEffectType(L2EffectType.HP_DRAIN) && ((L2Attackable) target).isOldCorpse(activeChar.getActingPlayer(), npc().getCorpseConsumeSkillAllowedTimeBeforeDecay(), true))
 		{
 			return EMPTY_TARGET_LIST;
 		}
diff --git a/src/main/java/com/l2jserver/datapack/handlers/targethandlers/PartyNotMe.java b/src/main/java/com/l2jserver/datapack/handlers/targethandlers/PartyNotMe.java
index eaa7f8bc34..c2add0bc57 100644
--- a/src/main/java/com/l2jserver/datapack/handlers/targethandlers/PartyNotMe.java
+++ b/src/main/java/com/l2jserver/datapack/handlers/targethandlers/PartyNotMe.java
@@ -18,10 +18,11 @@
  */
 package com.l2jserver.datapack.handlers.targethandlers;
 
+import static com.l2jserver.gameserver.config.Configuration.character;
+
 import java.util.ArrayList;
 import java.util.List;
 
-import com.l2jserver.gameserver.config.Config;
 import com.l2jserver.gameserver.handler.ITargetTypeHandler;
 import com.l2jserver.gameserver.model.L2Object;
 import com.l2jserver.gameserver.model.actor.L2Character;
@@ -52,7 +53,7 @@ public class PartyNotMe implements ITargetTypeHandler
 				{
 					continue;
 				}
-				else if (!Util.checkIfInRange(Config.ALT_PARTY_RANGE, activeChar, partyMember, true))
+				else if (!Util.checkIfInRange(character().getPartyRange(), activeChar, partyMember, true))
 				{
 					continue;
 				}
diff --git a/src/main/java/com/l2jserver/datapack/handlers/telnethandlers/ReloadHandler.java b/src/main/java/com/l2jserver/datapack/handlers/telnethandlers/ReloadHandler.java
index 11989a9420..e4b6c7f4d1 100644
--- a/src/main/java/com/l2jserver/datapack/handlers/telnethandlers/ReloadHandler.java
+++ b/src/main/java/com/l2jserver/datapack/handlers/telnethandlers/ReloadHandler.java
@@ -18,13 +18,14 @@
  */
 package com.l2jserver.datapack.handlers.telnethandlers;
 
+import static com.l2jserver.gameserver.config.Configuration.server;
+
 import java.io.File;
 import java.io.PrintWriter;
 import java.net.Socket;
 import java.util.StringTokenizer;
 
 import com.l2jserver.gameserver.cache.HtmCache;
-import com.l2jserver.gameserver.config.Config;
 import com.l2jserver.gameserver.data.sql.impl.TeleportLocationTable;
 import com.l2jserver.gameserver.data.xml.impl.MultisellData;
 import com.l2jserver.gameserver.data.xml.impl.NpcData;
@@ -119,7 +120,7 @@ public class ReloadHandler implements ITelnetHandler
 					{
 						String questPath = st.hasMoreTokens() ? st.nextToken() : "";
 						
-						File file = new File(Config.SCRIPT_ROOT, "com/l2jserver/datapack/" + questPath);
+						File file = new File(server().getScriptRoot(), "com/l2jserver/datapack/" + questPath);
 						if (file.isFile())
 						{
 							try
diff --git a/src/main/java/com/l2jserver/datapack/handlers/usercommandhandlers/Time.java b/src/main/java/com/l2jserver/datapack/handlers/usercommandhandlers/Time.java
index 56235a403a..c6ca7277a5 100644
--- a/src/main/java/com/l2jserver/datapack/handlers/usercommandhandlers/Time.java
+++ b/src/main/java/com/l2jserver/datapack/handlers/usercommandhandlers/Time.java
@@ -18,11 +18,12 @@
  */
 package com.l2jserver.datapack.handlers.usercommandhandlers;
 
+import static com.l2jserver.gameserver.config.Configuration.customs;
+
 import java.text.SimpleDateFormat;
 import java.util.Date;
 
 import com.l2jserver.gameserver.GameTimeController;
-import com.l2jserver.gameserver.config.Config;
 import com.l2jserver.gameserver.handler.IUserCommandHandler;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.network.SystemMessageId;
@@ -74,7 +75,7 @@ public class Time implements IUserCommandHandler
 			sm.addString(m);
 		}
 		activeChar.sendPacket(sm);
-		if (Config.L2JMOD_DISPLAY_SERVER_TIME)
+		if (customs().displayServerTime())
 		{
 			activeChar.sendMessage("Server time is " + fmt.format(new Date(System.currentTimeMillis())));
 		}
diff --git a/src/main/java/com/l2jserver/datapack/handlers/usercommandhandlers/Unstuck.java b/src/main/java/com/l2jserver/datapack/handlers/usercommandhandlers/Unstuck.java
index 7fe7fdf248..6c37335fd1 100644
--- a/src/main/java/com/l2jserver/datapack/handlers/usercommandhandlers/Unstuck.java
+++ b/src/main/java/com/l2jserver/datapack/handlers/usercommandhandlers/Unstuck.java
@@ -20,6 +20,7 @@ package com.l2jserver.datapack.handlers.usercommandhandlers;
 
 import static com.l2jserver.gameserver.GameTimeController.MILLIS_IN_TICK;
 import static com.l2jserver.gameserver.ai.CtrlIntention.AI_INTENTION_IDLE;
+import static com.l2jserver.gameserver.config.Configuration.character;
 import static com.l2jserver.gameserver.model.TeleportWhereType.TOWN;
 import static com.l2jserver.gameserver.network.SystemMessageId.THIS_SKILL_IS_NOT_AVAILABLE_FOR_THE_OLYMPIAD_EVENT;
 import static com.l2jserver.gameserver.network.serverpackets.ActionFailed.STATIC_PACKET;
@@ -28,7 +29,6 @@ import static java.util.concurrent.TimeUnit.SECONDS;
 
 import com.l2jserver.gameserver.GameTimeController;
 import com.l2jserver.gameserver.ThreadPoolManager;
-import com.l2jserver.gameserver.config.Config;
 import com.l2jserver.gameserver.handler.IUserCommandHandler;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.entity.TvTEvent;
@@ -84,7 +84,7 @@ public class Unstuck implements IUserCommandHandler
 			return false;
 		}
 		
-		final int unstuckTimer = (activeChar.isGM() ? 1000 : Config.UNSTUCK_INTERVAL * 1000);
+		final int unstuckTimer = (activeChar.isGM() ? 1000 : character().getUnstuckInterval());
 		activeChar.forceIsCasting(GameTimeController.getInstance().getGameTicks() + (unstuckTimer / MILLIS_IN_TICK));
 		
 		if (activeChar.isGM())
@@ -93,19 +93,19 @@ public class Unstuck implements IUserCommandHandler
 			return true;
 		}
 		
-		if (Config.UNSTUCK_INTERVAL == FIVE_MINUTES)
+		if (character().getUnstuckInterval() == FIVE_MINUTES)
 		{
 			activeChar.doCast(ESCAPE_5_MINUTES);
 			return true;
 		}
 		
-		if (Config.UNSTUCK_INTERVAL > 100)
+		if (character().getUnstuckInterval() > 100)
 		{
-			activeChar.sendMessage("You use Escape: " + SECONDS.toMinutes(Config.UNSTUCK_INTERVAL) + " minutes.");
+			activeChar.sendMessage("You use Escape: " + SECONDS.toMinutes(character().getUnstuckInterval()) + " minutes.");
 		}
 		else
 		{
-			activeChar.sendMessage("You use Escape: " + Config.UNSTUCK_INTERVAL + " seconds.");
+			activeChar.sendMessage("You use Escape: " +character().getUnstuckInterval() + " seconds.");
 		}
 		
 		activeChar.getAI().setIntention(AI_INTENTION_IDLE);
diff --git a/src/main/java/com/l2jserver/datapack/handlers/voicedcommandhandlers/Banking.java b/src/main/java/com/l2jserver/datapack/handlers/voicedcommandhandlers/Banking.java
index 1b4b805c95..b4f2908f94 100644
--- a/src/main/java/com/l2jserver/datapack/handlers/voicedcommandhandlers/Banking.java
+++ b/src/main/java/com/l2jserver/datapack/handlers/voicedcommandhandlers/Banking.java
@@ -18,7 +18,8 @@
  */
 package com.l2jserver.datapack.handlers.voicedcommandhandlers;
 
-import com.l2jserver.gameserver.config.Config;
+import static com.l2jserver.gameserver.config.Configuration.customs;
+
 import com.l2jserver.gameserver.handler.IVoicedCommandHandler;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 
@@ -40,40 +41,40 @@ public class Banking implements IVoicedCommandHandler
 	{
 		if (command.equals("bank"))
 		{
-			activeChar.sendMessage(".deposit (" + Config.BANKING_SYSTEM_ADENA + " Adena = " + Config.BANKING_SYSTEM_GOLDBARS + " Goldbar) / .withdraw (" + Config.BANKING_SYSTEM_GOLDBARS + " Goldbar = " + Config.BANKING_SYSTEM_ADENA + " Adena)");
+			activeChar.sendMessage(".deposit (" + customs().getBankingAdenaCount() + " Adena = " + customs().getBankingGoldbarCount() + " Goldbar) / .withdraw (" + customs().getBankingGoldbarCount() + " Goldbar = " + customs().getBankingAdenaCount() + " Adena)");
 		}
 		else if (command.equals("deposit"))
 		{
-			if (activeChar.getInventory().getInventoryItemCount(57, 0) >= Config.BANKING_SYSTEM_ADENA)
+			if (activeChar.getInventory().getInventoryItemCount(57, 0) >= customs().getBankingAdenaCount())
 			{
-				if (!activeChar.reduceAdena("Goldbar", Config.BANKING_SYSTEM_ADENA, activeChar, false))
+				if (!activeChar.reduceAdena("Goldbar", customs().getBankingAdenaCount(), activeChar, false))
 				{
 					return false;
 				}
-				activeChar.getInventory().addItem("Goldbar", 3470, Config.BANKING_SYSTEM_GOLDBARS, activeChar, null);
+				activeChar.getInventory().addItem("Goldbar", 3470, customs().getBankingGoldbarCount(), activeChar, null);
 				activeChar.getInventory().updateDatabase();
-				activeChar.sendMessage("Thank you, you now have " + Config.BANKING_SYSTEM_GOLDBARS + " Goldbar(s), and " + Config.BANKING_SYSTEM_ADENA + " less adena.");
+				activeChar.sendMessage("Thank you, you now have " + customs().getBankingGoldbarCount() + " Goldbar(s), and " + customs().getBankingAdenaCount() + " less adena.");
 			}
 			else
 			{
-				activeChar.sendMessage("You do not have enough Adena to convert to Goldbar(s), you need " + Config.BANKING_SYSTEM_ADENA + " Adena.");
+				activeChar.sendMessage("You do not have enough Adena to convert to Goldbar(s), you need " + customs().getBankingAdenaCount() + " Adena.");
 			}
 		}
 		else if (command.equals("withdraw"))
 		{
-			if (activeChar.getInventory().getInventoryItemCount(3470, 0) >= Config.BANKING_SYSTEM_GOLDBARS)
+			if (activeChar.getInventory().getInventoryItemCount(3470, 0) >= customs().getBankingGoldbarCount())
 			{
-				if (!activeChar.destroyItemByItemId("Adena", 3470, Config.BANKING_SYSTEM_GOLDBARS, activeChar, false))
+				if (!activeChar.destroyItemByItemId("Adena", 3470, customs().getBankingGoldbarCount(), activeChar, false))
 				{
 					return false;
 				}
-				activeChar.getInventory().addAdena("Adena", Config.BANKING_SYSTEM_ADENA, activeChar, null);
+				activeChar.getInventory().addAdena("Adena", customs().getBankingAdenaCount(), activeChar, null);
 				activeChar.getInventory().updateDatabase();
-				activeChar.sendMessage("Thank you, you now have " + Config.BANKING_SYSTEM_ADENA + " Adena, and " + Config.BANKING_SYSTEM_GOLDBARS + " less Goldbar(s).");
+				activeChar.sendMessage("Thank you, you now have " + customs().getBankingAdenaCount() + " Adena, and " + customs().getBankingGoldbarCount() + " less Goldbar(s).");
 			}
 			else
 			{
-				activeChar.sendMessage("You do not have any Goldbars to turn into " + Config.BANKING_SYSTEM_ADENA + " Adena.");
+				activeChar.sendMessage("You do not have any Goldbars to turn into " + customs().getBankingAdenaCount() + " Adena.");
 			}
 		}
 		return true;
diff --git a/src/main/java/com/l2jserver/datapack/handlers/voicedcommandhandlers/Lang.java b/src/main/java/com/l2jserver/datapack/handlers/voicedcommandhandlers/Lang.java
index 13314950df..7333765885 100644
--- a/src/main/java/com/l2jserver/datapack/handlers/voicedcommandhandlers/Lang.java
+++ b/src/main/java/com/l2jserver/datapack/handlers/voicedcommandhandlers/Lang.java
@@ -18,9 +18,10 @@
  */
 package com.l2jserver.datapack.handlers.voicedcommandhandlers;
 
+import static com.l2jserver.gameserver.config.Configuration.customs;
+
 import java.util.StringTokenizer;
 
-import com.l2jserver.gameserver.config.Config;
 import com.l2jserver.gameserver.handler.IVoicedCommandHandler;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.network.serverpackets.NpcHtmlMessage;
@@ -36,7 +37,7 @@ public class Lang implements IVoicedCommandHandler
 	@Override
 	public boolean useVoicedCommand(String command, L2PcInstance activeChar, String params)
 	{
-		if (!Config.L2JMOD_MULTILANG_ENABLE || !Config.L2JMOD_MULTILANG_VOICED_ALLOW)
+		if (!customs().multiLangEnable() || !customs().multiLangVoiceCommand())
 		{
 			return false;
 		}
@@ -45,7 +46,7 @@ public class Lang implements IVoicedCommandHandler
 		if (params == null)
 		{
 			final StringBuilder html = StringUtil.startAppend(100);
-			for (String lang : Config.L2JMOD_MULTILANG_ALLOWED)
+			for (String lang : customs().getMultiLangAllowed())
 			{
 				StringUtil.append(html, "<button value=\"", lang.toUpperCase(), "\" action=\"bypass -h voice .lang ", lang, "\" width=60 height=21 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"><br>");
 			}
diff --git a/src/main/java/com/l2jserver/datapack/handlers/voicedcommandhandlers/Wedding.java b/src/main/java/com/l2jserver/datapack/handlers/voicedcommandhandlers/Wedding.java
index 6b95cb72e6..bf33ea577a 100644
--- a/src/main/java/com/l2jserver/datapack/handlers/voicedcommandhandlers/Wedding.java
+++ b/src/main/java/com/l2jserver/datapack/handlers/voicedcommandhandlers/Wedding.java
@@ -18,6 +18,8 @@
  */
 package com.l2jserver.datapack.handlers.voicedcommandhandlers;
 
+import static com.l2jserver.gameserver.config.Configuration.customs;
+
 import java.sql.Connection;
 import java.sql.PreparedStatement;
 import java.sql.ResultSet;
@@ -29,7 +31,6 @@ import com.l2jserver.gameserver.GameTimeController;
 import com.l2jserver.gameserver.SevenSigns;
 import com.l2jserver.gameserver.ThreadPoolManager;
 import com.l2jserver.gameserver.ai.CtrlIntention;
-import com.l2jserver.gameserver.config.Config;
 import com.l2jserver.gameserver.datatables.SkillData;
 import com.l2jserver.gameserver.enums.PlayerAction;
 import com.l2jserver.gameserver.handler.IVoicedCommandHandler;
@@ -95,14 +96,14 @@ public class Wedding implements IVoicedCommandHandler
 		
 		int _partnerId = activeChar.getPartnerId();
 		int _coupleId = activeChar.getCoupleId();
-		long AdenaAmount = 0;
+		long adenaAmount = 0;
 		
 		if (activeChar.isMarried())
 		{
 			activeChar.sendMessage("You are now divorced.");
 			
-			AdenaAmount = (activeChar.getAdena() / 100) * Config.L2JMOD_WEDDING_DIVORCE_COSTS;
-			activeChar.getInventory().reduceAdena("Wedding", AdenaAmount, activeChar, null);
+			adenaAmount = (activeChar.getAdena() / 100) * customs().getWeddingDivorceCosts();
+			activeChar.getInventory().reduceAdena("Wedding", adenaAmount, activeChar, null);
 			
 		}
 		else
@@ -124,9 +125,9 @@ public class Wedding implements IVoicedCommandHandler
 			}
 			
 			// give adena
-			if (AdenaAmount > 0)
+			if (adenaAmount > 0)
 			{
-				partner.addAdena("WEDDING", AdenaAmount, null, false);
+				partner.addAdena("WEDDING", adenaAmount, null, false);
 			}
 		}
 		CoupleManager.getInstance().deleteCouple(_coupleId);
@@ -148,7 +149,7 @@ public class Wedding implements IVoicedCommandHandler
 		else if (activeChar.getPartnerId() != 0)
 		{
 			activeChar.sendMessage("You are already engaged.");
-			if (Config.L2JMOD_WEDDING_PUNISH_INFIDELITY)
+			if (customs().weddingPunishInfidelity())
 			{
 				activeChar.startAbnormalVisualEffect(true, AbnormalVisualEffect.BIG_HEAD); // give player a Big Head
 				// lets recycle the sevensigns debuffs
@@ -204,7 +205,7 @@ public class Wedding implements IVoicedCommandHandler
 			return false;
 		}
 		
-		if ((ptarget.getAppearance().getSex() == activeChar.getAppearance().getSex()) && !Config.L2JMOD_WEDDING_SAMESEX)
+		if ((ptarget.getAppearance().getSex() == activeChar.getAppearance().getSex()) && !customs().weddingAllowSameSex())
 		{
 			activeChar.sendMessage("Gay marriage is not allowed on this server!");
 			return false;
@@ -456,9 +457,9 @@ public class Wedding implements IVoicedCommandHandler
 			return false;
 		}
 		
-		final int teleportTimer = Config.L2JMOD_WEDDING_TELEPORT_DURATION * 1000;
+		final int teleportTimer = customs().getWeddingTeleportDuration();
 		activeChar.sendMessage("After " + (teleportTimer / 60000) + " min. you will be teleported to your partner.");
-		activeChar.getInventory().reduceAdena("Wedding", Config.L2JMOD_WEDDING_TELEPORT_PRICE, activeChar, null);
+		activeChar.getInventory().reduceAdena("Wedding", customs().getWeddingTeleportPrice(), activeChar, null);
 		
 		activeChar.getAI().setIntention(CtrlIntention.AI_INTENTION_IDLE);
 		// SoE Animation section
diff --git a/src/main/java/com/l2jserver/datapack/hellbound/AI/NPC/Quarry/Quarry.java b/src/main/java/com/l2jserver/datapack/hellbound/AI/NPC/Quarry/Quarry.java
index 2eadd82013..cba876801f 100644
--- a/src/main/java/com/l2jserver/datapack/hellbound/AI/NPC/Quarry/Quarry.java
+++ b/src/main/java/com/l2jserver/datapack/hellbound/AI/NPC/Quarry/Quarry.java
@@ -18,10 +18,11 @@
  */
 package com.l2jserver.datapack.hellbound.AI.NPC.Quarry;
 
+import static com.l2jserver.gameserver.config.Configuration.rates;
+
 import com.l2jserver.datapack.ai.npc.AbstractNpcAI;
 import com.l2jserver.datapack.hellbound.HellboundEngine;
 import com.l2jserver.gameserver.ai.CtrlIntention;
-import com.l2jserver.gameserver.config.Config;
 import com.l2jserver.gameserver.instancemanager.ZoneManager;
 import com.l2jserver.gameserver.model.actor.L2Attackable;
 import com.l2jserver.gameserver.model.actor.L2Character;
@@ -116,7 +117,7 @@ public final class Quarry extends AbstractNpcAI
 						{
 							if (getRandom(10000) < item.getChance())
 							{
-								npc.dropItem((L2PcInstance) npc.getTarget(), item.getId(), (int) (item.getCount() * Config.RATE_QUEST_DROP));
+								npc.dropItem((L2PcInstance) npc.getTarget(), item.getId(), (int) (item.getCount() * rates().getRateQuestDrop()));
 								break;
 							}
 						}
diff --git a/src/main/java/com/l2jserver/datapack/hellbound/AI/NPC/Warpgate/Warpgate.java b/src/main/java/com/l2jserver/datapack/hellbound/AI/NPC/Warpgate/Warpgate.java
index b9e5c0fb55..934f6e9861 100644
--- a/src/main/java/com/l2jserver/datapack/hellbound/AI/NPC/Warpgate/Warpgate.java
+++ b/src/main/java/com/l2jserver/datapack/hellbound/AI/NPC/Warpgate/Warpgate.java
@@ -18,11 +18,12 @@
  */
 package com.l2jserver.datapack.hellbound.AI.NPC.Warpgate;
 
+import static com.l2jserver.gameserver.config.Configuration.general;
+
 import com.l2jserver.datapack.ai.npc.AbstractNpcAI;
 import com.l2jserver.datapack.hellbound.HellboundEngine;
 import com.l2jserver.datapack.quests.Q00130_PathToHellbound.Q00130_PathToHellbound;
 import com.l2jserver.datapack.quests.Q00133_ThatsBloodyHot.Q00133_ThatsBloodyHot;
-import com.l2jserver.gameserver.config.Config;
 import com.l2jserver.gameserver.model.Location;
 import com.l2jserver.gameserver.model.PcCondOverride;
 import com.l2jserver.gameserver.model.actor.L2Character;
@@ -116,7 +117,7 @@ public final class Warpgate extends AbstractNpcAI
 			return false;
 		}
 		
-		if (Config.HELLBOUND_WITHOUT_QUEST)
+		if (general().hellboundWithoutQuest())
 		{
 			return true;
 		}
diff --git a/src/main/java/com/l2jserver/datapack/hellbound/HellboundEngine.java b/src/main/java/com/l2jserver/datapack/hellbound/HellboundEngine.java
index 532ba982f9..4e110335c8 100644
--- a/src/main/java/com/l2jserver/datapack/hellbound/HellboundEngine.java
+++ b/src/main/java/com/l2jserver/datapack/hellbound/HellboundEngine.java
@@ -18,11 +18,12 @@
  */
 package com.l2jserver.datapack.hellbound;
 
+import static com.l2jserver.gameserver.config.Configuration.rates;
+
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import com.l2jserver.datapack.ai.npc.AbstractNpcAI;
-import com.l2jserver.gameserver.config.Config;
 import com.l2jserver.gameserver.data.xml.impl.DoorData;
 import com.l2jserver.gameserver.instancemanager.GlobalVariablesManager;
 import com.l2jserver.gameserver.model.L2Spawn;
@@ -352,7 +353,7 @@ public final class HellboundEngine extends AbstractNpcAI
 		int reward = trust;
 		if (useRates)
 		{
-			reward = (int) (trust * (trust > 0 ? Config.RATE_HB_TRUST_INCREASE : Config.RATE_HB_TRUST_DECREASE));
+			reward = (int) (trust * (trust > 0 ? rates().getRateHellboundTrustIncrease() : rates().getRateHellboundTrustDecrease()));
 		}
 		
 		final int finalTrust = Math.max(getTrust() + reward, _minTrust);
diff --git a/src/main/java/com/l2jserver/datapack/hellbound/HellboundLoader.java b/src/main/java/com/l2jserver/datapack/hellbound/HellboundLoader.java
index c35f22227b..0606c65a15 100644
--- a/src/main/java/com/l2jserver/datapack/hellbound/HellboundLoader.java
+++ b/src/main/java/com/l2jserver/datapack/hellbound/HellboundLoader.java
@@ -18,6 +18,8 @@
  */
 package com.l2jserver.datapack.hellbound;
 
+import static com.l2jserver.gameserver.config.Configuration.customs;
+
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -57,7 +59,6 @@ import com.l2jserver.datapack.hellbound.Instances.RankuFloor.RankuFloor;
 import com.l2jserver.datapack.hellbound.Instances.UrbanArea.UrbanArea;
 import com.l2jserver.datapack.quests.Q00130_PathToHellbound.Q00130_PathToHellbound;
 import com.l2jserver.datapack.quests.Q00133_ThatsBloodyHot.Q00133_ThatsBloodyHot;
-import com.l2jserver.gameserver.config.Config;
 import com.l2jserver.gameserver.handler.AdminCommandHandler;
 import com.l2jserver.gameserver.handler.IAdminCommandHandler;
 import com.l2jserver.gameserver.handler.IVoicedCommandHandler;
@@ -128,7 +129,7 @@ public final class HellboundLoader {
 				final Object instance = script.getDeclaredConstructor().newInstance();
 				if (instance instanceof IAdminCommandHandler) {
 					AdminCommandHandler.getInstance().registerHandler((IAdminCommandHandler) instance);
-				} else if (Config.L2JMOD_HELLBOUND_STATUS && (instance instanceof IVoicedCommandHandler)) {
+				} else if (customs().hellboundStatus() && (instance instanceof IVoicedCommandHandler)) {
 					VoicedCommandHandler.getInstance().registerHandler((IVoicedCommandHandler) instance);
 				}
 			} catch (Exception ex) {
diff --git a/src/main/java/com/l2jserver/datapack/instances/AbstractInstance.java b/src/main/java/com/l2jserver/datapack/instances/AbstractInstance.java
index 129a833da7..96d6694881 100644
--- a/src/main/java/com/l2jserver/datapack/instances/AbstractInstance.java
+++ b/src/main/java/com/l2jserver/datapack/instances/AbstractInstance.java
@@ -18,12 +18,14 @@
  */
 package com.l2jserver.datapack.instances;
 
+import static com.l2jserver.gameserver.config.Configuration.general;
+import static java.util.concurrent.TimeUnit.SECONDS;
+
 import java.text.SimpleDateFormat;
 import java.util.Calendar;
 import java.util.List;
 
 import com.l2jserver.datapack.ai.npc.AbstractNpcAI;
-import com.l2jserver.gameserver.config.Config;
 import com.l2jserver.gameserver.enums.InstanceReenterType;
 import com.l2jserver.gameserver.instancemanager.InstanceManager;
 import com.l2jserver.gameserver.model.L2World;
@@ -92,7 +94,7 @@ public abstract class AbstractInstance extends AbstractNpcAI
 				handleRemoveBuffs(instance);
 			}
 			
-			if (Config.DEBUG_INSTANCES)
+			if (general().instanceDebug())
 			{
 				_log.info("Instance " + inst.getName() + " (" + instance.getTemplateId() + ") has been created by player " + player.getName());
 			}
@@ -101,10 +103,10 @@ public abstract class AbstractInstance extends AbstractNpcAI
 	
 	protected void finishInstance(InstanceWorld world)
 	{
-		finishInstance(world, Config.INSTANCE_FINISH_TIME);
+		finishInstance(world, SECONDS.toMillis(general().getInstanceFinishTime()));
 	}
 	
-	protected void finishInstance(InstanceWorld world, int duration)
+	protected void finishInstance(InstanceWorld world, long duration)
 	{
 		final Instance inst = InstanceManager.getInstance().getInstance(world.getInstanceId());
 		
@@ -227,7 +229,7 @@ public abstract class AbstractInstance extends AbstractNpcAI
 			}
 		}
 		
-		if (Config.DEBUG_INSTANCES)
+		if (general().instanceDebug())
 		{
 			_log.info("Time restrictions has been set for player in instance ID: " + world.getInstanceId() + " (" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(time) + ")");
 		}
diff --git a/src/main/java/com/l2jserver/datapack/instances/ChambersOfDelusion/Chamber.java b/src/main/java/com/l2jserver/datapack/instances/ChambersOfDelusion/Chamber.java
index 1d16518ec0..62c6fbed13 100644
--- a/src/main/java/com/l2jserver/datapack/instances/ChambersOfDelusion/Chamber.java
+++ b/src/main/java/com/l2jserver/datapack/instances/ChambersOfDelusion/Chamber.java
@@ -18,6 +18,8 @@
  */
 package com.l2jserver.datapack.instances.ChambersOfDelusion;
 
+import static com.l2jserver.gameserver.config.Configuration.rates;
+
 import java.util.Calendar;
 import java.util.concurrent.ScheduledFuture;
 import java.util.logging.Level;
@@ -25,7 +27,6 @@ import java.util.logging.Level;
 import com.l2jserver.datapack.instances.AbstractInstance;
 import com.l2jserver.gameserver.ThreadPoolManager;
 import com.l2jserver.gameserver.ai.CtrlIntention;
-import com.l2jserver.gameserver.config.Config;
 import com.l2jserver.gameserver.instancemanager.InstanceManager;
 import com.l2jserver.gameserver.model.L2Object;
 import com.l2jserver.gameserver.model.L2Party;
@@ -534,19 +535,19 @@ public abstract class Chamber extends AbstractInstance
 			{
 				if (getRandom(100) < 33)
 				{
-					npc.dropItem(attacker, ENRIA, (int) (3 * Config.RATE_QUEST_DROP));
+					npc.dropItem(attacker, ENRIA, (int) (3 * rates().getRateQuestDrop()));
 				}
 				if (getRandom(100) < 50)
 				{
-					npc.dropItem(attacker, THONS, (int) (4 * Config.RATE_QUEST_DROP));
+					npc.dropItem(attacker, THONS, (int) (4 * rates().getRateQuestDrop()));
 				}
 				if (getRandom(100) < 50)
 				{
-					npc.dropItem(attacker, ASOFE, (int) (4 * Config.RATE_QUEST_DROP));
+					npc.dropItem(attacker, ASOFE, (int) (4 * rates().getRateQuestDrop()));
 				}
 				if (getRandom(100) < 16)
 				{
-					npc.dropItem(attacker, LEONARD, (int) (2 * Config.RATE_QUEST_DROP));
+					npc.dropItem(attacker, LEONARD, (int) (2 * rates().getRateQuestDrop()));
 				}
 				
 				npc.broadcastEvent("SCE_LUCKY", 2000, null);
diff --git a/src/main/java/com/l2jserver/datapack/instances/CrystalCaverns/CrystalCaverns.java b/src/main/java/com/l2jserver/datapack/instances/CrystalCaverns/CrystalCaverns.java
index e83be15045..c980843c50 100644
--- a/src/main/java/com/l2jserver/datapack/instances/CrystalCaverns/CrystalCaverns.java
+++ b/src/main/java/com/l2jserver/datapack/instances/CrystalCaverns/CrystalCaverns.java
@@ -18,6 +18,8 @@
  */
 package com.l2jserver.datapack.instances.CrystalCaverns;
 
+import static com.l2jserver.gameserver.config.Configuration.rates;
+
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
@@ -28,7 +30,6 @@ import com.l2jserver.datapack.instances.AbstractInstance;
 import com.l2jserver.datapack.quests.Q00131_BirdInACage.Q00131_BirdInACage;
 import com.l2jserver.gameserver.GeoData;
 import com.l2jserver.gameserver.ai.CtrlIntention;
-import com.l2jserver.gameserver.config.Config;
 import com.l2jserver.gameserver.enums.TrapAction;
 import com.l2jserver.gameserver.instancemanager.InstanceManager;
 import com.l2jserver.gameserver.model.L2Object;
@@ -1474,7 +1475,7 @@ public final class CrystalCaverns extends AbstractInstance
 	
 	private void giveRewards(L2PcInstance player, int instanceId, int bossCry, boolean isBaylor)
 	{
-		final int num = Math.max((int) Config.RATE_DEATH_DROP_CHANCE_MULTIPLIER, 1);
+		final int num = Math.max(rates().getCorpseDropChanceMultiplier().intValue(), 1);
 		
 		L2Party party = player.getParty();
 		if (party != null)
diff --git a/src/main/java/com/l2jserver/datapack/instances/FinalEmperialTomb/FinalEmperialTomb.java b/src/main/java/com/l2jserver/datapack/instances/FinalEmperialTomb/FinalEmperialTomb.java
index a2d4223dde..4c8ce581a9 100644
--- a/src/main/java/com/l2jserver/datapack/instances/FinalEmperialTomb/FinalEmperialTomb.java
+++ b/src/main/java/com/l2jserver/datapack/instances/FinalEmperialTomb/FinalEmperialTomb.java
@@ -18,6 +18,8 @@
  */
 package com.l2jserver.datapack.instances.FinalEmperialTomb;
 
+import static com.l2jserver.gameserver.config.Configuration.server;
+
 import java.io.File;
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -40,7 +42,6 @@ import com.l2jserver.datapack.instances.AbstractInstance;
 import com.l2jserver.gameserver.GeoData;
 import com.l2jserver.gameserver.ThreadPoolManager;
 import com.l2jserver.gameserver.ai.CtrlIntention;
-import com.l2jserver.gameserver.config.Config;
 import com.l2jserver.gameserver.enums.InstanceType;
 import com.l2jserver.gameserver.instancemanager.InstanceManager;
 import com.l2jserver.gameserver.model.L2CommandChannel;
@@ -259,7 +260,7 @@ public final class FinalEmperialTomb extends AbstractInstance
 			factory.setValidating(false);
 			factory.setIgnoringComments(true);
 			
-			File file = new File(Config.DATAPACK_ROOT + "/data/spawnZones/final_emperial_tomb.xml");
+			File file = new File(server().getDatapackRoot(), "/data/spawnZones/final_emperial_tomb.xml");
 			if (!file.exists())
 			{
 				_log.severe("[Final Emperial Tomb] Missing final_emperial_tomb.xml. The quest wont work without it!");
diff --git a/src/main/java/com/l2jserver/datapack/quests/AbstractSagaQuest.java b/src/main/java/com/l2jserver/datapack/quests/AbstractSagaQuest.java
index 3f6901f5bc..cd41c8fa51 100644
--- a/src/main/java/com/l2jserver/datapack/quests/AbstractSagaQuest.java
+++ b/src/main/java/com/l2jserver/datapack/quests/AbstractSagaQuest.java
@@ -18,13 +18,14 @@
  */
 package com.l2jserver.datapack.quests;
 
+import static com.l2jserver.gameserver.config.Configuration.character;
+
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
 import com.l2jserver.gameserver.ai.CtrlIntention;
-import com.l2jserver.gameserver.config.Config;
 import com.l2jserver.gameserver.model.L2Object;
 import com.l2jserver.gameserver.model.L2Party;
 import com.l2jserver.gameserver.model.L2World;
@@ -496,7 +497,7 @@ public abstract class AbstractSagaQuest extends Quest {
 					List<QuestState> partyQuestMembers = new ArrayList<>();
 					for (L2PcInstance player1 : party.getMembers()) {
 						QuestState st1 = findQuest(player1);
-						if ((st1 != null) && player1.isInsideRadius(player, Config.ALT_PARTY_RANGE2, false, false)) {
+						if ((st1 != null) && player1.isInsideRadius(player, character().getPartyRange2(), false, false)) {
 							if (st1.isCond(15)) {
 								partyQuestMembers.add(st1);
 							}
diff --git a/src/main/java/com/l2jserver/datapack/quests/Q00050_LanoscosSpecialBait/Q00050_LanoscosSpecialBait.java b/src/main/java/com/l2jserver/datapack/quests/Q00050_LanoscosSpecialBait/Q00050_LanoscosSpecialBait.java
index 28e17cda04..98f36d74a0 100644
--- a/src/main/java/com/l2jserver/datapack/quests/Q00050_LanoscosSpecialBait/Q00050_LanoscosSpecialBait.java
+++ b/src/main/java/com/l2jserver/datapack/quests/Q00050_LanoscosSpecialBait/Q00050_LanoscosSpecialBait.java
@@ -18,7 +18,8 @@
  */
 package com.l2jserver.datapack.quests.Q00050_LanoscosSpecialBait;
 
-import com.l2jserver.gameserver.config.Config;
+import static com.l2jserver.gameserver.config.Configuration.rates;
+
 import com.l2jserver.gameserver.enums.audio.Sound;
 import com.l2jserver.gameserver.model.actor.L2Npc;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
@@ -90,7 +91,7 @@ public class Q00050_LanoscosSpecialBait extends Quest
 		
 		if (st.getQuestItemsCount(ESSENCE_OF_WIND) < 100)
 		{
-			float chance = 33 * Config.RATE_QUEST_DROP;
+			double chance = 33 * rates().getRateQuestDrop();
 			if (getRandom(100) < chance)
 			{
 				st.rewardItems(ESSENCE_OF_WIND, 1);
diff --git a/src/main/java/com/l2jserver/datapack/quests/Q00051_OFullesSpecialBait/Q00051_OFullesSpecialBait.java b/src/main/java/com/l2jserver/datapack/quests/Q00051_OFullesSpecialBait/Q00051_OFullesSpecialBait.java
index ab12254a6d..99741933ce 100644
--- a/src/main/java/com/l2jserver/datapack/quests/Q00051_OFullesSpecialBait/Q00051_OFullesSpecialBait.java
+++ b/src/main/java/com/l2jserver/datapack/quests/Q00051_OFullesSpecialBait/Q00051_OFullesSpecialBait.java
@@ -18,7 +18,8 @@
  */
 package com.l2jserver.datapack.quests.Q00051_OFullesSpecialBait;
 
-import com.l2jserver.gameserver.config.Config;
+import static com.l2jserver.gameserver.config.Configuration.rates;
+
 import com.l2jserver.gameserver.enums.audio.Sound;
 import com.l2jserver.gameserver.model.actor.L2Npc;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
@@ -88,7 +89,7 @@ public class Q00051_OFullesSpecialBait extends Quest
 		final QuestState st = getQuestState(partyMember, false);
 		if (st.getQuestItemsCount(LOST_BAIT) < 100)
 		{
-			float chance = 33 * Config.RATE_QUEST_DROP;
+			double chance = 33 * rates().getRateQuestDrop();
 			if (getRandom(100) < chance)
 			{
 				st.rewardItems(LOST_BAIT, 1);
diff --git a/src/main/java/com/l2jserver/datapack/quests/Q00052_WilliesSpecialBait/Q00052_WilliesSpecialBait.java b/src/main/java/com/l2jserver/datapack/quests/Q00052_WilliesSpecialBait/Q00052_WilliesSpecialBait.java
index badb6d9639..2717047db9 100644
--- a/src/main/java/com/l2jserver/datapack/quests/Q00052_WilliesSpecialBait/Q00052_WilliesSpecialBait.java
+++ b/src/main/java/com/l2jserver/datapack/quests/Q00052_WilliesSpecialBait/Q00052_WilliesSpecialBait.java
@@ -18,7 +18,8 @@
  */
 package com.l2jserver.datapack.quests.Q00052_WilliesSpecialBait;
 
-import com.l2jserver.gameserver.config.Config;
+import static com.l2jserver.gameserver.config.Configuration.rates;
+
 import com.l2jserver.gameserver.enums.audio.Sound;
 import com.l2jserver.gameserver.model.actor.L2Npc;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
@@ -88,7 +89,7 @@ public class Q00052_WilliesSpecialBait extends Quest
 		final QuestState st = getQuestState(partyMember, false);
 		if (st.getQuestItemsCount(TARLK_EYE) < 100)
 		{
-			float chance = 33 * Config.RATE_QUEST_DROP;
+			double chance = 33 * rates().getRateQuestDrop();
 			if (getRandom(100) < chance)
 			{
 				st.rewardItems(TARLK_EYE, 1);
diff --git a/src/main/java/com/l2jserver/datapack/quests/Q00053_LinnaeusSpecialBait/Q00053_LinnaeusSpecialBait.java b/src/main/java/com/l2jserver/datapack/quests/Q00053_LinnaeusSpecialBait/Q00053_LinnaeusSpecialBait.java
index ef28d0efe8..3d7f019776 100644
--- a/src/main/java/com/l2jserver/datapack/quests/Q00053_LinnaeusSpecialBait/Q00053_LinnaeusSpecialBait.java
+++ b/src/main/java/com/l2jserver/datapack/quests/Q00053_LinnaeusSpecialBait/Q00053_LinnaeusSpecialBait.java
@@ -18,7 +18,8 @@
  */
 package com.l2jserver.datapack.quests.Q00053_LinnaeusSpecialBait;
 
-import com.l2jserver.gameserver.config.Config;
+import static com.l2jserver.gameserver.config.Configuration.rates;
+
 import com.l2jserver.gameserver.enums.audio.Sound;
 import com.l2jserver.gameserver.model.actor.L2Npc;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
@@ -93,7 +94,7 @@ public class Q00053_LinnaeusSpecialBait extends Quest
 		
 		if (st.getQuestItemsCount(CRIMSON_DRAKE_HEART) < 100)
 		{
-			float chance = 33 * Config.RATE_QUEST_DROP;
+			double chance = 33 * rates().getRateQuestDrop();
 			if (getRandom(100) < chance)
 			{
 				st.rewardItems(CRIMSON_DRAKE_HEART, 1);
diff --git a/src/main/java/com/l2jserver/datapack/quests/Q00125_TheNameOfEvil1/Q00125_TheNameOfEvil1.java b/src/main/java/com/l2jserver/datapack/quests/Q00125_TheNameOfEvil1/Q00125_TheNameOfEvil1.java
index 5f7ca5675c..7c5c348a00 100644
--- a/src/main/java/com/l2jserver/datapack/quests/Q00125_TheNameOfEvil1/Q00125_TheNameOfEvil1.java
+++ b/src/main/java/com/l2jserver/datapack/quests/Q00125_TheNameOfEvil1/Q00125_TheNameOfEvil1.java
@@ -18,11 +18,12 @@
  */
 package com.l2jserver.datapack.quests.Q00125_TheNameOfEvil1;
 
+import static com.l2jserver.gameserver.config.Configuration.rates;
+
 import java.util.HashMap;
 import java.util.Map;
 
 import com.l2jserver.datapack.quests.Q00124_MeetingTheElroki.Q00124_MeetingTheElroki;
-import com.l2jserver.gameserver.config.Config;
 import com.l2jserver.gameserver.enums.audio.Sound;
 import com.l2jserver.gameserver.model.actor.L2Npc;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
@@ -261,7 +262,7 @@ public class Q00125_TheNameOfEvil1 extends Quest
 		{
 			if (st.getQuestItemsCount(ORNITHOMIMUS_CLAW) < 2)
 			{
-				float chance = ORNITHOMIMUS.get(npcId) * Config.RATE_QUEST_DROP;
+				double chance = ORNITHOMIMUS.get(npcId) * rates().getRateQuestDrop();
 				if (getRandom(1000) < chance)
 				{
 					st.giveItems(ORNITHOMIMUS_CLAW, 1);
@@ -273,7 +274,7 @@ public class Q00125_TheNameOfEvil1 extends Quest
 		{
 			if (st.getQuestItemsCount(DEINONYCHUS_BONE) < 2)
 			{
-				float chance = DEINONYCHUS.get(npcId) * Config.RATE_QUEST_DROP;
+				double chance = DEINONYCHUS.get(npcId) * rates().getRateQuestDrop();
 				if (getRandom(1000) < chance)
 				{
 					st.giveItems(DEINONYCHUS_BONE, 1);
diff --git a/src/main/java/com/l2jserver/datapack/quests/Q00255_Tutorial/Q00255_Tutorial.java b/src/main/java/com/l2jserver/datapack/quests/Q00255_Tutorial/Q00255_Tutorial.java
index d1d488ebc3..ad4f4cacb5 100644
--- a/src/main/java/com/l2jserver/datapack/quests/Q00255_Tutorial/Q00255_Tutorial.java
+++ b/src/main/java/com/l2jserver/datapack/quests/Q00255_Tutorial/Q00255_Tutorial.java
@@ -18,7 +18,8 @@
  */
 package com.l2jserver.datapack.quests.Q00255_Tutorial;
 
-import com.l2jserver.gameserver.config.Config;
+import static com.l2jserver.gameserver.config.Configuration.character;
+
 import com.l2jserver.gameserver.enums.Race;
 import com.l2jserver.gameserver.enums.audio.Sound;
 import com.l2jserver.gameserver.enums.audio.Voice;
@@ -130,7 +131,7 @@ public class Q00255_Tutorial extends Quest
 	public Q00255_Tutorial()
 	{
 		super(255, Q00255_Tutorial.class.getSimpleName(), "Tutorial");
-		if (!Config.DISABLE_TUTORIAL)
+		if (character().tutorial())
 		{
 			setOnEnterWorld(true);
 			registerTutorialEvent();
diff --git a/src/main/java/com/l2jserver/datapack/quests/Q00262_TradeWithTheIvoryTower/Q00262_TradeWithTheIvoryTower.java b/src/main/java/com/l2jserver/datapack/quests/Q00262_TradeWithTheIvoryTower/Q00262_TradeWithTheIvoryTower.java
index b8fdee1ae6..ff2abaac70 100644
--- a/src/main/java/com/l2jserver/datapack/quests/Q00262_TradeWithTheIvoryTower/Q00262_TradeWithTheIvoryTower.java
+++ b/src/main/java/com/l2jserver/datapack/quests/Q00262_TradeWithTheIvoryTower/Q00262_TradeWithTheIvoryTower.java
@@ -18,10 +18,11 @@
  */
 package com.l2jserver.datapack.quests.Q00262_TradeWithTheIvoryTower;
 
+import static com.l2jserver.gameserver.config.Configuration.rates;
+
 import java.util.HashMap;
 import java.util.Map;
 
-import com.l2jserver.gameserver.config.Config;
 import com.l2jserver.gameserver.enums.audio.Sound;
 import com.l2jserver.gameserver.model.actor.L2Npc;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
@@ -82,7 +83,7 @@ public final class Q00262_TradeWithTheIvoryTower extends Quest
 		}
 		
 		final QuestState st = getQuestState(partyMember, false);
-		float chance = (MOBS_SAC.get(npc.getId()) * Config.RATE_QUEST_DROP);
+		double chance = MOBS_SAC.get(npc.getId()) * rates().getRateQuestDrop();
 		if (getRandom(10) < chance)
 		{
 			st.rewardItems(SPORE_SAC, 1);
diff --git a/src/main/java/com/l2jserver/datapack/quests/Q00279_TargetOfOpportunity/Q00279_TargetOfOpportunity.java b/src/main/java/com/l2jserver/datapack/quests/Q00279_TargetOfOpportunity/Q00279_TargetOfOpportunity.java
index a06c275949..71fb861df0 100644
--- a/src/main/java/com/l2jserver/datapack/quests/Q00279_TargetOfOpportunity/Q00279_TargetOfOpportunity.java
+++ b/src/main/java/com/l2jserver/datapack/quests/Q00279_TargetOfOpportunity/Q00279_TargetOfOpportunity.java
@@ -18,9 +18,10 @@
  */
 package com.l2jserver.datapack.quests.Q00279_TargetOfOpportunity;
 
+import static com.l2jserver.gameserver.config.Configuration.rates;
+
 import java.util.Arrays;
 
-import com.l2jserver.gameserver.config.Config;
 import com.l2jserver.gameserver.enums.audio.Sound;
 import com.l2jserver.gameserver.model.actor.L2Npc;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
@@ -101,7 +102,7 @@ public final class Q00279_TargetOfOpportunity extends Quest
 		}
 		
 		final QuestState st = getQuestState(pl, false);
-		if (getRandom(1000) < (int) (311 * Config.RATE_QUEST_DROP))
+		if (getRandom(1000) < (int) (311 * rates().getRateQuestDrop()))
 		{
 			if (!st.hasQuestItems(SEAL_COMPONENTS[idx]))
 			{
diff --git a/src/main/java/com/l2jserver/datapack/quests/Q00290_ThreatRemoval/Q00290_ThreatRemoval.java b/src/main/java/com/l2jserver/datapack/quests/Q00290_ThreatRemoval/Q00290_ThreatRemoval.java
index a21a0b230e..1b6f136193 100644
--- a/src/main/java/com/l2jserver/datapack/quests/Q00290_ThreatRemoval/Q00290_ThreatRemoval.java
+++ b/src/main/java/com/l2jserver/datapack/quests/Q00290_ThreatRemoval/Q00290_ThreatRemoval.java
@@ -18,11 +18,12 @@
  */
 package com.l2jserver.datapack.quests.Q00290_ThreatRemoval;
 
+import static com.l2jserver.gameserver.config.Configuration.rates;
+
 import java.util.HashMap;
 import java.util.Map;
 
 import com.l2jserver.datapack.quests.Q00251_NoSecrets.Q00251_NoSecrets;
-import com.l2jserver.gameserver.config.Config;
 import com.l2jserver.gameserver.enums.audio.Sound;
 import com.l2jserver.gameserver.model.actor.L2Npc;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
@@ -184,7 +185,7 @@ public class Q00290_ThreatRemoval extends Quest
 		
 		final QuestState st = getQuestState(partyMember, false);
 		int npcId = npc.getId();
-		float chance = (MOBS_TAG.get(npcId) * Config.RATE_QUEST_DROP);
+		double chance = MOBS_TAG.get(npcId) * rates().getRateQuestDrop();
 		if (getRandom(1000) < chance)
 		{
 			st.rewardItems(SEL_MAHUM_ID_TAG, 1);
diff --git a/src/main/java/com/l2jserver/datapack/quests/Q00308_ReedFieldMaintenance/Q00308_ReedFieldMaintenance.java b/src/main/java/com/l2jserver/datapack/quests/Q00308_ReedFieldMaintenance/Q00308_ReedFieldMaintenance.java
index b158516a1d..877c6f06f5 100644
--- a/src/main/java/com/l2jserver/datapack/quests/Q00308_ReedFieldMaintenance/Q00308_ReedFieldMaintenance.java
+++ b/src/main/java/com/l2jserver/datapack/quests/Q00308_ReedFieldMaintenance/Q00308_ReedFieldMaintenance.java
@@ -18,12 +18,13 @@
  */
 package com.l2jserver.datapack.quests.Q00308_ReedFieldMaintenance;
 
+import static com.l2jserver.gameserver.config.Configuration.rates;
+
 import java.util.HashMap;
 import java.util.Map;
 
 import com.l2jserver.datapack.quests.Q00238_SuccessFailureOfBusiness.Q00238_SuccessFailureOfBusiness;
 import com.l2jserver.datapack.quests.Q00309_ForAGoodCause.Q00309_ForAGoodCause;
-import com.l2jserver.gameserver.config.Config;
 import com.l2jserver.gameserver.enums.audio.Sound;
 import com.l2jserver.gameserver.model.actor.L2Npc;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
@@ -216,7 +217,7 @@ public class Q00308_ReedFieldMaintenance extends Quest
 		if (partyMember != null)
 		{
 			final QuestState st = getQuestState(partyMember, false);
-			float chance = (MUCROKIAN.get(npc.getId()) * Config.RATE_QUEST_DROP);
+			double chance = MUCROKIAN.get(npc.getId()) * rates().getRateQuestDrop();
 			if (getRandom(1000) < chance)
 			{
 				if (npc.getId() == AWAKENED_MUCROKIAN)
diff --git a/src/main/java/com/l2jserver/datapack/quests/Q00309_ForAGoodCause/Q00309_ForAGoodCause.java b/src/main/java/com/l2jserver/datapack/quests/Q00309_ForAGoodCause/Q00309_ForAGoodCause.java
index 12778890a3..c038b905aa 100644
--- a/src/main/java/com/l2jserver/datapack/quests/Q00309_ForAGoodCause/Q00309_ForAGoodCause.java
+++ b/src/main/java/com/l2jserver/datapack/quests/Q00309_ForAGoodCause/Q00309_ForAGoodCause.java
@@ -18,12 +18,13 @@
  */
 package com.l2jserver.datapack.quests.Q00309_ForAGoodCause;
 
+import static com.l2jserver.gameserver.config.Configuration.rates;
+
 import java.util.HashMap;
 import java.util.Map;
 
 import com.l2jserver.datapack.quests.Q00239_WontYouJoinUs.Q00239_WontYouJoinUs;
 import com.l2jserver.datapack.quests.Q00308_ReedFieldMaintenance.Q00308_ReedFieldMaintenance;
-import com.l2jserver.gameserver.config.Config;
 import com.l2jserver.gameserver.enums.audio.Sound;
 import com.l2jserver.gameserver.model.actor.L2Npc;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
@@ -218,7 +219,7 @@ public class Q00309_ForAGoodCause extends Quest
 		if (partyMember != null)
 		{
 			final QuestState st = getQuestState(partyMember, false);
-			float chance = (MUCROKIANS.get(npc.getId()) * Config.RATE_QUEST_DROP);
+			double chance = MUCROKIANS.get(npc.getId()) * rates().getRateQuestDrop();
 			if (getRandom(1000) < chance)
 			{
 				if (npc.getId() == CORRUPTED_MUCROKIAN)
diff --git a/src/main/java/com/l2jserver/datapack/quests/Q00350_EnhanceYourWeapon/Q00350_EnhanceYourWeapon.java b/src/main/java/com/l2jserver/datapack/quests/Q00350_EnhanceYourWeapon/Q00350_EnhanceYourWeapon.java
index 1b14e4458e..897de24a9e 100644
--- a/src/main/java/com/l2jserver/datapack/quests/Q00350_EnhanceYourWeapon/Q00350_EnhanceYourWeapon.java
+++ b/src/main/java/com/l2jserver/datapack/quests/Q00350_EnhanceYourWeapon/Q00350_EnhanceYourWeapon.java
@@ -18,6 +18,8 @@
  */
 package com.l2jserver.datapack.quests.Q00350_EnhanceYourWeapon;
 
+import static com.l2jserver.gameserver.config.Configuration.server;
+
 import java.io.File;
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -34,7 +36,6 @@ import org.w3c.dom.Document;
 import org.w3c.dom.NamedNodeMap;
 import org.w3c.dom.Node;
 
-import com.l2jserver.gameserver.config.Config;
 import com.l2jserver.gameserver.model.AbsorberInfo;
 import com.l2jserver.gameserver.model.L2Object;
 import com.l2jserver.gameserver.model.actor.L2Attackable;
@@ -415,7 +416,7 @@ public class Q00350_EnhanceYourWeapon extends Quest {
 			factory.setValidating(false);
 			factory.setIgnoringComments(true);
 			
-			File file = new File(Config.DATAPACK_ROOT, "data/levelUpCrystalData.xml");
+			File file = new File(server().getDatapackRoot(), "data/levelUpCrystalData.xml");
 			if (!file.exists()) {
 				LOG.error("Missing levelUpCrystalData.xml. The quest wont work without it!");
 				return;
diff --git a/src/main/java/com/l2jserver/datapack/quests/Q00610_MagicalPowerOfWaterPart2/Q00610_MagicalPowerOfWaterPart2.java b/src/main/java/com/l2jserver/datapack/quests/Q00610_MagicalPowerOfWaterPart2/Q00610_MagicalPowerOfWaterPart2.java
index 7643052826..e8f01a5feb 100644
--- a/src/main/java/com/l2jserver/datapack/quests/Q00610_MagicalPowerOfWaterPart2/Q00610_MagicalPowerOfWaterPart2.java
+++ b/src/main/java/com/l2jserver/datapack/quests/Q00610_MagicalPowerOfWaterPart2/Q00610_MagicalPowerOfWaterPart2.java
@@ -18,7 +18,8 @@
  */
 package com.l2jserver.datapack.quests.Q00610_MagicalPowerOfWaterPart2;
 
-import com.l2jserver.gameserver.config.Config;
+import static com.l2jserver.gameserver.config.Configuration.npc;
+
 import com.l2jserver.gameserver.model.actor.L2Npc;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.quest.Quest;
@@ -144,8 +145,8 @@ public class Q00610_MagicalPowerOfWaterPart2 extends Quest
 	@Override
 	public String onKill(L2Npc npc, L2PcInstance killer, boolean isSummon)
 	{
-		final int respawnMinDelay = (int) (43200000 * Config.RAID_MIN_RESPAWN_MULTIPLIER);
-		final int respawnMaxDelay = (int) (129600000 * Config.RAID_MAX_RESPAWN_MULTIPLIER);
+		final int respawnMinDelay = (int) (43200000 * npc().getRaidMinRespawnMultiplier());
+		final int respawnMaxDelay = (int) (129600000 * npc().getRaidMaxRespawnMultiplier());
 		final int respawnDelay = getRandom(respawnMinDelay, respawnMaxDelay);
 		cancelQuestTimer("despawn_ashutar", npc, null);
 		saveGlobalQuestVar("Q00610_respawn", String.valueOf(System.currentTimeMillis() + respawnDelay));
diff --git a/src/main/java/com/l2jserver/datapack/quests/Q00616_MagicalPowerOfFirePart2/Q00616_MagicalPowerOfFirePart2.java b/src/main/java/com/l2jserver/datapack/quests/Q00616_MagicalPowerOfFirePart2/Q00616_MagicalPowerOfFirePart2.java
index 65ec1e6ec5..1dda29985b 100644
--- a/src/main/java/com/l2jserver/datapack/quests/Q00616_MagicalPowerOfFirePart2/Q00616_MagicalPowerOfFirePart2.java
+++ b/src/main/java/com/l2jserver/datapack/quests/Q00616_MagicalPowerOfFirePart2/Q00616_MagicalPowerOfFirePart2.java
@@ -18,7 +18,8 @@
  */
 package com.l2jserver.datapack.quests.Q00616_MagicalPowerOfFirePart2;
 
-import com.l2jserver.gameserver.config.Config;
+import static com.l2jserver.gameserver.config.Configuration.npc;
+
 import com.l2jserver.gameserver.model.actor.L2Npc;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.quest.Quest;
@@ -144,8 +145,8 @@ public class Q00616_MagicalPowerOfFirePart2 extends Quest
 	@Override
 	public String onKill(L2Npc npc, L2PcInstance killer, boolean isSummon)
 	{
-		final int respawnMinDelay = (int) (43200000 * Config.RAID_MIN_RESPAWN_MULTIPLIER);
-		final int respawnMaxDelay = (int) (129600000 * Config.RAID_MAX_RESPAWN_MULTIPLIER);
+		final int respawnMinDelay = (int) (43200000 * npc().getRaidMinRespawnMultiplier());
+		final int respawnMaxDelay = (int) (129600000 * npc().getRaidMaxRespawnMultiplier());
 		final int respawnDelay = getRandom(respawnMinDelay, respawnMaxDelay);
 		cancelQuestTimer("despawn_nastron", npc, null);
 		saveGlobalQuestVar("Q00616_respawn", String.valueOf(System.currentTimeMillis() + respawnDelay));
diff --git a/src/main/java/com/l2jserver/datapack/quests/Q00626_ADarkTwilight/Q00626_ADarkTwilight.java b/src/main/java/com/l2jserver/datapack/quests/Q00626_ADarkTwilight/Q00626_ADarkTwilight.java
index 8388ea4321..1b242c7222 100644
--- a/src/main/java/com/l2jserver/datapack/quests/Q00626_ADarkTwilight/Q00626_ADarkTwilight.java
+++ b/src/main/java/com/l2jserver/datapack/quests/Q00626_ADarkTwilight/Q00626_ADarkTwilight.java
@@ -18,10 +18,11 @@
  */
 package com.l2jserver.datapack.quests.Q00626_ADarkTwilight;
 
+import static com.l2jserver.gameserver.config.Configuration.rates;
+
 import java.util.HashMap;
 import java.util.Map;
 
-import com.l2jserver.gameserver.config.Config;
 import com.l2jserver.gameserver.enums.audio.Sound;
 import com.l2jserver.gameserver.model.actor.L2Npc;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
@@ -124,7 +125,7 @@ public class Q00626_ADarkTwilight extends Quest
 		if (partyMember != null)
 		{
 			final QuestState st = getQuestState(partyMember, false);
-			final float chance = (MONSTERS.get(npc.getId()) * Config.RATE_QUEST_DROP);
+			final double chance = MONSTERS.get(npc.getId()) * rates().getRateQuestDrop();
 			if (getRandom(1000) < chance)
 			{
 				st.giveItems(BLOOD_OF_SAINT, 1);
diff --git a/src/main/java/com/l2jserver/datapack/quests/Q00627_HeartInSearchOfPower/Q00627_HeartInSearchOfPower.java b/src/main/java/com/l2jserver/datapack/quests/Q00627_HeartInSearchOfPower/Q00627_HeartInSearchOfPower.java
index a21dd64f5c..09eca98798 100644
--- a/src/main/java/com/l2jserver/datapack/quests/Q00627_HeartInSearchOfPower/Q00627_HeartInSearchOfPower.java
+++ b/src/main/java/com/l2jserver/datapack/quests/Q00627_HeartInSearchOfPower/Q00627_HeartInSearchOfPower.java
@@ -18,10 +18,11 @@
  */
 package com.l2jserver.datapack.quests.Q00627_HeartInSearchOfPower;
 
+import static com.l2jserver.gameserver.config.Configuration.rates;
+
 import java.util.HashMap;
 import java.util.Map;
 
-import com.l2jserver.gameserver.config.Config;
 import com.l2jserver.gameserver.enums.audio.Sound;
 import com.l2jserver.gameserver.model.actor.L2Npc;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
@@ -164,7 +165,7 @@ public class Q00627_HeartInSearchOfPower extends Quest
 		if (partyMember != null)
 		{
 			final QuestState st = getQuestState(partyMember, false);
-			final float chance = (MONSTERS.get(npc.getId()) * Config.RATE_QUEST_DROP);
+			final double chance = MONSTERS.get(npc.getId()) * rates().getRateQuestDrop();
 			if (getRandom(1000) < chance)
 			{
 				st.giveItems(BEAD_OF_OBEDIENCE, 1);
diff --git a/src/main/java/com/l2jserver/datapack/quests/Q00637_ThroughOnceMore/Q00637_ThroughOnceMore.java b/src/main/java/com/l2jserver/datapack/quests/Q00637_ThroughOnceMore/Q00637_ThroughOnceMore.java
index 2418600f13..31d4a3ca52 100644
--- a/src/main/java/com/l2jserver/datapack/quests/Q00637_ThroughOnceMore/Q00637_ThroughOnceMore.java
+++ b/src/main/java/com/l2jserver/datapack/quests/Q00637_ThroughOnceMore/Q00637_ThroughOnceMore.java
@@ -18,7 +18,8 @@
  */
 package com.l2jserver.datapack.quests.Q00637_ThroughOnceMore;
 
-import com.l2jserver.gameserver.config.Config;
+import static com.l2jserver.gameserver.config.Configuration.rates;
+
 import com.l2jserver.gameserver.enums.audio.Sound;
 import com.l2jserver.gameserver.model.actor.L2Npc;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
@@ -85,7 +86,7 @@ public final class Q00637_ThroughOnceMore extends Quest
 			final long count = st.getQuestItemsCount(NECRO_HEART);
 			if (count < 10)
 			{
-				int chance = (int) (Config.RATE_QUEST_DROP * DROP_CHANCE);
+				int chance = (int) (rates().getRateQuestDrop() * DROP_CHANCE);
 				int numItems = chance / 100;
 				chance = chance % 100;
 				if (getRandom(100) < chance)
diff --git a/src/main/java/com/l2jserver/datapack/quests/Q00643_RiseAndFallOfTheElrokiTribe/Q00643_RiseAndFallOfTheElrokiTribe.java b/src/main/java/com/l2jserver/datapack/quests/Q00643_RiseAndFallOfTheElrokiTribe/Q00643_RiseAndFallOfTheElrokiTribe.java
index 1ebb73b61f..e1829ade85 100644
--- a/src/main/java/com/l2jserver/datapack/quests/Q00643_RiseAndFallOfTheElrokiTribe/Q00643_RiseAndFallOfTheElrokiTribe.java
+++ b/src/main/java/com/l2jserver/datapack/quests/Q00643_RiseAndFallOfTheElrokiTribe/Q00643_RiseAndFallOfTheElrokiTribe.java
@@ -18,7 +18,8 @@
  */
 package com.l2jserver.datapack.quests.Q00643_RiseAndFallOfTheElrokiTribe;
 
-import com.l2jserver.gameserver.config.Config;
+import static com.l2jserver.gameserver.config.Configuration.rates;
+
 import com.l2jserver.gameserver.enums.audio.Sound;
 import com.l2jserver.gameserver.model.actor.L2Npc;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
@@ -195,7 +196,7 @@ public class Q00643_RiseAndFallOfTheElrokiTribe extends Quest
 		
 		if (Util.contains(MOBS1, npcId))
 		{
-			float chance = (CHANCE_MOBS1 * Config.RATE_QUEST_DROP);
+			double chance = CHANCE_MOBS1 * rates().getRateQuestDrop();
 			if (getRandom(1000) < chance)
 			{
 				st.rewardItems(BONES_OF_A_PLAINS_DINOSAUR, 2);
@@ -209,7 +210,7 @@ public class Q00643_RiseAndFallOfTheElrokiTribe extends Quest
 		
 		if (Util.contains(MOBS2, npcId))
 		{
-			float chance = (CHANCE_MOBS2 * Config.RATE_QUEST_DROP);
+			double chance = CHANCE_MOBS2 * rates().getRateQuestDrop();
 			if (getRandom(1000) < chance)
 			{
 				st.rewardItems(BONES_OF_A_PLAINS_DINOSAUR, 1);
@@ -219,7 +220,7 @@ public class Q00643_RiseAndFallOfTheElrokiTribe extends Quest
 		
 		if (npcId == DEINONYCHUS)
 		{
-			float chance = (CHANCE_DEINO * Config.RATE_QUEST_DROP);
+			double chance = CHANCE_DEINO * rates().getRateQuestDrop();
 			if (getRandom(1000) < chance)
 			{
 				st.rewardItems(BONES_OF_A_PLAINS_DINOSAUR, 1);
diff --git a/src/main/java/com/l2jserver/datapack/quests/Q00688_DefeatTheElrokianRaiders/Q00688_DefeatTheElrokianRaiders.java b/src/main/java/com/l2jserver/datapack/quests/Q00688_DefeatTheElrokianRaiders/Q00688_DefeatTheElrokianRaiders.java
index 60140c35c9..82fe30768b 100644
--- a/src/main/java/com/l2jserver/datapack/quests/Q00688_DefeatTheElrokianRaiders/Q00688_DefeatTheElrokianRaiders.java
+++ b/src/main/java/com/l2jserver/datapack/quests/Q00688_DefeatTheElrokianRaiders/Q00688_DefeatTheElrokianRaiders.java
@@ -18,7 +18,8 @@
  */
 package com.l2jserver.datapack.quests.Q00688_DefeatTheElrokianRaiders;
 
-import com.l2jserver.gameserver.config.Config;
+import static com.l2jserver.gameserver.config.Configuration.rates;
+
 import com.l2jserver.gameserver.enums.audio.Sound;
 import com.l2jserver.gameserver.model.actor.L2Npc;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
@@ -131,7 +132,7 @@ public class Q00688_DefeatTheElrokianRaiders extends Quest
 		
 		final QuestState st = getQuestState(partyMember, false);
 		
-		float chance = (DROP_RATE * Config.RATE_QUEST_DROP);
+		double chance = (DROP_RATE * rates().getRateQuestDrop());
 		if (getRandom(1000) < chance)
 		{
 			st.rewardItems(DINOSAUR_FANG_NECKLACE, 1);
diff --git a/src/main/java/com/l2jserver/datapack/quests/Q00690_JudesRequest/Q00690_JudesRequest.java b/src/main/java/com/l2jserver/datapack/quests/Q00690_JudesRequest/Q00690_JudesRequest.java
index fe7a4f2197..406a2af805 100644
--- a/src/main/java/com/l2jserver/datapack/quests/Q00690_JudesRequest/Q00690_JudesRequest.java
+++ b/src/main/java/com/l2jserver/datapack/quests/Q00690_JudesRequest/Q00690_JudesRequest.java
@@ -18,7 +18,8 @@
  */
 package com.l2jserver.datapack.quests.Q00690_JudesRequest;
 
-import com.l2jserver.gameserver.config.Config;
+import static com.l2jserver.gameserver.config.Configuration.rates;
+
 import com.l2jserver.gameserver.enums.audio.Sound;
 import com.l2jserver.gameserver.model.actor.L2Npc;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
@@ -144,7 +145,7 @@ public class Q00690_JudesRequest extends Quest
 			chance = 246;
 		}
 		// Apply the quest drop rate:
-		chance *= Config.RATE_QUEST_DROP;
+		chance *= rates().getRateQuestDrop();
 		// Normalize
 		chance %= 1000;
 		
diff --git a/src/main/java/com/l2jserver/datapack/quests/Q00691_MatrasSuspiciousRequest/Q00691_MatrasSuspiciousRequest.java b/src/main/java/com/l2jserver/datapack/quests/Q00691_MatrasSuspiciousRequest/Q00691_MatrasSuspiciousRequest.java
index 43434c2580..386d781a30 100644
--- a/src/main/java/com/l2jserver/datapack/quests/Q00691_MatrasSuspiciousRequest/Q00691_MatrasSuspiciousRequest.java
+++ b/src/main/java/com/l2jserver/datapack/quests/Q00691_MatrasSuspiciousRequest/Q00691_MatrasSuspiciousRequest.java
@@ -18,10 +18,11 @@
  */
 package com.l2jserver.datapack.quests.Q00691_MatrasSuspiciousRequest;
 
+import static com.l2jserver.gameserver.config.Configuration.rates;
+
 import java.util.HashMap;
 import java.util.Map;
 
-import com.l2jserver.gameserver.config.Config;
 import com.l2jserver.gameserver.enums.audio.Sound;
 import com.l2jserver.gameserver.model.actor.L2Npc;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
@@ -135,7 +136,7 @@ public final class Q00691_MatrasSuspiciousRequest extends Quest
 		}
 		
 		final QuestState st = getQuestState(pl, false);
-		int chance = (int) (Config.RATE_QUEST_DROP * REWARD_CHANCES.get(npc.getId()));
+		int chance = (int) (rates().getRateQuestDrop() * REWARD_CHANCES.get(npc.getId()));
 		int numItems = Math.max((chance / 1000), 1);
 		chance = chance % 1000;
 		if (getRandom(1000) <= chance)
diff --git a/src/main/java/com/l2jserver/datapack/quests/Q00692_HowtoOpposeEvil/Q00692_HowtoOpposeEvil.java b/src/main/java/com/l2jserver/datapack/quests/Q00692_HowtoOpposeEvil/Q00692_HowtoOpposeEvil.java
index 7d557197d4..3e030a549f 100644
--- a/src/main/java/com/l2jserver/datapack/quests/Q00692_HowtoOpposeEvil/Q00692_HowtoOpposeEvil.java
+++ b/src/main/java/com/l2jserver/datapack/quests/Q00692_HowtoOpposeEvil/Q00692_HowtoOpposeEvil.java
@@ -18,10 +18,11 @@
  */
 package com.l2jserver.datapack.quests.Q00692_HowtoOpposeEvil;
 
+import static com.l2jserver.gameserver.config.Configuration.rates;
+
 import java.util.HashMap;
 import java.util.Map;
 
-import com.l2jserver.gameserver.config.Config;
 import com.l2jserver.gameserver.enums.audio.Sound;
 import com.l2jserver.gameserver.model.actor.L2Npc;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
@@ -183,7 +184,7 @@ public final class Q00692_HowtoOpposeEvil extends Quest
 		final int npcId = npc.getId();
 		if ((st != null) && QUEST_MOBS.containsKey(npcId))
 		{
-			int chance = (int) (QUEST_MOBS.get(npcId).getCount() * Config.RATE_QUEST_DROP);
+			int chance = (int) (QUEST_MOBS.get(npcId).getCount() * rates().getRateQuestDrop());
 			int numItems = chance / 1000;
 			chance = chance % 1000;
 			if (getRandom(1000) < chance)
diff --git a/src/main/java/com/l2jserver/datapack/quests/Q10272_LightFragment/Q10272_LightFragment.java b/src/main/java/com/l2jserver/datapack/quests/Q10272_LightFragment/Q10272_LightFragment.java
index 901df5f553..a5ec73dcac 100644
--- a/src/main/java/com/l2jserver/datapack/quests/Q10272_LightFragment/Q10272_LightFragment.java
+++ b/src/main/java/com/l2jserver/datapack/quests/Q10272_LightFragment/Q10272_LightFragment.java
@@ -18,8 +18,9 @@
  */
 package com.l2jserver.datapack.quests.Q10272_LightFragment;
 
+import static com.l2jserver.gameserver.config.Configuration.rates;
+
 import com.l2jserver.datapack.quests.Q10271_TheEnvelopingDarkness.Q10271_TheEnvelopingDarkness;
-import com.l2jserver.gameserver.config.Config;
 import com.l2jserver.gameserver.enums.audio.Sound;
 import com.l2jserver.gameserver.model.actor.L2Npc;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
@@ -148,7 +149,7 @@ public class Q10272_LightFragment extends Quest
 			final long count = st.getQuestItemsCount(FRAGMENT_POWDER);
 			if (count < 100)
 			{
-				int chance = (int) (Config.RATE_QUEST_DROP * DROP_CHANCE);
+				int chance = (int) (rates().getRateQuestDrop() * DROP_CHANCE);
 				int numItems = chance / 100;
 				chance = chance % 100;
 				if (getRandom(100) < chance)
diff --git a/src/test/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminReloadTest.java b/src/test/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminReloadTest.java
new file mode 100644
index 0000000000..757b23e5c4
--- /dev/null
+++ b/src/test/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminReloadTest.java
@@ -0,0 +1,37 @@
+package com.l2jserver.datapack.handlers.admincommandhandlers;
+
+import static com.l2jserver.gameserver.config.Configuration.general;
+import static org.testng.Assert.assertFalse;
+
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+
+import com.l2jserver.gameserver.handler.IAdminCommandHandler;
+import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+
+/**
+ * Admin Reload test.
+ * @author Zoey76
+ * @version 2.6.1.0
+ */
+public class AdminReloadTest {
+	
+	private final IAdminCommandHandler cmd = new AdminReload();
+	
+	@Mock
+	private L2PcInstance activeChar;
+	
+	@BeforeMethod
+	public void setup() {
+		MockitoAnnotations.initMocks(this);
+	}
+	
+	@Test
+	public void useAdminCommandTest() {
+		general().setProperty("EverybodyHasAdminRights", "true");
+		cmd.useAdminCommand("admin_reload config general", activeChar);
+		assertFalse(general().everybodyHasAdminRights());
+	}
+}
-- 
GitLab