diff --git a/Assets/Scripts/DataUtils/FileDataHandler.cs b/Assets/Scripts/DataUtils/FileDataHandler.cs
index e4f323934edb75983eb43a3122c5e1162b631439..278d875a24ab986c847dc5571a85e2a085a55742 100644
--- a/Assets/Scripts/DataUtils/FileDataHandler.cs
+++ b/Assets/Scripts/DataUtils/FileDataHandler.cs
@@ -49,6 +49,22 @@ public class FileDataHandler
         return loadedData;
     }
 
+    public void Delete()
+    {
+        string fullPath = Path.Combine(dataDirPath, dataFileName);
+
+        if (File.Exists(fullPath))
+        {
+            File.Delete(fullPath);
+            Debug.Log("File deleted successfully.");
+        }
+        else
+        {
+            Debug.LogWarning("File not found.");
+        }
+
+    }
+
     public void Save(GameData data)
     {
         string fullPath = Path.Combine(dataDirPath, dataFileName);
diff --git a/Assets/Scripts/DataUtils/GameData.cs b/Assets/Scripts/DataUtils/GameData.cs
index 791d648a0edb9e286bd6da3543bb1fc4e1857844..3a59d57a0246937d98ab8745d4b5f7c826a23767 100644
--- a/Assets/Scripts/DataUtils/GameData.cs
+++ b/Assets/Scripts/DataUtils/GameData.cs
@@ -33,8 +33,25 @@ public class GameData
         this.baseDamage = 40;
         this.currentPosition = new Vector3(0f, 0f, 0f);
         this.currentWeapon = 0;
-        this.currentScene = 4;
-        this.currentQuest = 1;
+        this.currentScene = 0;
+        this.currentQuest = 0;
+        this.shopKeeperTime = 120f;
+    }
+
+    public GameData(int currentScene)
+    {
+        this.score = 0;
+        this.coin = 0;
+        this.pets = new List<string>();
+        this.petsHealth = new List<double>();
+        this.playerName = string.Empty;
+        this.playerSpeed = 6;
+        this.playerHealth = 100;
+        this.baseDamage = 40;
+        this.currentPosition = new Vector3(0f, 0f, 0f);
+        this.currentWeapon = 0;
+        this.currentScene = currentScene;
+        this.currentQuest = 0;
         this.shopKeeperTime = 120f;
     }
 
diff --git a/Assets/Scripts/Helpers/SaveRadius.cs b/Assets/Scripts/Helpers/SaveRadius.cs
index 85078bf6fbdb0349032628d596a51eef15bb7741..cc806402ef86de53e54b8829d232e38729c890db 100644
--- a/Assets/Scripts/Helpers/SaveRadius.cs
+++ b/Assets/Scripts/Helpers/SaveRadius.cs
@@ -22,6 +22,7 @@ public class SaveRadius : MonoBehaviour
         {
             timer = 0;
             DataPersistenceManager.instance.SaveGame();
+            DataPersistenceManager.instance.SafeFromSafehouse();
         }
 
     }
diff --git a/Assets/Scripts/MainMenu/MainMenu.cs b/Assets/Scripts/MainMenu/MainMenu.cs
index 5e7f08515ffb64d1d46a771d8acb50b27cef3c97..74757dff8fb904d0e22f380aab353278bacc52e1 100644
--- a/Assets/Scripts/MainMenu/MainMenu.cs
+++ b/Assets/Scripts/MainMenu/MainMenu.cs
@@ -44,12 +44,14 @@ public class MainMenu : MonoBehaviour
     public void PlayGame()
     {
         Debug.Log("On New Game Clicked");
-        LevelManager.Instance.Next();
         DataPersistenceManager.instance.NewGame();
+        DataPersistenceManager.instance.LoadGame();
+        LevelManager.Instance.Next();
     }
 
     public void QuitGame()
     {
+        DataPersistenceManager.instance.DeleteFile();
         Application.Quit();
     }
 
diff --git a/Assets/Scripts/Managers/DataPersistenceManager.cs b/Assets/Scripts/Managers/DataPersistenceManager.cs
index 0aca1a40b9d416e303e40158fb052b898868ddfb..8f2e1978712cfff8c8fff44155bc6d6ff4acc050 100644
--- a/Assets/Scripts/Managers/DataPersistenceManager.cs
+++ b/Assets/Scripts/Managers/DataPersistenceManager.cs
@@ -8,9 +8,11 @@ public class DataPersistenceManager : MonoBehaviour
     [Header("File Storage Config")]
     [SerializeField] private string fileName;
     private FileDataHandler dataHandler;
-    public static DataPersistenceManager instance {  get; private set; }
+    public static DataPersistenceManager instance { get; private set; }
     private GameData gameData;
     private List<IDataPersistence> dataPersistenceList;
