diff --git a/.vscode/launch.json b/.vscode/launch.json
index e5cede45eb921ade7637ae8b3ccc16dfe44984c2..1f0e9f28072a1939db4535e34f120141c88c4b05 100644
--- a/.vscode/launch.json
+++ b/.vscode/launch.json
@@ -8,25 +8,18 @@
             "name": "Start Engine",
             "type": "python",
             "request": "launch",
-            "program": "${workspaceFolder}/run.py",
+            "program": "${workspaceFolder}/src/aura_engine/app.py",
             "console": "integratedTerminal"
         },
         {
-            "name": "Start Engine Core",
+            "name": "Recreate Database",
             "type": "python",
             "request": "launch",
-            "program": "${workspaceFolder}/../engine-core/run.py",
+            "program": "${workspaceFolder}/src/aura_engine/app.py",
             "args": [
+                "--recreate-database"
             ],
             "console": "integratedTerminal"
-        },
-        {
-            "name": "Recreate Database",
-            "type": "python",
-            "request": "launch",
-            "program": "${workspaceFolder}/run.py",
-            "args": ["--recreate-database"],
-            "console": "integratedTerminal"
         }
     ]
 }
\ No newline at end of file
diff --git a/pyproject.toml b/pyproject.toml
index d9e7da76245fabee3a4646909ce39b921ed6dbc3..3e9bd11674c2634330c5a3913944e7b36c7297c5 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -3,7 +3,7 @@ line-length = 99
 target-version = ["py38"]
 # TODO: Use extend-exclude as soon as Debian Bookworm is released.
 exclude = '''
-    ^/run\.py$
+    ^/src/aura_engine/app\.py$
     | ^/python/
 '''
 
diff --git a/src/__init__.py b/src/aura_engine/__init__.py
similarity index 100%
rename from src/__init__.py
rename to src/aura_engine/__init__.py
diff --git a/run.py b/src/aura_engine/app.py
similarity index 87%
rename from run.py
rename to src/aura_engine/app.py
index 19028a662384f4f0136dd1a21dc171709062cf04..46f10f17881bd78474b6311f3298aecb12fbcf6b 100755
--- a/run.py
+++ b/src/aura_engine/app.py
@@ -19,7 +19,6 @@
 
 
 import logging
-import os
 import signal
 import sys
 import threading
@@ -27,16 +26,19 @@ import threading
 from flask import Flask
 from flask_sqlalchemy import SQLAlchemy
 
-from src.base.config import AuraConfig
-from src.base.logger import AuraLogger
-from src.base.utils import SimpleUtil as SU
-from src.scheduling.models import DB
+from base.config import AuraConfig
+from base.logger import AuraLogger
+from scheduling.models import DB
+from engine import Engine
 
 config = AuraConfig()
+
+
 def configure_flask():
     app.config["SQLALCHEMY_DATABASE_URI"] = config.get_database_uri()
-    app.config['BABEL_DEFAULT_LOCALE'] = 'de'
-    app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
+    app.config["BABEL_DEFAULT_LOCALE"] = "de"
+    app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False
+
 
 # FIXME Instantiate SQLAlchemy without the need for Flask
 app = Flask(__name__)
@@ -48,11 +50,11 @@ class EngineRunner:
     """
     EngineRunner is in charge of starting the engine.
     """
+
     logger = None
     config = None
     engine = None
 
-
     def __init__(self):
         """
         Constructor
@@ -61,22 +63,20 @@ class EngineRunner:
         AuraLogger(self.config)
         self.logger = logging.getLogger("AuraEngine")
 
-
     def run(self):
         """
         Starts Engine Core.
         """
-        from src.engine import Engine
-        self.engine = Engine()
 
+        self.engine = Engine()
 
     def recreate_db(self):
         """
         Initializes the database and deletes any existing content.
         """
-        from src.scheduling.models import AuraDatabaseModel
-        AuraDatabaseModel.recreate_db()
+        from scheduling.models import AuraDatabaseModel
 
+        AuraDatabaseModel.recreate_db()
 
     def exit_gracefully(self, signum, frame):
         """
@@ -92,7 +92,6 @@ class EngineRunner:
         sys.exit(0)
 
 
-
 #
 # START THE ENGINE
 #
diff --git a/src/base/__init__.py b/src/aura_engine/base/__init__.py
similarity index 100%
rename from src/base/__init__.py
rename to src/aura_engine/base/__init__.py
diff --git a/src/base/api.py b/src/aura_engine/base/api.py
similarity index 98%
rename from src/base/api.py
rename to src/aura_engine/base/api.py
index 79868a18af0b25755f4162eeb2049402e106f489..5eb11ed9c46a159366497ac9ff249ad1775f1392 100644
--- a/src/base/api.py
+++ b/src/aura_engine/base/api.py
@@ -22,8 +22,8 @@ import logging
 
 import requests
 
-from src.base.utils import DotDict
-from src.base.utils import SimpleUtil as SU
+from base.utils import DotDict
+from base.utils import SimpleUtil as SU
 
 
 class SimpleApi:
diff --git a/src/base/config.py b/src/aura_engine/base/config.py
similarity index 95%
rename from src/base/config.py
rename to src/aura_engine/base/config.py
index dd13ad5c6fcf1de2abac5a6ef40900016d967525..7a95d6360ae6f0852cc9696041c9753bca075bc1 100644
--- a/src/base/config.py
+++ b/src/aura_engine/base/config.py
@@ -47,16 +47,19 @@ class AuraConfig:
         """
         self.logger = logging.getLogger("AuraEngine")
         config_file = Path(ini_path)
+        project_root = Path(__file__).parent.parent.parent.parent.absolute()
+
         if not config_file.is_file():
-            ini_path = "%s/config/engine.ini" % Path(__file__).parent.parent.parent.absolute()
+            ini_path = f"{project_root}/config/engine.ini"
 
         self.ini_path = ini_path
         self.load_config()
         AuraConfig.instance = self
 
         # Defaults
+        self.set("install_dir", os.path.realpath(project_root))
         self.set("config_dir", os.path.dirname(ini_path))
-        self.set("install_dir", os.path.realpath(__file__ + "../../../.."))
+        print(f"Using configuration at: {ini_path}")
 
     @staticmethod
     def config():
diff --git a/src/base/exceptions.py b/src/aura_engine/base/exceptions.py
similarity index 100%
rename from src/base/exceptions.py
rename to src/aura_engine/base/exceptions.py
diff --git a/src/base/logger.py b/src/aura_engine/base/logger.py
similarity index 100%
rename from src/base/logger.py
rename to src/aura_engine/base/logger.py
diff --git a/src/base/utils.py b/src/aura_engine/base/utils.py
similarity index 100%
rename from src/base/utils.py
rename to src/aura_engine/base/utils.py
diff --git a/src/channels.py b/src/aura_engine/channels.py
similarity index 99%
rename from src/channels.py
rename to src/aura_engine/channels.py
index 1a000fbb129f729dae1f44090aeda50af4d789f0..f97f3af3989d231e7ac4956f3e6e698f89df0045 100644
--- a/src/channels.py
+++ b/src/aura_engine/channels.py
@@ -19,8 +19,8 @@
 
 from enum import Enum
 
-from src.base.utils import SimpleUtil as SU
-from src.resources import ResourceType
+from base.utils import SimpleUtil as SU
+from resources import ResourceType
 
 
 class TransitionType(Enum):
diff --git a/src/client/client.py b/src/aura_engine/client/client.py
similarity index 98%
rename from src/client/client.py
rename to src/aura_engine/client/client.py
index 64c46c3f3f6d4354e95cd89816a4c9bfed1a494f..c5941e9a05155062d273f64826868eb543212f2d 100644
--- a/src/client/client.py
+++ b/src/aura_engine/client/client.py
@@ -23,8 +23,8 @@ import socket
 import urllib.parse
 from multiprocessing import Lock
 
-from src.base.exceptions import LQConnectionError
-from src.base.utils import TerminalColors
+from base.exceptions import LQConnectionError
+from base.utils import TerminalColors
 
 
 class LiquidSoapClient:
diff --git a/src/client/connector.py b/src/aura_engine/client/connector.py
similarity index 97%
rename from src/client/connector.py
rename to src/aura_engine/client/connector.py
index bd479931ac2d3be776dca52f999077ec07fa7bfb..506400e138fbd5915b5111e9baf29413353bb1a0 100644
--- a/src/client/connector.py
+++ b/src/aura_engine/client/connector.py
@@ -20,11 +20,11 @@
 import logging
 import time
 
-from src.base.config import AuraConfig
-from src.base.exceptions import LQConnectionError
-from src.base.utils import SimpleUtil as SU
-from src.base.utils import TerminalColors
-from src.client.playerclient import LiquidSoapPlayerClient
+from base.config import AuraConfig
+from base.exceptions import LQConnectionError
+from base.utils import SimpleUtil as SU
+from base.utils import TerminalColors
+from client.playerclient import LiquidSoapPlayerClient
 
 
 class PlayerConnector:
diff --git a/src/client/playerclient.py b/src/aura_engine/client/playerclient.py
similarity index 99%
rename from src/client/playerclient.py
rename to src/aura_engine/client/playerclient.py
index 825a4632720b01d9700192c79355adb1d849a606..7b3c97872115c7eab44375e1cd7f7c68848d54de 100644
--- a/src/client/playerclient.py
+++ b/src/aura_engine/client/playerclient.py
@@ -17,7 +17,7 @@
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 
-from src.client.client import LiquidSoapClient
+from client.client import LiquidSoapClient
 
 
 class LiquidSoapPlayerClient(LiquidSoapClient):
diff --git a/src/control.py b/src/aura_engine/control.py
similarity index 98%
rename from src/control.py
rename to src/aura_engine/control.py
index bfd94cb8d9e4a429a2f93fb631b47e01698f40c9..b99e7018aedc0989e73f4c3a57137e22fb6816b3 100644
--- a/src/control.py
+++ b/src/aura_engine/control.py
@@ -27,9 +27,9 @@ from threading import Lock, Thread, Timer
 from http_parser.http import HttpStream
 from http_parser.reader import SocketReader
 
-from src.base.api import LiquidsoapUtil as LU
-from src.base.config import AuraConfig
-from src.base.utils import SimpleUtil as SU
+from base.api import LiquidsoapUtil as LU
+from base.config import AuraConfig
+from base.utils import SimpleUtil as SU
 
 
 class EngineControlInterface:
@@ -230,7 +230,7 @@ class EngineExecutor(Timer):
             param (object):                 Parameter passt to the function
         """
         self._lock = Lock()
-        from src.engine import Engine
+        from engine import Engine
 
         now_unix = Engine.engine_time()
 
diff --git a/src/engine.py b/src/aura_engine/engine.py
similarity index 98%
rename from src/engine.py
rename to src/aura_engine/engine.py
index 7a0938f81ec8f6a58004609ac0370047a6628585..2c40bca8394b0a2481e0319e09317e815d5e8c37 100644
--- a/src/engine.py
+++ b/src/aura_engine/engine.py
@@ -24,17 +24,17 @@ from contextlib import suppress
 from threading import Thread
 
 import meta
-from src.base.api import LiquidsoapUtil as LU
-from src.base.config import AuraConfig
-from src.base.exceptions import (
+from base.api import LiquidsoapUtil as LU
+from base.config import AuraConfig
+from base.exceptions import (
     InvalidChannelException,
     LoadSourceException,
     LQConnectionError,
     LQStreamException,
 )
-from src.base.utils import DotDict
-from src.base.utils import SimpleUtil as SU
-from src.channels import (
+from base.utils import DotDict
+from base.utils import SimpleUtil as SU
+from channels import (
     Channel,
     ChannelResolver,
     ChannelRouter,
@@ -44,11 +44,11 @@ from src.channels import (
     ResourceType,
     TransitionType,
 )
-from src.client.connector import PlayerConnector
-from src.control import EngineControlInterface
-from src.events import EngineEventDispatcher
-from src.mixer import Mixer, MixerType
-from src.resources import ResourceClass, ResourceUtil
+from client.connector import PlayerConnector
+from control import EngineControlInterface
+from events import EngineEventDispatcher
+from mixer import Mixer, MixerType
+from resources import ResourceClass, ResourceUtil
 
 
 class Engine:
diff --git a/src/events.py b/src/aura_engine/events.py
similarity index 97%
rename from src/events.py
rename to src/aura_engine/events.py
index 8457fffe561a35df63c1b458405159528fade985..086647478dbd26a9bb88c7bac78832948a68a137 100644
--- a/src/events.py
+++ b/src/aura_engine/events.py
@@ -21,10 +21,10 @@ import datetime
 import logging
 from threading import Thread
 
-from src.base.config import AuraConfig
-from src.plugins.clock import ClockInfoHandler
-from src.plugins.mailer import AuraMailer
-from src.plugins.monitor import AuraMonitor
+from base.config import AuraConfig
+from plugins.clock import ClockInfoHandler
+from plugins.mailer import AuraMailer
+from plugins.monitor import AuraMonitor
 
 
 class EventBinding:
@@ -147,7 +147,7 @@ class EngineEventDispatcher:
         Important: Subsequent events are called synchronously, hence blocking.
         """
         self.logger.debug("on_initialized(..)")
-        from src.scheduling.scheduler import AuraScheduler
+        from scheduling.scheduler import AuraScheduler
 
         self.scheduler = AuraScheduler(self.engine)
         self.call_event("on_initialized", None)
diff --git a/meta.py b/src/aura_engine/meta.py
similarity index 100%
rename from meta.py
rename to src/aura_engine/meta.py
diff --git a/src/mixer.py b/src/aura_engine/mixer.py
similarity index 99%
rename from src/mixer.py
rename to src/aura_engine/mixer.py
index df7d7a9e51e0b9f616ba38bdfb909f83149da160..04e6c1d537f4289de73d45c501ec4aa258f5f74a 100644
--- a/src/mixer.py
+++ b/src/aura_engine/mixer.py
@@ -21,9 +21,9 @@ import logging
 import time
 from enum import Enum
 
-from src.base.api import LiquidsoapUtil as LU
-from src.base.exceptions import LQConnectionError
-from src.base.utils import SimpleUtil as SU
+from base.api import LiquidsoapUtil as LU
+from base.exceptions import LQConnectionError
+from base.utils import SimpleUtil as SU
 
 
 class MixerType(Enum):
diff --git a/src/plugins/__init__.py b/src/aura_engine/plugins/__init__.py
similarity index 100%
rename from src/plugins/__init__.py
rename to src/aura_engine/plugins/__init__.py
diff --git a/src/plugins/clock.py b/src/aura_engine/plugins/clock.py
similarity index 97%
rename from src/plugins/clock.py
rename to src/aura_engine/plugins/clock.py
index 5f82b10ad2019837a990cbfdea861d4dfd900ff5..2838c7d2ec7741768a0d1f1fea0c0d0863c9cb4e 100644
--- a/src/plugins/clock.py
+++ b/src/aura_engine/plugins/clock.py
@@ -20,10 +20,10 @@
 import logging
 from datetime import datetime, timedelta
 
-from src.base.api import SimpleApi
-from src.base.config import AuraConfig
-from src.base.utils import DotDict
-from src.resources import ResourceUtil
+from base.api import SimpleApi
+from base.config import AuraConfig
+from base.utils import DotDict
+from resources import ResourceUtil
 
 
 class ClockInfoHandler:
diff --git a/src/plugins/mailer.py b/src/aura_engine/plugins/mailer.py
similarity index 98%
rename from src/plugins/mailer.py
rename to src/aura_engine/plugins/mailer.py
index d36d7f384530ca4fb75c496329ac706482527161..e3b07a2a1c7125b720bf846120105b2dc67e14fa 100644
--- a/src/plugins/mailer.py
+++ b/src/aura_engine/plugins/mailer.py
@@ -21,8 +21,8 @@ import logging
 import smtplib
 from email.message import EmailMessage
 
-from src.base.config import AuraConfig
-from src.base.utils import SimpleUtil as SU
+from base.config import AuraConfig
+from base.utils import SimpleUtil as SU
 
 
 class MailingException(Exception):
diff --git a/src/plugins/monitor.py b/src/aura_engine/plugins/monitor.py
similarity index 99%
rename from src/plugins/monitor.py
rename to src/aura_engine/plugins/monitor.py
index 99cd0076c64f4eb63cd0717f6d333909a86c198c..4de7c79bcedb7980e83a526f5b3c502d31331598 100644
--- a/src/plugins/monitor.py
+++ b/src/aura_engine/plugins/monitor.py
@@ -30,8 +30,8 @@ from socket import AF_INET, SO_BROADCAST, SOCK_DGRAM, SOL_SOCKET, socket
 import requests
 
 import meta
-from src.base.config import AuraConfig
-from src.base.utils import SimpleUtil as SU
+from base.config import AuraConfig
+from base.utils import SimpleUtil as SU
 
 # Exceptions
 
diff --git a/src/resources.py b/src/aura_engine/resources.py
similarity index 100%
rename from src/resources.py
rename to src/aura_engine/resources.py
diff --git a/src/scheduling/__init__.py b/src/aura_engine/scheduling/__init__.py
similarity index 100%
rename from src/scheduling/__init__.py
rename to src/aura_engine/scheduling/__init__.py
diff --git a/src/scheduling/api.py b/src/aura_engine/scheduling/api.py
similarity index 99%
rename from src/scheduling/api.py
rename to src/aura_engine/scheduling/api.py
index 2bec6bbd7a9c56c81bef7d8b285a801742c376c3..80c5cc5330ba3cad51b90da8c2cbb5ab9f64b8dc 100644
--- a/src/scheduling/api.py
+++ b/src/aura_engine/scheduling/api.py
@@ -23,8 +23,8 @@ import threading
 
 import requests
 
-from src.base.utils import SimpleUtil as SU
-from src.scheduling.utils import TimeslotFilter
+from base.utils import SimpleUtil as SU
+from scheduling.utils import TimeslotFilter
 
 
 class ApiFetcher(threading.Thread):
diff --git a/src/scheduling/models.py b/src/aura_engine/scheduling/models.py
similarity index 99%
rename from src/scheduling/models.py
rename to src/aura_engine/scheduling/models.py
index cc64b1345c12ea4a5f0e8294890a3dbcbf721b92..67ae10f56b4c5b59f7b5ef7a74d2bcf17cc0d8c9 100644
--- a/src/scheduling/models.py
+++ b/src/aura_engine/scheduling/models.py
@@ -37,9 +37,9 @@ from sqlalchemy.ext.declarative import declarative_base
 from sqlalchemy.ext.hybrid import hybrid_property
 from sqlalchemy.orm import relationship
 
-from src.base.config import AuraConfig
-from src.base.utils import SimpleUtil
-from src.resources import ResourceUtil
+from base.config import AuraConfig
+from base.utils import SimpleUtil
+from resources import ResourceUtil
 
 # Initialize DB Model and session
 config = AuraConfig()
diff --git a/src/scheduling/programme.py b/src/aura_engine/scheduling/programme.py
similarity index 98%
rename from src/scheduling/programme.py
rename to src/aura_engine/scheduling/programme.py
index a5cc41df4678507c76a792f557d24d7a043ef309..acce07620844c7c63f72bd73b49da76034e9f183 100644
--- a/src/scheduling/programme.py
+++ b/src/aura_engine/scheduling/programme.py
@@ -20,17 +20,17 @@
 import logging
 from datetime import datetime
 
-from src.base.config import AuraConfig
-from src.base.utils import SimpleUtil as SU
-from src.engine import Engine
-from src.scheduling.api import ApiFetcher
-from src.scheduling.models import (
+from base.config import AuraConfig
+from base.utils import SimpleUtil as SU
+from engine import Engine
+from scheduling.api import ApiFetcher
+from scheduling.models import (
     Playlist,
     PlaylistEntry,
     PlaylistEntryMetaData,
     Timeslot,
 )
-from src.scheduling.utils import M3UPlaylistProcessor
+from scheduling.utils import M3UPlaylistProcessor
 
 
 class ProgrammeService:
diff --git a/src/scheduling/scheduler.py b/src/aura_engine/scheduling/scheduler.py
similarity index 97%
rename from src/scheduling/scheduler.py
rename to src/aura_engine/scheduling/scheduler.py
index 350b481c411b8cfe376175f3e32cb419b3eecb24..580cf9622f1bc00bf977596a8ef77c3bfae5c3c8 100644
--- a/src/scheduling/scheduler.py
+++ b/src/aura_engine/scheduling/scheduler.py
@@ -21,16 +21,16 @@ import logging
 import threading
 import time
 
-from src.base.config import AuraConfig
-from src.base.exceptions import LoadSourceException, NoActiveTimeslotException
-from src.base.utils import SimpleUtil as SU
-from src.channels import ChannelType, EntryPlayState, TransitionType
-from src.control import EngineExecutor
-from src.engine import Engine
-from src.resources import ResourceClass, ResourceUtil
-from src.scheduling.models import AuraDatabaseModel
-from src.scheduling.programme import ProgrammeService
-from src.scheduling.utils import TimeslotRenderer
+from base.config import AuraConfig
+from base.exceptions import LoadSourceException, NoActiveTimeslotException
+from base.utils import SimpleUtil as SU
+from channels import ChannelType, EntryPlayState, TransitionType
+from control import EngineExecutor
+from engine import Engine
+from resources import ResourceClass, ResourceUtil
+from scheduling.models import AuraDatabaseModel
+from scheduling.programme import ProgrammeService
+from scheduling.utils import TimeslotRenderer
 
 
 class AuraScheduler(threading.Thread):
diff --git a/src/scheduling/utils.py b/src/aura_engine/scheduling/utils.py
similarity index 99%
rename from src/scheduling/utils.py
rename to src/aura_engine/scheduling/utils.py
index 1317cc25101b7d26cde8326c1422108b94ba5930..058c48e04aefe8dec887862930a9623e7c84f5bc 100644
--- a/src/scheduling/utils.py
+++ b/src/aura_engine/scheduling/utils.py
@@ -21,8 +21,8 @@ import logging
 from datetime import datetime
 from enum import Enum
 
-from src.base.config import AuraConfig
-from src.base.utils import SimpleUtil as SU
+from base.config import AuraConfig
+from base.utils import SimpleUtil as SU
 
 
 class EntryQueueState(Enum):