diff --git a/Assets/Level01Controller.cs b/Assets/Level01Controller.cs
index 67da054660e876107d14172251966697cc1d2bd2..aafc86acdf6c8c3e6f96c2512d44afd39d23037a 100644
--- a/Assets/Level01Controller.cs
+++ b/Assets/Level01Controller.cs
@@ -11,6 +11,8 @@ public class Level01Controller : MonoBehaviour, IDataPersistence
     public GameObject finalBox;
     public TMP_Text missionText;
 
+    private bool finished = false;
+    
     public int EnemyDeathCount { get; private set; }
 
     // Start is called before the first frame update
@@ -22,7 +24,7 @@ public class Level01Controller : MonoBehaviour, IDataPersistence
 
     private string SetTextMission()
     {
-        return $"Your Mission\nKill Keroco     {EnemyDeathCount}/{maxKerocoDeath}";
+        return $"Your Mission\nKill Keroco {EnemyDeathCount}/{maxKerocoDeath}";
     }
 
     private void OnDestroy()
@@ -38,10 +40,18 @@ public class Level01Controller : MonoBehaviour, IDataPersistence
     
     void Update()
     {
-        if (EnemyDeathCount>=10)
+        if (!finished && EnemyDeathCount>=10)
         {
             finalGate.SetActive(false);
             finalBox.SetActive(true);
+            
+            GameObject[] enemies = GameObject.FindGameObjectsWithTag("Enemy");
+            foreach (var enemy in enemies)
+            {
+                Destroy(enemy);
+            }
+
+            finished = true;
         }    
     }
 
@@ -53,7 +63,7 @@ public class Level01Controller : MonoBehaviour, IDataPersistence
         }
         Debug.Log("Loading Level 1");
 
-        EnemyDeathCount = data.currentKillCount;
+        EnemyDeathCount = data.Level1.currentKillCount;
     }
 
     public void SaveData(GameData data)
@@ -64,6 +74,6 @@ public class Level01Controller : MonoBehaviour, IDataPersistence
         }
 
         data.currentLevel = 1;
-        data.currentKillCount = EnemyDeathCount;
+        data.Level1.currentKillCount = EnemyDeathCount;
     }
 }
diff --git a/Assets/Level02Controller.cs b/Assets/Level02Controller.cs
index f0dd4f8eb164d969b409a2261ba16af5de1d9c5b..3f7b541c50ccfa64b98b449dfdf7ea86e9e1122a 100644
--- a/Assets/Level02Controller.cs
+++ b/Assets/Level02Controller.cs
@@ -12,6 +12,8 @@ public class Level02Controller : MonoBehaviour, IDataPersistence
     public GameObject finalBox;
     public GameObject finalGate;
     public TMP_Text missionText;
+
+    private bool finished = false;
     
     // Start is called before the first frame update
     void Start()
@@ -47,10 +49,18 @@ public class Level02Controller : MonoBehaviour, IDataPersistence
     // Update is called once per frame
     void Update()
     {
-        if (EnemyLeaderDeathCount >= 4 && EnemyDeathCount>=5)
+        if (!finished && EnemyLeaderDeathCount >= 4 && EnemyDeathCount>=5)
         {
             finalBox.SetActive(true);
             finalGate.SetActive(false);   
+            
+            GameObject[] enemies = GameObject.FindGameObjectsWithTag("Enemy");
+            foreach (var enemy in enemies)
+            {
+                Destroy(enemy);
+            }
+            
+            finished = true;
         }
     }
 
@@ -60,9 +70,10 @@ public class Level02Controller : MonoBehaviour, IDataPersistence
         {
             return;
         }
+        
         Debug.Log("Loading Level 2");
-        EnemyDeathCount = data.currentKillCount;
-        EnemyLeaderDeathCount = data.currentLeaderKillCount;
+        EnemyDeathCount = data.Level2.currentKillCount;
+        EnemyLeaderDeathCount = data.Level2.currentLeaderKillCount;
     }
 
     public void SaveData(GameData data)
@@ -73,7 +84,7 @@ public class Level02Controller : MonoBehaviour, IDataPersistence
         }
 
         data.currentLevel = 2;
