diff --git a/IF3210-2024-Unity-AFK/Assets/Code/Scripts/DataPersistance/DataPersistenceManager.cs b/IF3210-2024-Unity-AFK/Assets/Code/Scripts/DataPersistance/DataPersistenceManager.cs
index b639881a57aa5ad213237116967ae35a409f28ab..1aa5df392b0b9d1a80c978397a49517f13cf8ab7 100644
--- a/IF3210-2024-Unity-AFK/Assets/Code/Scripts/DataPersistance/DataPersistenceManager.cs
+++ b/IF3210-2024-Unity-AFK/Assets/Code/Scripts/DataPersistance/DataPersistenceManager.cs
@@ -9,6 +9,7 @@ using Unity.VisualScripting;
 using UnityEngine.UI;
 using Unity.XR.CoreUtils;
 using TMPro;
+using UnityEngine.SceneManagement;
 
 public class DataPersistenceManager : MonoBehaviour
 {
@@ -62,9 +63,24 @@ public class DataPersistenceManager : MonoBehaviour
         if (!PlayerPrefs.HasKey("kill_count")) PlayerPrefs.SetInt("kill_count", 0);
         if (!PlayerPrefs.HasKey("death_count")) PlayerPrefs.SetInt("death_count", 0);
         if (!PlayerPrefs.HasKey("spend_count")) PlayerPrefs.SetInt("spend_count", 0);
+        SceneManager.sceneLoaded += OnSceneLoaded;
         LoadGame();
     }
 
+    private void OnDestroy()
+    {
+        SceneManager.sceneLoaded -= OnSceneLoaded;
+    }
+
+    private void OnSceneLoaded(Scene scene, LoadSceneMode mode)
+    {
+        if (scene.name == "Main 2") 
+        {
+            dataPersistenceObjects = FindAllDataPersistenceObjects();
+            LoadGame();
+        }
+    }
+
     private void OnApplicationQuit()
     {
         DateTime startTime = DateTime.Parse(PlayerPrefs.GetString("start_time")); 
@@ -80,6 +96,11 @@ public class DataPersistenceManager : MonoBehaviour
         return new List<IDataPersistence>(dataPersistenceObjects);
     }
 
+    private void Update()
+    {
+        dataPersistenceObjects = FindAllDataPersistenceObjects();
+    }
+
     public void LoadGame()
     {
         // Load data from file
@@ -92,26 +113,19 @@ public class DataPersistenceManager : MonoBehaviour
             NewGame();
         }
 
-        Debug.Log("pers lenggngngngn " + dataPersistenceObjects.Count);
         // push data to all scripts
         foreach (IDataPersistence dataPersistenceObject in dataPersistenceObjects)
         {
-            Debug.Log("pers obj " + dataPersistenceObject);
+            Debug.Log(dataPersistenceObject);
             dataPersistenceObject.LoadData(gameData);
         }
     }
 
-    private void Update()
-    {
-        dataPersistenceObjects = FindAllDataPersistenceObjects();
-    }
-
     public void SaveGame()
     {
         // pass data to update
         foreach (IDataPersistence dataPersistenceObject in dataPersistenceObjects)
         {
-            Debug.Log(dataPersistenceObject);
             dataPersistenceObject.SaveData(ref gameData);
         }
 
@@ -145,4 +159,4 @@ public class DataPersistenceManager : MonoBehaviour
     {
         return dataHandler.LoadAllSaves();
     }
-}
+}
\ No newline at end of file
diff --git a/IF3210-2024-Unity-AFK/Assets/Code/Scripts/FPSController.cs b/IF3210-2024-Unity-AFK/Assets/Code/Scripts/FPSController.cs
index 9a78b763746a9ec194ce6296918cc30297a26009..8c340463006867f96122585332f66269cb3d0bbf 100644
--- a/IF3210-2024-Unity-AFK/Assets/Code/Scripts/FPSController.cs
+++ b/IF3210-2024-Unity-AFK/Assets/Code/Scripts/FPSController.cs
@@ -47,7 +47,12 @@ public class FPSController : BaseBehaviour, IDataPersistence
         Cursor.lockState = CursorLockMode.Locked;
         Cursor.visible = false;
 
-        GameManager.StartQuest(firstQuestId);
+        QuestManager qm = GameObject.Find("QuestManager").GetComponent<QuestManager>();
+
+        if (!qm.GetQuestById(firstQuestId).state.Equals(QuestState.FINISHED))
+        {
+            GameManager.StartQuest(firstQuestId);
+        }
         pistol.SetActive(false);
         shotgun.SetActive(false);
         sword.SetActive(false);
diff --git a/IF3210-2024-Unity-AFK/Assets/Code/Scripts/Quest/QuestManager.cs b/IF3210-2024-Unity-AFK/Assets/Code/Scripts/Quest/QuestManager.cs
index 1cd827e66daf747936058b9c78159d3b9a6e2174..8ae24a01c009438b0ba519d6fb23fae8396cb46c 100644
--- a/IF3210-2024-Unity-AFK/Assets/Code/Scripts/Quest/QuestManager.cs
+++ b/IF3210-2024-Unity-AFK/Assets/Code/Scripts/Quest/QuestManager.cs
@@ -103,7 +103,7 @@ public class QuestManager : MonoBehaviour, IDataPersistence
         return idToQuestMap;
     }
 
-    private Quest GetQuestById(string id)
+    public Quest GetQuestById(string id)
     {
         return questMap[id];
     }
@@ -136,9 +136,13 @@ public class QuestManager : MonoBehaviour, IDataPersistence
     }
     public void SaveData(ref GameData data)
     {
+        int idx = 0;
         foreach (Quest quest in questMap.Values)
         {
-            data.questState.Append((int) quest.state);
+            data.questState[idx] = (int) quest.state;
+            Debug.Log("stettt " + (int) quest.state);
+
+            idx++;
         }
     }
 }