diff --git a/Assets/Scenes/Level01.unity b/Assets/Scenes/Level01.unity
index c5e9d798fa09f114e45c7c0a42bacbe12ef028d4..ff2d5fd0b03d5e336f6766b40f795abcfedf8291 100644
--- a/Assets/Scenes/Level01.unity
+++ b/Assets/Scenes/Level01.unity
@@ -478,7 +478,7 @@ MonoBehaviour:
   m_Name: 
   m_EditorClassIdentifier: 
   enemy: {fileID: 153412, guid: 548c56f4bcf4db24b8aa057e9846a005, type: 3}
-  spawnTime: 10
+  spawnTime: 15
   spawnPoints:
   - {fileID: 345275349}
   - {fileID: 1725468539}
@@ -498,7 +498,7 @@ MonoBehaviour:
   m_Name: 
   m_EditorClassIdentifier: 
   enemy: {fileID: 100000, guid: ea3c2728ef33e3a4d99527a86cda6465, type: 3}
-  spawnTime: 3
+  spawnTime: 12
   spawnPoints:
   - {fileID: 345275349}
   - {fileID: 1725468539}
@@ -518,7 +518,7 @@ MonoBehaviour:
   m_Name: 
   m_EditorClassIdentifier: 
   enemy: {fileID: 100002, guid: e5171f72421770240bd7c3989fe351e3, type: 3}
-  spawnTime: 2
+  spawnTime: 10
   spawnPoints:
   - {fileID: 345275349}
   - {fileID: 1725468539}
@@ -565,7 +565,7 @@ MonoBehaviour:
   m_Name: 
   m_EditorClassIdentifier: 
   enemy: {fileID: 100002, guid: 6f16db424f602b84a9c3d36cee353965, type: 3}
-  spawnTime: 3
+  spawnTime: 15
   spawnPoints:
   - {fileID: 345275349}
   - {fileID: 1725468539}
@@ -11242,6 +11242,7 @@ Transform:
   m_Children:
   - {fileID: 14871712}
   - {fileID: 636207316}
+  - {fileID: 1656483646}
   m_Father: {fileID: 0}
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
 --- !u!1 &1212966710
@@ -12923,6 +12924,64 @@ 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
 --- !u!1 &1695883712
 GameObject:
   m_ObjectHideFlags: 0
diff --git a/Assets/Scenes/MainMenu.unity b/Assets/Scenes/MainMenu.unity
index 1fc8c0b38c18365bd358a8ddd340aa8db1bfeb0e..771bcbfc708202ef27b4a7ce5a90d72e72650b33 100644
--- a/Assets/Scenes/MainMenu.unity
+++ b/Assets/Scenes/MainMenu.unity
@@ -1006,6 +1006,64 @@ CanvasRenderer:
   m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 309555273}
   m_CullTransparentMesh: 1
+--- !u!1 &309830952
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 309830954}
+  - component: {fileID: 309830953}
+  m_Layer: 0
+  m_Name: LevelManager
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!114 &309830953
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 309830952}
+  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
+--- !u!4 &309830954
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 309830952}
+  serializedVersion: 2
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 415.86005, y: 228.66164, z: -2.693035}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children: []
+  m_Father: {fileID: 0}
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
 --- !u!1 &329895729
 GameObject:
   m_ObjectHideFlags: 0
@@ -7018,3 +7076,4 @@ SceneRoots:
   - {fileID: 167408043}
   - {fileID: 1097292934}
   - {fileID: 1460444564}
+  - {fileID: 309830954}
diff --git a/Assets/Scripts/Global/MainMenu.cs b/Assets/Scripts/Global/MainMenu.cs
index 68b68fe5b1d2c0f280ea2a95085fda03e1cbcb19..33e8ad6fd56b5cc1d95298efe67fa29a04177834 100644
--- a/Assets/Scripts/Global/MainMenu.cs
+++ b/Assets/Scripts/Global/MainMenu.cs
@@ -1,3 +1,4 @@
+using Nightmare;
 using UnityEngine;
 using UnityEngine.Audio;
 using UnityEngine.SceneManagement;
@@ -33,7 +34,7 @@ public class MainMenu : MonoBehaviour
 
     public void PlayGame()
     {
-        SceneManager.LoadScene("Cutscene01");
+        LevelManager.Instance.Next();
     }
 
     public void QuitGame()
diff --git a/Assets/Scripts/Managers/CutsceneManager.cs b/Assets/Scripts/Managers/CutsceneManager.cs
index 2cf4d1660a2147ec29d48b189d3e91f30b9eb662..93855b8b197ecfc881018fd26d5991fc0867a946 100644
--- a/Assets/Scripts/Managers/CutsceneManager.cs
+++ b/Assets/Scripts/Managers/CutsceneManager.cs
@@ -1,3 +1,4 @@
+using Nightmare;
 using System;
 using System.Collections;
 using System.Collections.Generic;
@@ -6,35 +7,8 @@ using UnityEngine.SceneManagement;
 
 public class CutsceneManager : MonoBehaviour
 {
-    readonly int maxScene = 8;
-
     public void NextScene()
     {
-        // Get the current scene
-        Scene currentScene = SceneManager.GetActiveScene();
-
-        // Extract the number from the scene name
-        string sceneName = currentScene.name;
-        string numberString = sceneName[^2..];
-
-        // Convert the number string to an integer
-        int sceneNumber = Int32.Parse(numberString) + 1;
-        if (sceneNumber > maxScene)
-        {
-            SceneManager.LoadScene("Level01");
-            return;
-        }
-
-        string newSceneName = "Cutscene";
-
-        if (sceneNumber < 10)
-        {
-            newSceneName += "0" + sceneNumber;
-        } else
-        {
-            newSceneName += sceneNumber;
-        }
-
-        SceneManager.LoadScene(newSceneName);
+        LevelManager.Instance.Next();
     }
 }
diff --git a/Assets/Scripts/Managers/GameOverManager.cs b/Assets/Scripts/Managers/GameOverManager.cs
index f005c830e97552b611a789dde7235ee4014427c1..0aae29ad05f7cd1e69f2ba02d2c890473d6cbcca 100644
--- a/Assets/Scripts/Managers/GameOverManager.cs
+++ b/Assets/Scripts/Managers/GameOverManager.cs
@@ -37,17 +37,12 @@ namespace Nightmare
 
         public void ResetLevel()
         {
-            //ScoreManager.score = 0;
-            //LevelManager lm = FindObjectOfType<LevelManager>();
-            //lm.LoadInitialLevel();
-            //anim.SetBool("GameOver", false);
-            //playerHealth.ResetPlayer();
-            SceneManager.LoadScene("Level01");
+            LevelManager.Instance.ResetLevel();
         }
 
         public void ExitGame()
         {
-            SceneManager.LoadScene("MainMenu");
+            LevelManager.Instance.Exit();
         }
 
         public void ShowGameOverButtons()
