diff --git a/playout/libretime_playout/main.py b/playout/libretime_playout/main.py
index 4715a1efa..90d60c0fc 100644
--- a/playout/libretime_playout/main.py
+++ b/playout/libretime_playout/main.py
@@ -21,13 +21,13 @@ from loguru import logger
 
 from .config import CACHE_DIR, RECORD_DIR, Config
 from .liquidsoap.version import LIQUIDSOAP_MIN_VERSION, parse_liquidsoap_version
-from .listenerstat import ListenerStat
-from .pypofetch import PypoFetch
-from .pypofile import PypoFile
-from .pypoliquidsoap import PypoLiquidsoap
-from .pypomessagehandler import PypoMessageHandler
-from .pypopush import PypoPush
+from .message_handler import PypoMessageHandler
+from .player.fetch import PypoFetch
+from .player.file import PypoFile
+from .player.liquidsoap import PypoLiquidsoap
+from .player.push import PypoPush
 from .recorder import Recorder
+from .stats import ListenerStat
 from .timeout import ls_timeout
 
 
diff --git a/playout/libretime_playout/pypomessagehandler.py b/playout/libretime_playout/message_handler.py
similarity index 100%
rename from playout/libretime_playout/pypomessagehandler.py
rename to playout/libretime_playout/message_handler.py
diff --git a/playout/libretime_playout/player/__init__.py b/playout/libretime_playout/player/__init__.py
new file mode 100644
index 000000000..e69de29bb
diff --git a/playout/libretime_playout/events.py b/playout/libretime_playout/player/events.py
similarity index 100%
rename from playout/libretime_playout/events.py
rename to playout/libretime_playout/player/events.py
diff --git a/playout/libretime_playout/pypofetch.py b/playout/libretime_playout/player/fetch.py
similarity index 99%
rename from playout/libretime_playout/pypofetch.py
rename to playout/libretime_playout/player/fetch.py
index fdf088ee2..af6f1060e 100644
--- a/playout/libretime_playout/pypofetch.py
+++ b/playout/libretime_playout/player/fetch.py
@@ -16,9 +16,9 @@ from libretime_api_client import version1 as v1_api_client
 from libretime_api_client import version2 as api_client
 from loguru import logger
 
-from .config import CACHE_DIR, POLL_INTERVAL, Config
+from ..config import CACHE_DIR, POLL_INTERVAL, Config
+from ..timeout import ls_timeout
 from .schedule import get_schedule
-from .timeout import ls_timeout
 
 
 def keyboardInterruptHandler(signum, frame):
diff --git a/playout/libretime_playout/pypofile.py b/playout/libretime_playout/player/file.py
similarity index 100%
rename from playout/libretime_playout/pypofile.py
rename to playout/libretime_playout/player/file.py
diff --git a/playout/libretime_playout/pypoliquidsoap.py b/playout/libretime_playout/player/liquidsoap.py
similarity index 99%
rename from playout/libretime_playout/pypoliquidsoap.py
rename to playout/libretime_playout/player/liquidsoap.py
index ff0b39f22..cfee0afee 100644
--- a/playout/libretime_playout/pypoliquidsoap.py
+++ b/playout/libretime_playout/player/liquidsoap.py
@@ -3,9 +3,9 @@ from datetime import datetime, timedelta
 
 from loguru import logger
 
+from ..utils import seconds_between
 from .events import EventKind
-from .telnetliquidsoap import TelnetLiquidsoap
-from .utils import seconds_between
+from .liquidsoap_gateway import TelnetLiquidsoap
 
 
 class PypoLiquidsoap:
diff --git a/playout/libretime_playout/telnetliquidsoap.py b/playout/libretime_playout/player/liquidsoap_gateway.py
similarity index 99%
rename from playout/libretime_playout/telnetliquidsoap.py
rename to playout/libretime_playout/player/liquidsoap_gateway.py
index 6e7c0240b..1e2af8faf 100644
--- a/playout/libretime_playout/telnetliquidsoap.py
+++ b/playout/libretime_playout/player/liquidsoap_gateway.py
@@ -3,7 +3,7 @@ import traceback
 
 from loguru import logger
 
-from .timeout import ls_timeout
+from ..timeout import ls_timeout
 
 
 def create_liquidsoap_annotation(media):