-        data.currentKillCount = EnemyDeathCount;
-        data.currentLeaderKillCount = EnemyLeaderDeathCount;
+        data.Level2.currentKillCount = EnemyDeathCount;
+        data.Level2.currentLeaderKillCount = EnemyLeaderDeathCount;
     }
 }
diff --git a/Assets/Level03Controller.cs b/Assets/Level03Controller.cs
index 3f0ba1f451ba9674beb3225594154cc9c942ba71..d58883b4b74217efdf96284039e20188cde28ebf 100644
--- a/Assets/Level03Controller.cs
+++ b/Assets/Level03Controller.cs
@@ -16,6 +16,9 @@ public class Level03Controller : MonoBehaviour, IDataPersistence
 
     public GameObject finalBox;
     public GameObject finalGate;
+
+    private bool finished = false;
+    
     // Start is called before the first frame update
     void Start()
     {
@@ -57,10 +60,17 @@ public class Level03Controller : MonoBehaviour, IDataPersistence
     // Update is called once per frame
     void Update()
     {
-        if (EnemyLeaderDeathCount >= 4 && EnemyAdmiralDeathCount >= 1)
+        if (!finished && EnemyLeaderDeathCount >= 4 && EnemyAdmiralDeathCount >= 1)
         {
             finalBox.SetActive(true);
             finalGate.SetActive(false);  
+            
+            GameObject[] enemies = GameObject.FindGameObjectsWithTag("Enemy");
+            foreach (var enemy in enemies)
+            {
+                Destroy(enemy);
+            }
+            finished = true;
         }
     }
 
@@ -70,10 +80,11 @@ public class Level03Controller : MonoBehaviour, IDataPersistence
         {
             return;
         }
+        
         Debug.Log("Loading Level 3");
-        EnemyDeathCount = data.currentKillCount;
-        EnemyLeaderDeathCount = data.currentLeaderKillCount;
-        EnemyAdmiralDeathCount = data.currentAdmiralKillCount;
+        EnemyDeathCount = data.Level3.currentKillCount;
+        EnemyLeaderDeathCount = data.Level3.currentLeaderKillCount;
+        EnemyAdmiralDeathCount = data.Level3.currentAdmiralKillCount;
     }
 
     public void SaveData(GameData data)
@@ -84,8 +95,8 @@ public class Level03Controller : MonoBehaviour, IDataPersistence
         }
 
         data.currentLevel = 3;
-        data.currentKillCount = EnemyDeathCount;
-        data.currentLeaderKillCount = EnemyLeaderDeathCount;
-        data.currentAdmiralKillCount = EnemyAdmiralDeathCount;
+        data.Level3.currentKillCount = EnemyDeathCount;
+        data.Level3.currentLeaderKillCount = EnemyLeaderDeathCount;
+        data.Level3.currentAdmiralKillCount = EnemyAdmiralDeathCount;
     }
 }
diff --git a/Assets/Level04Controller.cs b/Assets/Level04Controller.cs
index 01907a81fb1748ca6d15945363ce2236d64156bf..b44f331c29dbe4121d3ee199b98ad06ced086bef 100644
--- a/Assets/Level04Controller.cs
+++ b/Assets/Level04Controller.cs
@@ -2,6 +2,7 @@ using System.Collections;
 using System.Collections.Generic;
 using TMPro;
 using UnityEngine;
+using UnityEngine.SceneManagement;
 
 public class Level04Controller : MonoBehaviour, IDataPersistence
 {
@@ -14,6 +15,8 @@ public class Level04Controller : MonoBehaviour, IDataPersistence
     public int maxLeaderKerocoDeath = 2;
     public int maxAdmiralOfKerocoDeath = 2;
     public int maxKingOfKerocoDeath = 1;
+
+    public bool finished = false;
     
     // Start is called before the first frame update
     void Start()
@@ -64,24 +67,32 @@ public class Level04Controller : MonoBehaviour, IDataPersistence
     // Update is called once per frame
     void Update()
     {
-        if (EnemyKingDeathCount>=maxKingOfKerocoDeath && EnemyAdmiralDeathCount>=maxAdmiralOfKerocoDeath && EnemyLeaderDeathCount >= maxLeaderKerocoDeath)
+        if (!finished && EnemyKingDeathCount>=maxKingOfKerocoDeath && EnemyAdmiralDeathCount>=maxAdmiralOfKerocoDeath 
+            && EnemyLeaderDeathCount >= maxLeaderKerocoDeath)
         {
-            //TODO: Do something if king of enemy die  
+            SceneManager.LoadScene("EndingCutScene");  
+
+            GameObject[] enemies = GameObject.FindGameObjectsWithTag("Enemy");
+            foreach (var enemy in enemies)
+            {
+                Destroy(enemy);
+            }
+            finished = true;
         }
     }
 
     public void LoadData(GameData data)
     {
-        if (data.currentLevel > 4)
+        if (data.currentLevel != 4)
         {
             return;
         }
 
         Debug.Log("Loading Level 4");
-        EnemyDeathCount = data.currentKillCount;
-        EnemyLeaderDeathCount = data.currentLeaderKillCount;
-        EnemyAdmiralDeathCount = data.currentAdmiralKillCount;
-        EnemyKingDeathCount = data.currentKingKillCount;
+        EnemyDeathCount = data.Level4.currentKillCount;
+        EnemyLeaderDeathCount = data.Level4.currentLeaderKillCount;
+        EnemyAdmiralDeathCount = data.Level4.currentAdmiralKillCount;
+        EnemyKingDeathCount = data.Level4.currentKingKillCount;
     }
 
     public void SaveData(GameData data)
@@ -92,9 +103,9 @@ public class Level04Controller : MonoBehaviour, IDataPersistence
         }
 
         data.currentLevel = 4;
-        data.currentKillCount = EnemyDeathCount;
-        data.currentLeaderKillCount = EnemyLeaderDeathCount;
-        data.currentAdmiralKillCount = EnemyAdmiralDeathCount;
-        data.currentKingKillCount = EnemyKingDeathCount;
+        data.Level4.currentKillCount = EnemyDeathCount;
+        data.Level4.currentLeaderKillCount = EnemyLeaderDeathCount;
+        data.Level4.currentAdmiralKillCount = EnemyAdmiralDeathCount;
+        data.Level4.currentKingKillCount = EnemyKingDeathCount;
     }
 }
\ No newline at end of file
diff --git a/Assets/Prefabs/Remade/PlayerOnly.prefab b/Assets/Prefabs/Remade/PlayerOnly.prefab
index 10be9fb1b4dacec1b4daf35e8b5205e7c0c8b1ed..a6f498f4486e4fa29af2be328bc0467f98f64c07 100644
--- a/Assets/Prefabs/Remade/PlayerOnly.prefab
+++ b/Assets/Prefabs/Remade/PlayerOnly.prefab
@@ -13379,7 +13379,7 @@ AudioListener:
   m_PrefabInstance: {fileID: 0}
   m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 8562903885280076162}
-  m_Enabled: 0
+  m_Enabled: 1
 --- !u!1 &9023578505181160121
 GameObject:
   m_ObjectHideFlags: 0
diff --git a/Assets/Scenes/Level01/Level 01.unity b/Assets/Scenes/Level01/Level 01.unity
index 05161a7f0644031374b33dec409d99e5d4f1dbdd..bf582973d4442d27a6a0bbbc4790977b8702a9a7 100644
--- a/Assets/Scenes/Level01/Level 01.unity	
+++ b/Assets/Scenes/Level01/Level 01.unity	
@@ -1091,7 +1091,7 @@ MonoBehaviour:
   m_OverrideVoxelSize: 0
   m_VoxelSize: 0.16666667
   m_MinRegionArea: 2
-  m_NavMeshData: {fileID: 23800000, guid: 02cc88715f23ac84cbc8bc9e6a25e05d, type: 2}
+  m_NavMeshData: {fileID: 23800000, guid: b9e1dabdae2ca8a4a9e11ce082183460, type: 2}
   m_BuildHeightMesh: 0
 --- !u!4 &482693132 stripped
 Transform:
diff --git a/Assets/Scenes/Level01/newscene.scenetemplate b/Assets/Scenes/Level01/newscene.scenetemplate
index 01f697a19b775ee170080899f7f6f9c9b45ec803..d790e67e3fe2976e26b52631a2e6da8d52991de8 100644
--- a/Assets/Scenes/Level01/newscene.scenetemplate
+++ b/Assets/Scenes/Level01/newscene.scenetemplate
@@ -37,10 +37,10 @@ MonoBehaviour:
     instantiationMode: 0
   - dependency: {fileID: 2800000, guid: cc17514454cb24e4ebf8b0902704fc58, type: 3}
     instantiationMode: 0
-  - dependency: {fileID: 2800000, guid: 66cc5581f2192a549b9b9270381c9be7, type: 3}
-    instantiationMode: 0
   - dependency: {fileID: 2800000, guid: 2fd6421f253b4ef1a19526541f9ffc0c, type: 3}
     instantiationMode: 1
+  - dependency: {fileID: 2800000, guid: 66cc5581f2192a549b9b9270381c9be7, type: 3}
+    instantiationMode: 0
   - dependency: {fileID: 2100000, guid: b75a561f374f89247a62336b50288d40, type: 2}
     instantiationMode: 0
   - dependency: {fileID: 2100000, guid: 18a35e570e04b5e4bbbe952c545bf56d, type: 2}
@@ -99,8 +99,6 @@ MonoBehaviour:
     instantiationMode: 0
   - dependency: {fileID: 2100000, guid: 5afa4a01a731c834d9a62da55c7cfa7c, type: 2}
     instantiationMode: 0
-  - dependency: {fileID: 23800000, guid: 02cc88715f23ac84cbc8bc9e6a25e05d, type: 2}
-    instantiationMode: 0
   - dependency: {fileID: 5236359416903694273, guid: ac857bfe6ecfc7b4cb2754bb4718800b, type: 3}
     instantiationMode: 0
   - dependency: {fileID: 2800000, guid: acdb41fd591a7434a9f285ba714869c9, type: 3}
@@ -167,10 +165,10 @@ MonoBehaviour:
     instantiationMode: 0
   - dependency: {fileID: 2100000, guid: 90be2217180127845be6624b229a9d23, type: 2}
     instantiationMode: 0
-  - dependency: {fileID: 2100000, guid: 3ed00db9454ddc04c97299085e721501, type: 2}
-    instantiationMode: 0
   - dependency: {fileID: 100002, guid: d2a726cb03d910545b2e5c9705ce8ab0, type: 3}
     instantiationMode: 0
+  - dependency: {fileID: 2100000, guid: 3ed00db9454ddc04c97299085e721501, type: 2}
+    instantiationMode: 0
   - dependency: {fileID: 100002, guid: e5948365778fafb40a1465acdd6674f6, type: 3}
     instantiationMode: 0
   - dependency: {fileID: 2800000, guid: 3a51fde69768ffe45b9d0fe68218682d, type: 3}
@@ -269,6 +267,8 @@ MonoBehaviour:
     instantiationMode: 0
   - dependency: {fileID: 2100000, guid: 01ffe1f3679a0894087ea5e74106fb93, type: 2}
     instantiationMode: 0
+  - dependency: {fileID: 23800000, guid: b9e1dabdae2ca8a4a9e11ce082183460, type: 2}
+    instantiationMode: 0
   - dependency: {fileID: 2800000, guid: 1ee650de4ad9cbc44a795a4f1c614a46, type: 3}
     instantiationMode: 0
   - dependency: {fileID: 9100000, guid: 6adb231f04c98154f82492b34d281e72, type: 2}
diff --git a/Assets/Scenes/Level02/Level 02.unity b/Assets/Scenes/Level02/Level 02.unity
index 0dcff2240afd66ef8a5d40e33cba47328073c099..e52dfcb9af0b2d305b46b9db95e85607805c894f 100644
--- a/Assets/Scenes/Level02/Level 02.unity	
+++ b/Assets/Scenes/Level02/Level 02.unity	
@@ -9362,8 +9362,8 @@ MonoBehaviour:
   m_Name: 
   m_EditorClassIdentifier: 
   maxKerocoDeath: 5
