diff --git a/Assets/Scenes/Level01.unity b/Assets/Scenes/Level01.unity
index 15701439ee99817607fd26dd638bd02b36b81b8d..9bb594bf43c09ad266301e6be1933e58b97c12bb 100644
--- a/Assets/Scenes/Level01.unity
+++ b/Assets/Scenes/Level01.unity
@@ -11829,7 +11829,6 @@ Transform:
   m_Children:
   - {fileID: 14871712}
   - {fileID: 636207316}
-  - {fileID: 1656483646}
   - {fileID: 756133771}
   m_Father: {fileID: 0}
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
@@ -13646,73 +13645,6 @@ Transform:
   - {fileID: 384557718}
   m_Father: {fileID: 0}
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
---- !u!1 &1656483645
-GameObject:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  serializedVersion: 6
-  m_Component:
-  - component: {fileID: 1656483646}
-  - component: {fileID: 1656483647}
-  m_Layer: 0
-  m_Name: LevelManager
-  m_TagString: Untagged
-  m_Icon: {fileID: 0}
-  m_NavMeshLayer: 0
-  m_StaticEditorFlags: 0
-  m_IsActive: 1
---- !u!4 &1656483646
-Transform:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 1656483645}
-  serializedVersion: 2
-  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
-  m_LocalPosition: {x: 0, y: 0, z: 0}
-  m_LocalScale: {x: 1, y: 1, z: 1}
-  m_ConstrainProportionsScale: 0
-  m_Children: []
-  m_Father: {fileID: 1165414997}
-  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
---- !u!114 &1656483647
-MonoBehaviour:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 1656483645}
-  m_Enabled: 1
-  m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: 4c72301907703bc499d2ca179570c95c, type: 3}
-  m_Name: 
-  m_EditorClassIdentifier: 
-  levels:
-  - MainMenu
-  - Cutscene01
-  - Cutscene02
-  - Cutscene03
-  - Level01
-  - Cutscene04
-  - Level01
-  - Cutscene05
-  - Level01
-  - Cutscene06
-  - Level02
-  - Cutscene07
-  - Cutscene08
-  announcementText: {fileID: 0}
-  enemyManager: []
-  questText: {fileID: 0}
-  kerocoKilled: 0
-  kepalaKerocoKilled: 0
-  jendralKilled: 0
-  rajaKilled: 0
-  winQuest: 0
-  fail: 0
 --- !u!1 &1695883712
 GameObject:
   m_ObjectHideFlags: 0
diff --git a/Assets/Scripts/DataUtils/GameData.cs b/Assets/Scripts/DataUtils/GameData.cs
index 3a59d57a0246937d98ab8745d4b5f7c826a23767..77c02a723f0348e4000ce6959148efcf81ff30b6 100644
--- a/Assets/Scripts/DataUtils/GameData.cs
+++ b/Assets/Scripts/DataUtils/GameData.cs
@@ -33,7 +33,7 @@ public class GameData
         this.baseDamage = 40;
         this.currentPosition = new Vector3(0f, 0f, 0f);
         this.currentWeapon = 0;
-        this.currentScene = 0;
+        this.currentScene = 1;
         this.currentQuest = 0;
         this.shopKeeperTime = 120f;
     }
diff --git a/Assets/Scripts/Helpers/SaveRadius.cs b/Assets/Scripts/Helpers/SaveRadius.cs
index cc806402ef86de53e54b8829d232e38729c890db..f07a2f860268ec4e433404823f4a742896dafa75 100644
--- a/Assets/Scripts/Helpers/SaveRadius.cs
+++ b/Assets/Scripts/Helpers/SaveRadius.cs
@@ -21,8 +21,8 @@ public class SaveRadius : MonoBehaviour
         if (timer >= 1 && playerInRange && Input.GetKeyDown(KeyCode.Z))
         {
             timer = 0;
-            DataPersistenceManager.instance.SaveGame();
             DataPersistenceManager.instance.SafeFromSafehouse();
+            DataPersistenceManager.instance.SaveGame();
         }
 
     }
diff --git a/Assets/Scripts/MainMenu/MainMenu.cs b/Assets/Scripts/MainMenu/MainMenu.cs
index 867bbd00dc3bc8fd1157960f9027d441df3e68d4..4001072ac73fd2b12864ab056b63408efe2b9fc4 100644
--- a/Assets/Scripts/MainMenu/MainMenu.cs
+++ b/Assets/Scripts/MainMenu/MainMenu.cs
@@ -45,8 +45,7 @@ public class MainMenu : MonoBehaviour
     {
         Debug.Log("On New Game Clicked");
         DataPersistenceManager.instance.NewGame();
-        DataPersistenceManager.instance.LoadGame();
-        LevelManager.Instance.Next();
+        LevelManager.Instance.LoadScene();
     }
 
     public void QuitGame()
diff --git a/Assets/Scripts/Managers/DataPersistenceManager.cs b/Assets/Scripts/Managers/DataPersistenceManager.cs
index 4dd381323091b837722deb114f62e4949a910b33..46bf0d2337bda4abd0e034d5714595a17727282d 100644
--- a/Assets/Scripts/Managers/DataPersistenceManager.cs
+++ b/Assets/Scripts/Managers/DataPersistenceManager.cs
@@ -15,6 +15,7 @@ public class DataPersistenceManager : MonoBehaviour
     private bool newGame = false;
     private bool loadGame = false;
     private bool saveSafeHouse = false;