diff --git a/Assets/Scripts/Managers/GrenadeManager.cs b/Assets/Scripts/Managers/GrenadeManager.cs
deleted file mode 100644
index 982c2d0fc5fe68f19a8325df44db7b731a1caf15..0000000000000000000000000000000000000000
--- a/Assets/Scripts/Managers/GrenadeManager.cs
+++ /dev/null
@@ -1,31 +0,0 @@
-using UnityEngine;
-using UnityEngine.UI;
-using System.Collections;
-
-namespace Nightmare
-{
-    public class GrenadeManager : MonoBehaviour
-    {
-        public static int grenades;        // The player's score.
-
-
-        Text gText;                      // Reference to the Text component.
-
-
-        void Awake()
-        {
-            // Set up the reference.
-            gText = GetComponent<Text>();
-
-            // Reset the score.
-            grenades = 0;
-        }
-
-
-        void Update()
-        {
-            // Set the displayed text to be the word "Score" followed by the score value.
-            gText.text = "Grenades: " + grenades;
-        }
-    }
-}
\ No newline at end of file
diff --git a/Assets/Scripts/Managers/GrenadeManager.cs.meta b/Assets/Scripts/Managers/GrenadeManager.cs.meta
deleted file mode 100644
index e5a8b21783d64b0c627b13aecdee8acd97085aa4..0000000000000000000000000000000000000000
--- a/Assets/Scripts/Managers/GrenadeManager.cs.meta
+++ /dev/null
@@ -1,13 +0,0 @@
-fileFormatVersion: 2
-guid: 1e0abf995d32749428603ba20a9d41fc
-timeCreated: 1518919815
-licenseType: Pro
-MonoImporter:
-  externalObjects: {}
-  serializedVersion: 2
-  defaultReferences: []
-  executionOrder: 0
-  icon: {instanceID: 0}
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 
diff --git a/Assets/Scripts/Managers/LevelManager.cs b/Assets/Scripts/Managers/LevelManager.cs
index 78ba5868edffd9d204cc7a6cb663afc9b4d75186..000860c247a95151901642b51fac4c715a1c44a3 100644
--- a/Assets/Scripts/Managers/LevelManager.cs
+++ b/Assets/Scripts/Managers/LevelManager.cs
@@ -1,96 +1,139 @@
-using System.Collections.Generic;
-using UnityEngine;
+using UnityEngine;
 using UnityEngine.SceneManagement;
 
 namespace Nightmare
 {
     public class LevelManager : MonoBehaviour
     {
-        public string[] levels;
-
-        private int currentLevel = 0;
-        private Scene currentScene;
-        private PlayerMovement playerMove;
-        private Vector3 playerRespawn;
-        private CinematicController cinema;
-
-        void OnEnable()
-        {
-            SceneManager.sceneLoaded += OnSceneLoaded;
-            SceneManager.sceneUnloaded += OnSceneUnloaded;
-        }
-
-        void Start()
+        public string[] levels = {
+            "MainMenu",
+            "Cutscene01",
+            "Cutscene02",
+            "Cutscene03",
+            "Level01",
+            "Cutscene04",
+            "Level01",
+            "Cutscene05",
+            "Level01",
+            "Cutscene06",
+            "Level02",
+            "Cutscene07",
+            "Cutscene08"
+        };
+
+        private static LevelManager instance;
+        private int currentIndex = 0;
+
+        public static LevelManager Instance
         {
-            cinema = FindObjectOfType<CinematicController>();
-            SceneManager.LoadSceneAsync(levels[0], LoadSceneMode.Additive);
-            playerMove = FindObjectOfType<PlayerMovement>();
-            playerRespawn = playerMove.transform.position;
-        }
-
-        public void AdvanceLevel()
-        {
-            LoadLevel(currentLevel + 1);
+            get
+            {
+                if (instance == null)
+                {
+                    instance = FindObjectOfType<LevelManager>();
+                    if (instance == null)
+                    {
+                        GameObject managerObject = new GameObject("LevelManager");
+                        instance = managerObject.AddComponent<LevelManager>();
+                    }
+                }
+                return instance;
+            }
         }
 
-        public void LoadInitialLevel()
+        private void Awake()
         {
-            LoadLevel(0);
+            if (instance == null)
+            {
+                instance = this;
+                DontDestroyOnLoad(gameObject);
+            }
+            else
+            {
+                Destroy(gameObject);
+            }
         }
 
-        private void LoadLevel(int level)
+        private void Update()
         {
-            currentLevel = level;
-
-            //Load next level in background
-            string loadingScene = levels[level % levels.Length];
-            SceneManager.LoadSceneAsync(loadingScene, LoadSceneMode.Additive);
+            // Check if the Enter key is pressed
+            if (Input.GetKeyDown(KeyCode.Comma))
+            {
+                // Call the Next() method
+                Next();
+            }
         }
 
-        void OnSceneLoaded(Scene scene, LoadSceneMode mode)
+        public void LoadScene()
         {
-            if (mode != LoadSceneMode.Additive)
-                return;
-
-            playerMove.transform.position = playerRespawn;
-            SceneManager.SetActiveScene(scene);
-
-            DisableOldScene();
-
-            currentScene = scene;
+            if (levels[currentIndex].StartsWith("Cutscene"))
+            {
+                Time.timeScale = 0;
+                bool skip = true;
+                for (int i = 0; i < SceneManager.sceneCount; i++)
+                {
+                    Scene scene = SceneManager.GetSceneAt(i);
+                    if (scene.name.StartsWith("Level"))
+                    {
+                        skip = false;
+                        break;
+                    }
+                }
 
-            // Play realtime cinematic?
-            if (currentLevel > 1)
-                cinema.StartCinematic(CinematicController.CinematicType.Realtime);
+                if (skip)
+                {
+                    SceneManager.LoadSceneAsync(levels[currentIndex], LoadSceneMode.Single);
+                } else
+                {
+                    SceneManager.LoadSceneAsync(levels[currentIndex], LoadSceneMode.Additive);
+                }
+            }
             else
-                cinema.StartCinematic(CinematicController.CinematicType.PreRendered);
-        }
-
-        private void DisableOldScene()
-        {
-            if (currentScene.IsValid())
             {
-                // Disable old scene.
-                GameObject[] oldSceneObjects = currentScene.GetRootGameObjects();
-                for (int i = 0; i < oldSceneObjects.Length; i++)
+                Scene currentLevel = SceneManager.GetSceneAt(0);
+                for (int i = 0; i < SceneManager.sceneCount; i++)
                 {
-                    oldSceneObjects[i].SetActive(false);
+                    Scene scene = SceneManager.GetSceneAt(i);
+                    if (!scene.name.StartsWith("Cutscene"))
+                    {
+                        currentLevel = scene;
+                    } else if (SceneManager.sceneCount != 1)
+                    {
+                        SceneManager.UnloadSceneAsync(scene);
+                    }
                 }
 
-                // Unload it.
-                SceneManager.UnloadSceneAsync(currentScene);
+                if (currentLevel.name != levels[currentIndex])
+                {
+                    SceneManager.LoadSceneAsync(levels[currentIndex], LoadSceneMode.Single);
+                }
+                Time.timeScale = 1;
             }
         }
 
-        void OnSceneUnloaded(Scene scene)
+        public void Next()
         {
+            currentIndex++;
+            if (currentIndex < levels.Length)
+            {
+                LoadScene();
+            }
+            else
+            {
+                Exit();
+            }
+        }
 
+        public void Exit()
+        {
+            currentIndex = 0;
+            SceneManager.LoadScene(levels[currentIndex], LoadSceneMode.Single);
         }
 
-        void OnDisable()
+        public void ResetLevel()
         {
-            SceneManager.sceneLoaded -= OnSceneLoaded;
-            SceneManager.sceneUnloaded -= OnSceneUnloaded;
+            currentIndex = 1;
+            SceneManager.LoadScene(levels[currentIndex], LoadSceneMode.Single);
         }
     }
-}
\ No newline at end of file
+}
diff --git a/Assets/Scripts/Managers/ScoreManager.cs b/Assets/Scripts/Managers/ScoreManager.cs
index ec4c641ba95b911da8295b7ff7e34cd2e16cb991..b04e27f45f28b176b602b1bda23034a57dcba6d8 100644
--- a/Assets/Scripts/Managers/ScoreManager.cs
+++ b/Assets/Scripts/Managers/ScoreManager.cs
@@ -34,7 +34,6 @@ namespace Nightmare
         {
             levelThreshhold = score + LEVEL_INCREASE;
             LevelManager lm = FindObjectOfType<LevelManager>();
-            lm.AdvanceLevel();
         }
     }
 }
\ No newline at end of file
diff --git a/ProjectSettings/ProjectVersion.txt b/ProjectSettings/ProjectVersion.txt
index e3269c93da0696cc9800511d9c9b30bc2f3c6d69..bc915f164c30c08772499ce93c9d96800b8e9c53 100644
--- a/ProjectSettings/ProjectVersion.txt
+++ b/ProjectSettings/ProjectVersion.txt
@@ -1,2 +1,2 @@
-m_EditorVersion: 2022.3.25f1
-m_EditorVersionWithRevision: 2022.3.25f1 (530ae0ba3889)
+m_EditorVersion: 2022.3.24f1
+m_EditorVersionWithRevision: 2022.3.24f1 (334eb2a0b267)