-  maxLeaderOfKerocoDeath: 3
-  finalBox: {fileID: 1331716288690049236}
+  maxLeaderOfKerocoDeath: 4
+  finalBox: {fileID: 1198434733}
   finalGate: {fileID: 1847105508}
   missionText: {fileID: 1227979353}
 --- !u!4 &1755696529
@@ -11021,11 +11021,6 @@ PrefabInstance:
     m_AddedGameObjects: []
     m_AddedComponents: []
   m_SourcePrefab: {fileID: 100100000, guid: ac857bfe6ecfc7b4cb2754bb4718800b, type: 3}
---- !u!1 &1331716288690049236 stripped
-GameObject:
-  m_CorrespondingSourceObject: {fileID: 5236359416903694273, guid: ac857bfe6ecfc7b4cb2754bb4718800b, type: 3}
-  m_PrefabInstance: {fileID: 1331716288690049235}
-  m_PrefabAsset: {fileID: 0}
 --- !u!1660057539 &9223372036854775807
 SceneRoots:
   m_ObjectHideFlags: 0
diff --git a/Assets/Scenes/Level03/Level 03.unity b/Assets/Scenes/Level03/Level 03.unity
index 31fcedbad289db27a9b54aad175acb63c0c41e1f..2aacc5c51c9e8d2aa168910a7ccba218bb1562ea 100644
--- a/Assets/Scenes/Level03/Level 03.unity	
+++ b/Assets/Scenes/Level03/Level 03.unity	
@@ -155,7 +155,7 @@ MonoBehaviour:
   missionText: {fileID: 192957479}
   maxLeaderOfKerocoDeath: 4
   maxAdmiralOfKerocoDeath: 1
-  finalBox: {fileID: 574536093}
+  finalBox: {fileID: 733509819}
   finalGate: {fileID: 1930109031}
 --- !u!4 &8781039
 Transform:
@@ -3164,11 +3164,6 @@ Transform:
   m_CorrespondingSourceObject: {fileID: 4271472138400522420, guid: ac857bfe6ecfc7b4cb2754bb4718800b, type: 3}
   m_PrefabInstance: {fileID: 574536091}
   m_PrefabAsset: {fileID: 0}
---- !u!1 &574536093 stripped
-GameObject:
-  m_CorrespondingSourceObject: {fileID: 5236359416903694273, guid: ac857bfe6ecfc7b4cb2754bb4718800b, type: 3}
-  m_PrefabInstance: {fileID: 574536091}
-  m_PrefabAsset: {fileID: 0}
 --- !u!1 &585986195
 GameObject:
   m_ObjectHideFlags: 0
diff --git a/Assets/Scripts/DataPersistence/Data/GameData.cs b/Assets/Scripts/DataPersistence/Data/GameData.cs
index 54a02fbdee730b3a884805429ceed694ed6fc22e..c11d169571c0236ad5e8fd44aead79cfc2133016 100644
--- a/Assets/Scripts/DataPersistence/Data/GameData.cs
+++ b/Assets/Scripts/DataPersistence/Data/GameData.cs
@@ -14,12 +14,13 @@ public class GameData
     public int playerMoney = 300;
     public float playerHealth = 100;
     public string playerPet = "NO_PET";
-    public int currentLevel;
-    public int currentKillCount;
-    public int currentLeaderKillCount;
-    public int currentAdmiralKillCount;
-    public int currentKingKillCount;
+    public int currentLevel = 1;
 