+    private bool hasSaved = false;
 
     private void Awake()
     {
@@ -40,23 +41,44 @@ public class DataPersistenceManager : MonoBehaviour
 
     private void OnApplicationQuit()
     {
-        this.dataHandler.Delete();
+        if (!hasSaved && !loadGame)
+        {
+            this.dataHandler.Delete();
+        }
+        else if (loadGame)
+        {
+            if (!hasSaved)
+            {
+                this.dataHandler.Save(this.loadedGameData);
+            }
+        }
     }
 
     public void FileMechanism()
     {
-        if (!saveSafeHouse && !loadGame)
+        Debug.Log("File Mechanism Called");
+        if (!hasSaved && !loadGame)
         {
             this.dataHandler.Delete();
             this.gameData = null;
         }
         else if (loadGame)
         {
-            if (!saveSafeHouse)
+            Debug.Log(hasSaved);
+            if (!hasSaved)
             {
                 this.dataHandler.Save(this.loadedGameData);
+                this.gameData = this.loadedGameData;
+            }
+            else
+            {
+                this.gameData = this.dataHandler.Load();
             }
         }
+        else if (hasSaved)
+        {
+            this.gameData = this.dataHandler.Load();
+        }
     }
 
     private void OnEnable()
@@ -93,6 +115,12 @@ public class DataPersistenceManager : MonoBehaviour
     {
         this.gameData = new GameData();
         this.newGame = true;
+        this.loadGame = false;
+
+        foreach (IDataPersistence dataPersistence in dataPersistenceList)
+        {
+            dataPersistence.LoadData(gameData);
+        }
     }
 
     public void RetryGame(int scene)
@@ -117,9 +145,9 @@ public class DataPersistenceManager : MonoBehaviour
         }
         // TODO - push loaded data to all other scripts that need it
 
-        foreach (IDataPersistence dataPersistence in dataPersistenceList)
+        for (int i = dataPersistenceList.Count-1; i >= 0; i--)
         {
-            dataPersistence.LoadData(gameData);
+            dataPersistenceList[i].LoadData(gameData);
         }
 
         Debug.Log("Load Game called");
@@ -128,13 +156,20 @@ public class DataPersistenceManager : MonoBehaviour
     public void SaveGame()
     {
         // TODO - pass the data to other scripts
-        foreach (IDataPersistence dataPersistence in dataPersistenceList)
+        for (int i = dataPersistenceList.Count - 1; i >= 0; i--)
         {
-            dataPersistence.SaveData(ref gameData);
+            dataPersistenceList[i].SaveData(ref gameData);
         }
 
+        Debug.Log("SaveHouse bool: " + this.saveSafeHouse);
+
         // TODO - save data to a file
-        dataHandler.Save(gameData);
+        if (saveSafeHouse)
+        {
+            dataHandler.Save(gameData);
+            saveSafeHouse = false;
+            hasSaved = true;
+        }
 
         Debug.Log("Save Game called");
     }
@@ -160,9 +195,15 @@ public class DataPersistenceManager : MonoBehaviour
         this.saveSafeHouse = true;
     }
 
+    public void ResetSave()
+    {
+        this.saveSafeHouse = false;
+    }
+
     public void LoadGameClicked()
     {
         this.loadGame = true;
+        this.newGame = false;
         this.loadedGameData = gameData;
     }
 }
diff --git a/Assets/Scripts/Managers/GameOverManager.cs b/Assets/Scripts/Managers/GameOverManager.cs
index 9a1ab4bdf4ee2dd1025753db2de809765ee2962c..1e75ecb69e213993b3bc9e466f62bc18222c50f1 100644
--- a/Assets/Scripts/Managers/GameOverManager.cs
+++ b/Assets/Scripts/Managers/GameOverManager.cs
@@ -39,12 +39,14 @@ namespace Nightmare
         public void ResetLevel()
         {
             DataPersistenceManager.instance.RetryGame(1);
+            DataPersistenceManager.instance.ResetSave();
             LevelManager.Instance.ResetLevel();
         }
 
         public void ExitGame()
         {
             DataPersistenceManager.instance.FileMechanism();
+            DataPersistenceManager.instance.ResetSave();
             LevelManager.Instance.Exit();
         }
 
diff --git a/Assets/Scripts/Managers/LevelManager.cs b/Assets/Scripts/Managers/LevelManager.cs
index 3613cdba3c21ab2bea754b44e21c61afea75ceac..8f2eeb55f5e8aeb51cdb566c4f3f82d17e4a1f36 100644
--- a/Assets/Scripts/Managers/LevelManager.cs
+++ b/Assets/Scripts/Managers/LevelManager.cs
@@ -79,7 +79,10 @@ namespace Nightmare
         public void SaveData(ref GameData data)
         {
             data.currentScene = this.currentIndex;
-            data.currentQuest = this.currentQuest;
+            if (this.currentQuest >= 1)
+            {
+                data.currentQuest = this.currentQuest-1;
+            }
             Debug.Log("Save data scene and quest " + this.currentIndex + " " + this.currentQuest);
         }