diff --git a/src/main/java/re/forestier/edu/rpg/Adventurer.java b/src/main/java/re/forestier/edu/rpg/Adventurer.java
index 6920cf84cc098d05beb189afe2a07c76edbff5de..b8efe079ec42b512fc51895276e34029fa97ef45 100644
--- a/src/main/java/re/forestier/edu/rpg/Adventurer.java
+++ b/src/main/java/re/forestier/edu/rpg/Adventurer.java
@@ -1,7 +1,8 @@
 package re.forestier.edu.rpg;
 
 import java.util.ArrayList;
-import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
 public class Adventurer extends player {
 
@@ -15,37 +16,19 @@ public class Adventurer extends player {
     @Override
     protected void levelUp() {
         super.levelUp();
+        final List<Map<String, Integer>> ADVENTURER_ABILITIES = List.of(
+                Map.of("INT", 1, "DEF", 1, "ATK", 3, "CHA", 2),     // Niveau 1
+                Map.of("INT", 2, "CHA", 3),                                        // Niveau 2
+                Map.of("ATK", 5, "ALC", 1),                                       // Niveau 3
+                Map.of("DEF", 3),                                                        // Niveau 4
+                Map.of("VIS", 1, "DEF", 4)                                      // Niveau 5
+        );
+
+        if (getLevel() <= ADVENTURER_ABILITIES.size()) {
+            Map<String, Integer> newAbilities = ADVENTURER_ABILITIES.get(getLevel() - 1);
+            abilities.putAll(newAbilities); // Remplace ou ajoute les stats
 
-        HashMap<Integer, HashMap<String, Integer>> adventurerMap = new HashMap<>();
-        HashMap<String, Integer> adventurerLevel1 = new HashMap<>();
-        adventurerLevel1.put("INT", 1);
-        adventurerLevel1.put("DEF", 1);
-        adventurerLevel1.put("ATK", 3);
-        adventurerLevel1.put("CHA", 2);
-        adventurerMap.put(1, adventurerLevel1);
-
-        HashMap<String, Integer> adventurerLevel2 = new HashMap<>();
-        adventurerLevel2.put("INT", 2);
-        adventurerLevel2.put("CHA", 3);
-        adventurerMap.put(2, adventurerLevel2);
-
-        HashMap<String, Integer> adventurerLevel3 = new HashMap<>();
-        adventurerLevel3.put("ATK", 5);
-        adventurerLevel3.put("ALC", 1);
-        adventurerMap.put(3, adventurerLevel3);
-
-        HashMap<String, Integer> adventurerLevel4 = new HashMap<>();
-        adventurerLevel4.put("DEF", 3);
-        adventurerMap.put(4, adventurerLevel4);
-
-        HashMap<String, Integer> adventurerLevel5 = new HashMap<>();
-        adventurerLevel5.put("VIS", 1);
-        adventurerLevel5.put("DEF", 4);
-        adventurerMap.put(5, adventurerLevel5);
-
-
-        HashMap<String, Integer> newAbilities = adventurerMap.get(getLevel());
-        newAbilities.forEach((ability, level) -> abilities.put(ability, newAbilities.get(ability)));
+        }
     }
 
     @Override
diff --git a/src/main/java/re/forestier/edu/rpg/Archer.java b/src/main/java/re/forestier/edu/rpg/Archer.java
index 08e6e1f11a7297efff4f6d3b1cdae4488adea136..49809760984f024779ddee804e4dbb692ff3a9d6 100644
--- a/src/main/java/re/forestier/edu/rpg/Archer.java
+++ b/src/main/java/re/forestier/edu/rpg/Archer.java
@@ -1,7 +1,8 @@
 package re.forestier.edu.rpg;
 
 import java.util.ArrayList;
-import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
 public class Archer extends player {
 
@@ -13,34 +14,19 @@ public class Archer extends player {
     @Override
     protected void levelUp() {
         super.levelUp();
-        HashMap<Integer, HashMap<String, Integer>> archerMap = new HashMap<>();
-        HashMap<String, Integer> archerLevel1 = new HashMap<>();
-        archerLevel1.put("INT", 1);
-        archerLevel1.put("ATK", 3);
-        archerLevel1.put("CHA", 1);
-        archerLevel1.put("VIS", 3);
-        archerMap.put(1, archerLevel1);
-
-        HashMap<String, Integer> archerLevel2 = new HashMap<>();
-        archerLevel2.put("DEF", 1);
-        archerLevel2.put("CHA", 2);
-        archerMap.put(2, archerLevel2);
-
-        HashMap<String, Integer> archerLevel3 = new HashMap<>();
-        archerLevel3.put("ATK", 3);
-        archerMap.put(3, archerLevel3);
-
-        HashMap<String, Integer> archerLevel4 = new HashMap<>();
-        archerLevel4.put("DEF", 2);
-        archerMap.put(4, archerLevel4);
-
-        HashMap<String, Integer> archerLevel5 = new HashMap<>();
-        archerLevel5.put("ATK", 4);
-        archerMap.put(5, archerLevel5);
-
-        HashMap<String, Integer> newAbilities = archerMap.get(getLevel());
-        newAbilities.forEach((ability, level) -> abilities.put(ability, newAbilities.get(ability)));
+        final List<Map<String, Integer>> ARCHER_ABILITIES = List.of(
+                Map.of("INT", 1, "ATK", 3, "CHA", 1, "VIS", 3),  // Niveau 1
+                Map.of("DEF", 1, "CHA", 2),                                     // Niveau 2
+                Map.of("ATK", 3),                                                      // Niveau 3
+                Map.of("DEF", 2),                                                     // Niveau 4
+                Map.of("ATK", 4)                                                     // Niveau 5
+        );
+
+        if (level <= ARCHER_ABILITIES.size()) {
+            Map<String, Integer> newAbilities = ARCHER_ABILITIES.get(level - 1);
+            abilities.putAll(newAbilities); // Remplace ou ajoute les stats
 
+        }
     }
 
     @Override
diff --git a/src/main/java/re/forestier/edu/rpg/Dwarf.java b/src/main/java/re/forestier/edu/rpg/Dwarf.java
index 2e867ba13fe474b2d07b49af405ce9a06e2c25f7..cd5fd026760d8dd137fdf0e5f7062fa1f2c781ae 100644
--- a/src/main/java/re/forestier/edu/rpg/Dwarf.java
+++ b/src/main/java/re/forestier/edu/rpg/Dwarf.java
@@ -1,7 +1,8 @@
 package re.forestier.edu.rpg;
 
 import java.util.ArrayList;
-import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
 public class Dwarf extends player{
 
@@ -13,33 +14,19 @@ public class Dwarf extends player{
     @Override
     protected void levelUp() {
         super.levelUp();
-        HashMap<Integer, HashMap<String, Integer>> dwarf = new HashMap<>();
-        HashMap<String, Integer> dwarfLevel1 = new HashMap<>();
-        dwarfLevel1.put("ALC", 4);
-        dwarfLevel1.put("INT", 1);
-        dwarfLevel1.put("ATK", 3);
-        dwarf.put(1, dwarfLevel1);
-
-        HashMap<String, Integer> dwarfLevel2 = new HashMap<>();
-        dwarfLevel2.put("DEF", 1);
-        dwarfLevel2.put("ALC", 5);
-        dwarf.put(2, dwarfLevel2);
-
-        HashMap<String, Integer> dwarfLevel3 = new HashMap<>();
-        dwarfLevel3.put("ATK", 4);
-        dwarf.put(3, dwarfLevel3);
-
-        HashMap<String, Integer> dwarfLevel4 = new HashMap<>();
-        dwarfLevel4.put("DEF", 2);
-        dwarf.put(4, dwarfLevel4);
-
-        HashMap<String, Integer> dwarfLevel5 = new HashMap<>();
-        dwarfLevel5.put("CHA", 1);
-        dwarf.put(5, dwarfLevel5);
-
-        HashMap<String, Integer> newAbilities = dwarf.get(getLevel());
-        newAbilities.forEach((ability, level) -> abilities.put(ability, newAbilities.get(ability)));
+        final List<Map<String, Integer>> DWARF_ABILITIES = List.of(
+                Map.of("ALC", 4, "INT", 1, "ATK", 3),  // Niveau 1
+                Map.of("DEF", 1, "ALC", 5),                   // Niveau 2
+                Map.of("ATK", 4),                                    // Niveau 3
+                Map.of("DEF", 2),                                   // Niveau 4
+                Map.of("CHA", 1)                                   // Niveau 5
+        );
+
+        if (level <= DWARF_ABILITIES.size()) {
+            Map<String, Integer> newAbilities = DWARF_ABILITIES.get(level - 1);
+            abilities.putAll(newAbilities); // Remplace ou ajoute les stats
 
+        }
     }
 
 
diff --git a/src/main/java/re/forestier/edu/rpg/player.java b/src/main/java/re/forestier/edu/rpg/player.java
index 11026eff2b52cbf497b01c36e52c921ba513ffb9..205b00c7b7d3e3a4cd85bf36c4c105bd4331cabb 100644
--- a/src/main/java/re/forestier/edu/rpg/player.java
+++ b/src/main/java/re/forestier/edu/rpg/player.java
@@ -54,21 +54,21 @@ public abstract class player {
         while (xp >= lvlXp) {
             level++;
             lvlXp = ((level) * 10 + Math.floorDiv(((level + 1) * (lvlXp)), 4));
+            // Add/upgrade abilities to player
+            levelUp();
             // Player leveled-up!
             // Give a random object
             Random random = new Random();
             inventory.add(objectList[random.nextInt(objectList.length)]);
 
         }
-        // Add/upgrade abilities to player
-        levelUp();
+
 
     }
 
     protected void majFinDeTour() {
         if(currenthealthpoints == 0) {
             System.out.println("Le joueur est KO !");
-            return;
         }
         //The rest of the method is implemented in the subclasses
     }
diff --git a/src/test/java/re/forestier/edu/UnitTests.java b/src/test/java/re/forestier/edu/UnitTests.java
index c8b7393495540d31181bf9face374a1356e77386..953eb34f31e03f241ac26e0111604fafef47db7d 100644
--- a/src/test/java/re/forestier/edu/UnitTests.java
+++ b/src/test/java/re/forestier/edu/UnitTests.java
@@ -177,4 +177,12 @@ public class UnitTests {
         assertThat(player.getXp(), is(2));
     }
 
+    @Test
+    @DisplayName("Test multiple level up")
+    void testMultipleLevelUp() {
+        Dwarf player = new Dwarf("Florian", "Gnognak le Barbare", 200, new ArrayList<>());
+        player.addXp(200);
+        assertThat(player.level, is(5));
+        assertThat(player.abilities.get("ATK"), is(4));
+    }
 }