+    public Level1 Level1 = new Level1();
+    public Level2 Level2 = new Level2();
+    public Level3 Level3 = new Level3();
+    public Level4 Level4 = new Level4();
+    
     public GameData()
     {
         this.deathCount = 0;
diff --git a/Assets/Scripts/DataPersistence/Data/Level.cs b/Assets/Scripts/DataPersistence/Data/Level.cs
new file mode 100644
index 0000000000000000000000000000000000000000..d09f509188626c48f4101f3b96f6776125f2bd46
--- /dev/null
+++ b/Assets/Scripts/DataPersistence/Data/Level.cs
@@ -0,0 +1,56 @@
+[System.Serializable]
+public class Level1
+{
+    public int currentKillCount;
+    
+    public Level1()
+    {
+        currentKillCount = 0;
+    }
+    
+}
+    
+[System.Serializable]
+public class Level2
+{
+    public int currentKillCount;
+    public int currentLeaderKillCount;
+    
+    public Level2()
+    {
+        currentKillCount = 0;
+        currentLeaderKillCount = 0;
+    }
+}
+    
+[System.Serializable]
+public class Level3
+{
+    public int currentKillCount;
+    public int currentLeaderKillCount;
+    public int currentAdmiralKillCount;
+    
+    public Level3()
+    {
+        currentKillCount = 0;
+        currentLeaderKillCount = 0;
+        currentAdmiralKillCount = 0;
+    }
+}
+    
+[System.Serializable]
+public class Level4
+{
+    public int currentKillCount;
+    public int currentLeaderKillCount;
+    public int currentAdmiralKillCount;
+    public int currentKingKillCount;
+    
+    public Level4()
+    {
+        currentKillCount = 0;
+        currentLeaderKillCount = 0;
+        currentAdmiralKillCount = 0;
+        currentKingKillCount = 0;
+    }
+}
\ No newline at end of file
diff --git a/Assets/Scripts/DataPersistence/Data/Level.cs.meta b/Assets/Scripts/DataPersistence/Data/Level.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..bef57776f892d20e1a7c2e81df3edcb81268b3cf
--- /dev/null
+++ b/Assets/Scripts/DataPersistence/Data/Level.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: 9c5effeb57fc430cae989bc775b0afb6
+timeCreated: 1715404889
\ No newline at end of file
diff --git a/Assets/Scripts/DataPersistence/DataPersistenceManager.cs b/Assets/Scripts/DataPersistence/DataPersistenceManager.cs
index 57b5d3fefc1a5b0265de0e9186586425fb1010f9..82d7def7ee2f7f0766f09cd0d2730d54be3162cc 100644
--- a/Assets/Scripts/DataPersistence/DataPersistenceManager.cs
+++ b/Assets/Scripts/DataPersistence/DataPersistenceManager.cs
@@ -113,6 +113,7 @@ public class DataPersistenceManager : MonoBehaviour
     {
         // this.dataPersistenceObjects = FindAllDataPersistenceObjects();
         LoadGame();
+        SaveGame();
     }
 
     public void SaveGame()
diff --git a/Assets/Scripts/PlayerR/PlayerManager.cs b/Assets/Scripts/PlayerR/PlayerManager.cs
index 956b7b13deef2f57cff0cb24c7e72309be232db6..bb7fb98e649dc75930c4c80ba28456dc65ef482f 100644
--- a/Assets/Scripts/PlayerR/PlayerManager.cs
+++ b/Assets/Scripts/PlayerR/PlayerManager.cs
@@ -20,7 +20,7 @@ public class PlayerManager : MonoBehaviour, CheatListener, IDataPersistence
     private GameObject scenePet;
     private const float MaxHp = 100f;
     private float playerHp = 100f;
-    private static int playerMoney = 100;
+    private static int playerMoney = 500;
     
     public static int PlayerMoney
     {
@@ -55,6 +55,15 @@ public class PlayerManager : MonoBehaviour, CheatListener, IDataPersistence
         EventManager.StartListening("MotherlodeCheat", UpdateMoneyText);
     }
 
+    void Update()
+    {
+        if (PlayerHp <= 0)
+        {
+            SceneManager.LoadScene("Scenes/Cutscene/DeathCutScene");
+            DataPersistenceManager.instance.SaveGame();
+        }
+    }
+
     void OnDestroy()
     {
         EventManager.StopListening("MotherlodeCheat", UpdateMoneyText);
@@ -133,6 +142,7 @@ public class PlayerManager : MonoBehaviour, CheatListener, IDataPersistence
                     // game over
                     //TODO: add animation
                     SceneManager.LoadScene("Scenes/Cutscene/DeathCutScene");
+                    DataPersistenceManager.instance.SaveGame();
                 }
             }
         );