diff --git a/playout/libretime_playout/mime.types b/playout/libretime_playout/player/mime.types
similarity index 100%
rename from playout/libretime_playout/mime.types
rename to playout/libretime_playout/player/mime.types
diff --git a/playout/libretime_playout/pypopush.py b/playout/libretime_playout/player/push.py
similarity index 97%
rename from playout/libretime_playout/pypopush.py
rename to playout/libretime_playout/player/push.py
index 9fa29d79c..cdf1f156d 100644
--- a/playout/libretime_playout/pypopush.py
+++ b/playout/libretime_playout/player/push.py
@@ -9,9 +9,9 @@ from threading import Thread
 from libretime_api_client import version1 as api_client
 from loguru import logger
 
-from .config import PUSH_INTERVAL, Config
-from .pypoliqqueue import PypoLiqQueue
-from .timeout import ls_timeout
+from ..config import PUSH_INTERVAL, Config
+from ..timeout import ls_timeout
+from .queue import PypoLiqQueue
 
 
 def is_stream(media_item):
diff --git a/playout/libretime_playout/pypoliqqueue.py b/playout/libretime_playout/player/queue.py
similarity index 98%
rename from playout/libretime_playout/pypoliqqueue.py
rename to playout/libretime_playout/player/queue.py
index 7ece242a7..1ea737b48 100644
--- a/playout/libretime_playout/pypoliqqueue.py
+++ b/playout/libretime_playout/player/queue.py
@@ -8,7 +8,7 @@ from threading import Thread
 
 from loguru import logger
 
-from .utils import seconds_between
+from ..utils import seconds_between
 
 
 def keyboardInterruptHandler(signum, frame):
diff --git a/playout/libretime_playout/schedule.py b/playout/libretime_playout/player/schedule.py
similarity index 100%
rename from playout/libretime_playout/schedule.py
rename to playout/libretime_playout/player/schedule.py
diff --git a/playout/libretime_playout/listenerstat.py b/playout/libretime_playout/stats.py
similarity index 100%
rename from playout/libretime_playout/listenerstat.py
rename to playout/libretime_playout/stats.py
diff --git a/playout/libretime_playout/testpypoliqqueue.py b/playout/libretime_playout/testpypoliqqueue.py
index 93586a768..7ab235c2f 100644
--- a/playout/libretime_playout/testpypoliqqueue.py
+++ b/playout/libretime_playout/testpypoliqqueue.py
@@ -7,8 +7,8 @@ from threading import Lock
 from libretime_shared.logging import TRACE, setup_logger
 from loguru import logger
 
-from .pypoliqqueue import PypoLiqQueue
-from .telnetliquidsoap import TelnetLiquidsoap
+from .player.liquidsoap_gateway import TelnetLiquidsoap
+from .player.queue import PypoLiqQueue
 
 
 def keyboardInterruptHandler(signum, frame):
diff --git a/playout/libretime_playout/timeout.py b/playout/libretime_playout/timeout.py
index d75b50b37..84824da93 100644
--- a/playout/libretime_playout/timeout.py
+++ b/playout/libretime_playout/timeout.py
@@ -1,6 +1,6 @@
 import threading
 
-from . import pypofetch
+from .player import fetch
 
 
 def __timeout(func, timeout_duration, default, args, kwargs):
@@ -26,7 +26,7 @@ def __timeout(func, timeout_duration, default, args, kwargs):
             # fails again then there is something critically wrong...
             if first_attempt:
                 # restart liquidsoap
-                pypofetch.PypoFetch.ref.restart_liquidsoap()
+                fetch.PypoFetch.ref.restart_liquidsoap()
             else:
                 raise Exception("Thread did not terminate")
         else:
diff --git a/playout/tests/schedule_test.py b/playout/tests/player/schedule_test.py
similarity index 98%
rename from playout/tests/schedule_test.py
rename to playout/tests/player/schedule_test.py
index c27a85b2d..a5ac749bf 100644
--- a/playout/tests/schedule_test.py
+++ b/playout/tests/player/schedule_test.py
@@ -1,4 +1,4 @@
-from libretime_playout.schedule import get_schedule
+from libretime_playout.player.schedule import get_schedule
 
 
 class ApiClientServicesMock: