diff --git a/src/aura_engine/events.py b/src/aura_engine/events.py
index 2e92116dad8c131b3002cf2cf85730a2430acf4a..baa7f1ef7540ab11051fbab0c4b33affc70e0a8e 100644
--- a/src/aura_engine/events.py
+++ b/src/aura_engine/events.py
@@ -150,6 +150,7 @@ class EngineEventDispatcher:
         from aura_engine.scheduling.scheduler import AuraScheduler
 
         self.scheduler = AuraScheduler(self.engine)
+        self.scheduler.boot()
         self.call_event("on_initialized", None)
 
     def on_boot(self):
diff --git a/src/aura_engine/scheduling/scheduler.py b/src/aura_engine/scheduling/scheduler.py
index 387eda718eb398d5a5e3fa75207b23c8ed39038c..600607f91534771489c45e6a2302f8df222f2c6e 100644
--- a/src/aura_engine/scheduling/scheduler.py
+++ b/src/aura_engine/scheduling/scheduler.py
@@ -21,10 +21,16 @@
 The scheduler.
 """
 
+from __future__ import annotations
+
 import logging
 import threading
 import time
 
+import aura_engine
+import aura_engine.scheduling.api as api
+import aura_engine.scheduling.timetable as timetable
+import aura_engine.scheduling.utils as utils
 from aura_engine.base.config import AuraConfig
 from aura_engine.base.utils import SimpleUtil as SU
 from aura_engine.control import EngineExecutor
@@ -32,9 +38,6 @@ from aura_engine.core.channels import LoadSourceException
 from aura_engine.engine import Engine, Player
 from aura_engine.resources import ResourceClass, ResourceUtil
 from aura_engine.scheduling.domain import PlaylistItem
-from aura_engine.scheduling.models import AuraDatabaseModel
-from aura_engine.scheduling.timetable import TimetableService
-from aura_engine.scheduling.utils import TimetableRenderer
 
 
 class NoActiveTimeslotException(Exception):
@@ -55,37 +58,41 @@ class AuraScheduler(threading.Thread):
 
     """
 
-    config: AuraConfig = None
-    logger = None
-    engine: Engine = None
-    exit_event: threading.Event = None
-    timetable_renderer: TimetableRenderer = None
-    timetable: TimetableService = None
-    message_timer = []
-    is_initialized: bool = None
-    is_engine_ready: bool = None
-
-    def __init__(self, engine):
+    config: AuraConfig
+    logger: logging.Logger
+    engine: Engine
+    timetable: timetable.TimetableService
+    timetable_renderer: utils.TimetableRenderer
+    exit_event: threading.Event
+    is_initialized: bool
+    is_engine_ready: bool
+
+    def __init__(self, engine: aura_engine):
         self.config = AuraConfig.config()
         self.logger = logging.getLogger("engine")
-        self.timetable = TimetableService()
-        self.timetable_renderer = TimetableRenderer(self)
+        self.timetable = timetable.TimetableService(self.config.get("cache_dir"))
+        self.timetable_renderer = utils.TimetableRenderer(self)
         self.engine = engine
         self.engine.scheduler = self
         self.is_soundsytem_init = False
 
         # Scheduler Initialization
-        AuraDatabaseModel.init_database()
+        self.exit_event = None
         self.is_initialized = False
         self.is_engine_ready = False
 
+    def boot(self):
+        """
+        Start the scheduler in a thread.
+        """
         # Init scheduling thread
         threading.Thread.__init__(self)
         self.exit_event = threading.Event()
         self.start()
 
     def run(self):
-        """Execute the scheduler.
+        """
+        Execute the scheduler.
 
         Called when thread is started via `start()`. It does the following:
 
@@ -107,7 +114,7 @@ class AuraScheduler(threading.Thread):
                 self.logger.info(SU.cyan(msg))
 
                 # Load some stuff from the API in any case
-                self.timetable.refresh()
+                self.timetable.refresh(api.ApiFetcher())
 
                 # Queue only when the engine is ready to play
                 if self.is_initialized: