diff --git a/quasar-wayland.cabal b/quasar-wayland.cabal
index 8f15c5c6351686c5a71806596529832310b540bd..5b06cac0eebe19c8e95143d1b2d522983ef9ce74 100644
--- a/quasar-wayland.cabal
+++ b/quasar-wayland.cabal
@@ -85,9 +85,9 @@ library
   exposed-modules:
     Quasar.Wayland.Client
     Quasar.Wayland.Connection
-    Quasar.Wayland.Core
-    Quasar.Wayland.Protocol
-    Quasar.Wayland.TH
+    Quasar.Wayland.Protocol.Core
+    Quasar.Wayland.Protocol.Generated
+    Quasar.Wayland.Protocol.TH
   build-depends:
     base >=4.7 && <5,
     binary,
diff --git a/src/Quasar/Wayland/Client.hs b/src/Quasar/Wayland/Client.hs
index b1506415f26df176c73cfd29427e4cd9c601b4ce..1f9833d21ea8dadfb24ed22b2a6f7933a9d82381 100644
--- a/src/Quasar/Wayland/Client.hs
+++ b/src/Quasar/Wayland/Client.hs
@@ -15,8 +15,8 @@ import Network.Socket.ByteString.Lazy qualified as SocketL
 import Quasar
 import Quasar.Prelude
 import Quasar.Wayland.Connection
-import Quasar.Wayland.Core
-import Quasar.Wayland.Protocol
+import Quasar.Wayland.Protocol.Core
+import Quasar.Wayland.Protocol.Generated
 import System.Environment (getEnv, lookupEnv)
 import System.FilePath ((</>), isRelative)
 import Text.Read (readEither)
diff --git a/src/Quasar/Wayland/Connection.hs b/src/Quasar/Wayland/Connection.hs
index bc3d01ae30270db806c83b90bda46829f8df814d..fb6a66a4edfdb07c818ecefb737e334860f3df98 100644
--- a/src/Quasar/Wayland/Connection.hs
+++ b/src/Quasar/Wayland/Connection.hs
@@ -13,8 +13,8 @@ import Network.Socket.ByteString qualified as Socket
 import Network.Socket.ByteString.Lazy qualified as SocketL
 import Quasar
 import Quasar.Prelude
-import Quasar.Wayland.Core
-import Quasar.Wayland.Protocol
+import Quasar.Wayland.Protocol.Core
+import Quasar.Wayland.Protocol.Generated
 
 
 data WaylandConnection s = WaylandConnection {
diff --git a/src/Quasar/Wayland/Core.hs b/src/Quasar/Wayland/Protocol/Core.hs
similarity index 99%
rename from src/Quasar/Wayland/Core.hs
rename to src/Quasar/Wayland/Protocol/Core.hs
index 7a28aa53dda09676aeeb200ef1c3d1434b625476..bef58b00da13c074e868876c61405e187cc34a81 100644
--- a/src/Quasar/Wayland/Core.hs
+++ b/src/Quasar/Wayland/Protocol/Core.hs
@@ -1,4 +1,4 @@
-module Quasar.Wayland.Core (
+module Quasar.Wayland.Protocol.Core (
   ObjectId,
   Opcode,
   Fixed,
diff --git a/src/Quasar/Wayland/Protocol.hs b/src/Quasar/Wayland/Protocol/Generated.hs
similarity index 56%
rename from src/Quasar/Wayland/Protocol.hs
rename to src/Quasar/Wayland/Protocol/Generated.hs
index c21e9d88144f97c712c23383c0fbae03b336efeb..fe3e5b84d3394a482b950a047cd3ea0959474fab 100644
--- a/src/Quasar/Wayland/Protocol.hs
+++ b/src/Quasar/Wayland/Protocol/Generated.hs
@@ -1,10 +1,10 @@
 {-# OPTIONS_GHC -Wno-missing-export-lists #-}
 --{-# OPTIONS_GHC -ddump-splices #-}
 
-module Quasar.Wayland.Protocol where
+module Quasar.Wayland.Protocol.Generated where
 
 import Data.Binary
-import Quasar.Wayland.Core
-import Quasar.Wayland.TH
+import Quasar.Wayland.Protocol.Core
+import Quasar.Wayland.Protocol.TH
 
 $(generateWaylandProcol "protocols/wayland.xml")
diff --git a/src/Quasar/Wayland/TH.hs b/src/Quasar/Wayland/Protocol/TH.hs
similarity index 98%
rename from src/Quasar/Wayland/TH.hs
rename to src/Quasar/Wayland/Protocol/TH.hs
index 67eb47351d52296ad7e62048ec651e8b7a7ba3b0..6066fe2e9b41b833ff48e5e0ef6a9561fc4a07c6 100644
--- a/src/Quasar/Wayland/TH.hs
+++ b/src/Quasar/Wayland/Protocol/TH.hs
@@ -1,4 +1,4 @@
-module Quasar.Wayland.TH (
+module Quasar.Wayland.Protocol.TH (
   generateWaylandProcol
 ) where
 
@@ -9,7 +9,7 @@ import Language.Haskell.TH
 import Language.Haskell.TH.Lib
 import Language.Haskell.TH.Syntax (addDependentFile)
 import Quasar.Prelude
-import Quasar.Wayland.Core
+import Quasar.Wayland.Protocol.Core
 import Text.XML.Light