diff --git a/src/Quasar/Wayland/Protocol.hs b/src/Quasar/Wayland/Protocol.hs
index c3f9e7394a1996b1929bfeb1711dc2c1fdddb220..35995381a5a703d932b4b6419169016acb4a82e0 100644
--- a/src/Quasar/Wayland/Protocol.hs
+++ b/src/Quasar/Wayland/Protocol.hs
@@ -3,7 +3,7 @@ module Quasar.Wayland.Protocol (
   -- | This module exports everything required to implement Wayland interfaces generated by
   -- "Quasar.Wayland.Protocol.TH".
 
-  Object,
+  Object(objectProtocol),
   setEventHandler,
   setRequestHandler,
   setMessageHandler,
@@ -12,6 +12,7 @@ module Quasar.Wayland.Protocol (
   -- ** Wayland types
   Fixed(..),
   WlString(..),
+  toString,
 
   -- ** Protocol execution
   ProtocolHandle,
@@ -24,6 +25,7 @@ module Quasar.Wayland.Protocol (
   WireCallbackFailed(..),
   ParserFailed(..),
   ProtocolException(..),
+  ProtocolUsageError(..),
   MaximumIdReached(..),
   ServerError(..),
 
@@ -32,6 +34,7 @@ module Quasar.Wayland.Protocol (
   interfaceName,
   Side(..),
   IsSide,
+  IsInterfaceSide,
 
   -- * wl_display interface
   handleWlDisplayError,
diff --git a/src/Quasar/Wayland/Protocol/Core.hs b/src/Quasar/Wayland/Protocol/Core.hs
index bcba4fb84642ce1f8934054e5e06e79d583cd4f9..412705f6daef60db3f3a1d5c764e0c859b0bce89 100644
--- a/src/Quasar/Wayland/Protocol/Core.hs
+++ b/src/Quasar/Wayland/Protocol/Core.hs
@@ -16,7 +16,7 @@ module Quasar.Wayland.Protocol.Core (
   interfaceName,
   IsInterfaceSide(..),
   IsInterfaceHandler(..),
-  Object(objectId),
+  Object(objectProtocol),
   setEventHandler,
   setRequestHandler,
   setMessageHandler,
@@ -53,6 +53,7 @@ module Quasar.Wayland.Protocol.Core (
   WireCallbackFailed(..),
   ParserFailed(..),
   ProtocolException(..),
+  ProtocolUsageError(..),
   MaximumIdReached(..),
   ServerError(..),
 
@@ -512,10 +513,10 @@ takeOutbox protocol = runProtocolTransaction protocol do
   pure sendData
 
 
--- | Create an object. The caller is responsible for sending the 'NewId' immediately (exactly once; in the same STM
--- transaction; before using the object).
+-- | Create an object. The caller is responsible for sending the 'NewId' immediately (exactly once and before using the
+-- object).
 --
--- Exported for use in TH generated code.
+-- For use in generated code.
 newObject
   :: forall s i. IsInterfaceSide s i
   => Maybe (MessageHandler s i)
@@ -540,7 +541,7 @@ newObject messageHandler = do
 -- | Create an object from a received id. The caller is responsible for using a 'NewId' exactly once while handling an
 -- incoming message
 --
--- Exported for use in TH generated code.
+-- For use in generated code.
 newObjectFromId
   :: forall s i. IsInterfaceSide s i
   => Maybe (MessageHandler s i)