+    private bool newGame = false;
+    private bool saveSafeHouse = false;
 
     private void Awake()
     {
@@ -36,10 +38,15 @@ public class DataPersistenceManager : MonoBehaviour
 
     private void OnApplicationQuit()
     {
-        if (gameData.playerHealth > 0)
+        this.dataHandler.Delete();
+    }
+
+    public void DeleteFile()
+    {
+        if (!saveSafeHouse)
         {
-            SaveGame();
-            return;
+            this.dataHandler.Delete();
+            this.gameData = null;
         }
     }
 
@@ -57,24 +64,41 @@ public class DataPersistenceManager : MonoBehaviour
 
     public void OnSceneLoaded(Scene scene, LoadSceneMode mode)
     {
-        this.dataPersistenceList = FindAllDataPersistence();
-        LoadGame();
+        if (scene.name.Contains("MainMenu") || scene.name.Contains("Level"))
+        {
+            this.dataPersistenceList = FindAllDataPersistence();
+            LoadGame();
+        }
     }
 
     public void OnSceneUnloaded(Scene scene)
     {
-        SaveGame();
+        Debug.Log("OnSceneUnloaded called");
+        if (scene.name.Contains("03") || scene.name.Contains("04") || scene.name.Contains("05") || scene.name.Contains("06"))
+        {
+            SaveGame();
+        }
     }
 
     public void NewGame()
     {
         this.gameData = new GameData();
+        this.newGame = true;
+    }
+
+    public void RetryGame(int scene)
+    {
+        this.gameData = new GameData(scene);
     }
 
     public void LoadGame()
     {
         // TODO - load saved data
-        this.gameData = dataHandler.Load();
+        if (!newGame)
+        {
+            Debug.Log("Masuk ga");
+            this.gameData = dataHandler.Load();
+        }
 
         // if no data can be loaded, dont continue
         if (this.gameData == null || this.gameData.playerHealth <= 0)
@@ -106,8 +130,24 @@ public class DataPersistenceManager : MonoBehaviour
         Debug.Log("Save Game called");
     }
 
+    public void SaveSceneGame()
+    {
+        // TODO - pass the data to other scripts
+        foreach (IDataPersistence dataPersistence in dataPersistenceList)
+        {
+            dataPersistence.SaveData(ref gameData);
+        }
+
+        Debug.Log("Save Scene Game called");
+    }
+
     public bool HasGameData()
     {
         return gameData != null;
     }
+
+    public void SafeFromSafehouse()
+    {
+        this.saveSafeHouse = true;
+    }
 }
diff --git a/Assets/Scripts/Managers/GameOverManager.cs b/Assets/Scripts/Managers/GameOverManager.cs
index 8c7247f23bbaf8d9ca4a368450917838e5bf1ef1..c5f2ff0457e76e79cc7c0fb438b0826d153128be 100644
--- a/Assets/Scripts/Managers/GameOverManager.cs
+++ b/Assets/Scripts/Managers/GameOverManager.cs
@@ -38,11 +38,13 @@ namespace Nightmare
 
         public void ResetLevel()
         {
+            DataPersistenceManager.instance.RetryGame(1);
             LevelManager.Instance.ResetLevel();
         }
 
         public void ExitGame()
         {
+            DataPersistenceManager.instance.DeleteFile();
             LevelManager.Instance.Exit();
         }
 
diff --git a/Assets/Scripts/Managers/LevelManager.cs b/Assets/Scripts/Managers/LevelManager.cs
index 3c61c8e3bd297046247f3698541ac58d746dfacf..eba761444e3e78d00222ee039a8402adf0a90b1b 100644
--- a/Assets/Scripts/Managers/LevelManager.cs
+++ b/Assets/Scripts/Managers/LevelManager.cs
@@ -73,12 +73,14 @@ namespace Nightmare
         {
             this.currentIndex = data.currentScene;
             this.currentQuest = data.currentQuest;
+            Debug.Log("Load data scene and quest " + this.currentIndex + " " + this.currentQuest);
         }
 
         public void SaveData(ref GameData data)
         {
             data.currentScene = this.currentIndex;
             data.currentQuest = this.currentQuest;
+            Debug.Log("Save data scene and quest " + this.currentIndex + " " + this.currentQuest);
         }
 
         private void Update()
diff --git a/Assets/Scripts/Managers/PetManager.cs b/Assets/Scripts/Managers/PetManager.cs
index a01631375f57631fb4a809d7ba6233d8fefb4743..3ec028dc1c31cd776f39324657d778173c9bbee7 100644
--- a/Assets/Scripts/Managers/PetManager.cs
+++ b/Assets/Scripts/Managers/PetManager.cs
@@ -13,19 +13,19 @@ public class PetManager : MonoBehaviour, IDataPersistence
         player = GameObject.FindGameObjectWithTag("Player");
     }
 
-    public void SpawnPet(string petTag, double petHealth)
+    public void SpawnPet(string petTag, double petHealth, Vector3 playerPosition)
     {
         GameObject pet = null;
         if (petTag == "PetHealer")
         {
-            pet = Instantiate(PetHealer, player.transform.position, player.transform.rotation);
+            pet = Instantiate(PetHealer, playerPosition, Quaternion.identity);
 
             PetHealth healthofPet = pet.GetComponent<PetHealth>();
             healthofPet.currentHealth = petHealth;
         }
         else if (petTag == "PetFighter")
         {
-            pet = Instantiate(PetFighter, player.transform.position, player.transform.rotation);
+            pet = Instantiate(PetFighter, playerPosition, Quaternion.identity);
 
             PetHealth healthofPet = pet.GetComponent<PetHealth>();
             healthofPet.currentHealth = petHealth;
@@ -34,14 +34,10 @@ public class PetManager : MonoBehaviour, IDataPersistence
 
     public void LoadData(GameData data)
     {
-        if (player == null)
-        {
-            player = GameObject.FindGameObjectWithTag("Player");
-        }
 
         for (int i = 0; i < data.pets.Count; i++)
         {
-            SpawnPet(data.pets[i], data.petsHealth[i]);
+            SpawnPet(data.pets[i], data.petsHealth[i], data.currentPosition);
         }
     }