diff --git a/out/artifacts/bagel_jar/bagel.jar b/out/artifacts/bagel_jar/bagel.jar
index cc3f1f15591a1351c96740c2d06e06d1475e2b38..2b915e213697e81500ccf9ed19a499a0e238ff7b 100644
Binary files a/out/artifacts/bagel_jar/bagel.jar and b/out/artifacts/bagel_jar/bagel.jar differ
diff --git a/res/ActorExtensionPack/UI/nextLevel.png b/res/ActorExtensionPack/UI/nextLevel.png
new file mode 100644
index 0000000000000000000000000000000000000000..785c70f21ee84e9544d60cb4719ce3b79683f751
Binary files /dev/null and b/res/ActorExtensionPack/UI/nextLevel.png differ
diff --git a/src/Level/EndPanel.java b/src/Level/EndPanel.java
index f303c1edf8101a87d2c4797f375009270fd8db55..abc578f472c431d3bb51a5dfe487f863f21f59b5 100644
--- a/src/Level/EndPanel.java
+++ b/src/Level/EndPanel.java
@@ -3,8 +3,10 @@ package Level;
 import Music.MusicPlayer;
 import Music.MusicPlayerManager;
 import Page.GameStage;
+import UI.Button;
 import UI.Pane;
 import UI.TextBox;
+import bagel.Image;
 import bagel.util.Colour;
 import myUtil.Vec2D;
 
diff --git a/src/Level/LevelManager.java b/src/Level/LevelManager.java
index 380c9ad2694b904597522c0aecfbc42b45789522..18c0952fd59fbcd9da66e1d94564128058430a40 100644
--- a/src/Level/LevelManager.java
+++ b/src/Level/LevelManager.java
@@ -3,9 +3,13 @@ package Level;
 import java.util.ArrayList;
 
 public class LevelManager {
+    private static final int INVALID = -1;
+
     private static LevelManager levelManager = null;
 
-    ArrayList<Level> levels = new ArrayList<Level>();
+    public int currentLevel = INVALID;
+
+    private ArrayList<Level> levels = new ArrayList<Level>();
 
     public static final boolean[] PLAYING_INVENTORY = {false, false, false, false, false, false, false, false, true, true, true, true, false};
     public static final boolean[] MAKING_INVENTORY = {true, true, true, true, true, true, true, true, true, true, true, true, true};
@@ -37,7 +41,15 @@ public class LevelManager {
     }
 
     public Level getLevel(int num) {
+        currentLevel = num;
         return levels.get(num-1).clone();
     }
 
+    public int getCurrentLevel() {
+        return currentLevel;
+    }
+
+    public boolean hasNextLevel() {
+        return (currentLevel + 1) <= levels.size();
+    }
 }
diff --git a/src/Level/MyLevelManager.java b/src/Level/MyLevelManager.java
index 99c1c7a7c19f2beb632d771b327aa71504c0f433..6473bfb8cf945059da717c864d40fdcd3da5142b 100644
--- a/src/Level/MyLevelManager.java
+++ b/src/Level/MyLevelManager.java
@@ -8,8 +8,12 @@ import java.util.ArrayList;
 import java.util.stream.Stream;
 
 public class MyLevelManager {
+    private static final int INVALID = -1;
+
     private static MyLevelManager myLevelManager = null;
 
+    public int currentLevel = INVALID;
+
     ArrayList<Level> levels = new ArrayList<Level>();
 
     private MyLevelManager() {
@@ -33,6 +37,7 @@ public class MyLevelManager {
     }
 
     public Level getLevel(int num) {
+        currentLevel = num;
         return levels.get(num - 1).clone();
     }
 
@@ -43,4 +48,12 @@ public class MyLevelManager {
     public static void refresh() {
         myLevelManager = new MyLevelManager();
     }
+
+    public int getCurrentLevel() {
+        return currentLevel;
+    }
+
+    public boolean hasNextLevel() {
+        return (currentLevel + 1) <= levels.size();
+    }
 }
diff --git a/src/ShadowLifeGame.java b/src/ShadowLifeGame.java
index 2d8f71fd56d1524e0b93c4ef1cb7c20040097e27..023a2277917dcd514423305a0686fcbc972f3885 100644
--- a/src/ShadowLifeGame.java
+++ b/src/ShadowLifeGame.java
@@ -60,6 +60,18 @@ public class ShadowLifeGame extends AbstractGame {
         }
     };
 
+    Button nextLevel = new Button(new Image("res/ActorExtensionPack/UI/nextLevel.png"), new Vec2D(823, 0)) {
+        @Override
+        public void event() {
+            GameStage.getInstance().goTo(GameStage.GAME_PAGE + GameStage.LOADING);
+            if (fromMyLevel) {
+                level = MyLevelManager.getInstance().getLevel(MyLevelManager.getInstance().currentLevel + 1);
+            } else {
+                level = LevelManager.getInstance().getLevel(LevelManager.getInstance().currentLevel + 1);
+            }
+        }
+    };
+
     //create level button
     Button levelButton = new Button(new Image("res/ActorExtensionPack/UI/LevelMenu.png"), new Vec2D(749, 0)) {
         @Override
@@ -69,6 +81,7 @@ public class ShadowLifeGame extends AbstractGame {
             }
             if (fromMyLevel) {
                 GameStage.getInstance().goTo(GameStage.MY_LEVEL_PAGE);
+                fromMyLevel = false;
             }
             if (GameStage.getInstance().getCurrentStage() == GameStage.MAKE_PAGE) {
                 GameStage.getInstance().goTo(GameStage.MY_LEVEL_PAGE);
@@ -104,6 +117,7 @@ public class ShadowLifeGame extends AbstractGame {
             }
             startPage.display();
         } else if (GameStage.getInstance().getCurrentStage() == GameStage.LEVEL_SELECT_PAGE) {
+            fromMyLevel = false;
             levelPage.display();
             if (levelPage.getLevelChosen() != INVALID) {
                 GameStage.getInstance().goTo(GameStage.GAME_PAGE + GameStage.LOADING);
@@ -117,9 +131,17 @@ public class ShadowLifeGame extends AbstractGame {
                 levelButton.onClick();
             }
             if (level.getState() == Level.WIN) {
+                if (fromMyLevel && MyLevelManager.getInstance().hasNextLevel()) {
+                    nextLevel.display();
+                    nextLevel.onClick();
+                } else if (!fromMyLevel && LevelManager.getInstance().hasNextLevel()) {
+                    nextLevel.display();
+                    nextLevel.onClick();
+                }
                 levelButton.display();
                 levelButton.onClick();
             }
+
         } else if (GameStage.getInstance().getCurrentStage() == GameStage.MAKE_PAGE) {
             if (makeLevel == null) {
                 makeLevel = sampleLevel.clone();
@@ -138,8 +160,8 @@ public class ShadowLifeGame extends AbstractGame {
                 makeLevel = null;
             }
             myLevelPage.display();
-            fromMyLevel = true;
             if (myLevelPage.getLevelChosen() != INVALID) {
+                fromMyLevel = true;
                 GameStage.getInstance().goTo(GameStage.GAME_PAGE + GameStage.LOADING);
                 level = MyLevelManager.getInstance().getLevel(myLevelPage.getLevelChosen());
                 myLevelPage.setLevelChosen(INVALID);
@@ -191,6 +213,4 @@ public class ShadowLifeGame extends AbstractGame {
         progress.addFrame(f9);
         progress.addFrame(f9);
     }
-
-
 }