diff --git a/src/game.h b/src/game.h
index fc306d4..be3ca0d 100644
--- a/src/game.h
+++ b/src/game.h
@@ -226,8 +226,9 @@ namespace Game {
 
         if (slot > -1) {
             if (forced) {
+                level->loadGame(slot);
                 level->loadLevel(saveSlots[slot].getLevelID());
-                level->loadNextLevel();
+                level->loadNextLevelData();
             } else {
                 level->loadGame(slot);
             }
diff --git a/src/level.h b/src/level.h
index a89352c..ed38ea8 100644
--- a/src/level.h
+++ b/src/level.h
@@ -2051,6 +2051,14 @@ struct Level : IGame {
         controller->render(camera->frustum, mesh, type, room.flags.water);
     }
 
+    void loadNextLevelData() {
+        isEnded = true;
+        char buf[64];
+        TR::getGameLevelFile(buf, level.version, nextLevel);
+        nextLevel = TR::LVL_MAX;
+        new Stream(buf, loadLevelAsync);
+    }
+
     void update() {
         if (isEnded) return;
 
@@ -2121,11 +2129,7 @@ struct Level : IGame {
                 showStats = false;
                 return;
             }
-            isEnded = true;
-            char buf[64];
-            TR::getGameLevelFile(buf, level.version, nextLevel);
-            nextLevel = TR::LVL_MAX;
-            new Stream(buf, loadLevelAsync);
+            loadNextLevelData();
             return;
         }