diff --git a/src/Quasar/Wayland/Protocol/Core.hs b/src/Quasar/Wayland/Protocol/Core.hs
index 971cbcef3deab2db165c036c1b6f5fd9ba821db0..66168541d5e4c7a637a61f0abc315b40385d58a2 100644
--- a/src/Quasar/Wayland/Protocol/Core.hs
+++ b/src/Quasar/Wayland/Protocol/Core.hs
@@ -382,7 +382,10 @@ setException ex = protocolStep do
 
 -- | Sends a message without checking any ids or creating proxy objects objects.
 sendMessage :: forall s m i. (IsInterfaceSide s i, MonadCatch m) => Object s m i -> Up s i -> ProtocolStep s m ()
-sendMessage object message = protocolStep do
+sendMessage object message = protocolStep $ sendMessageInternal object message
+
+sendMessageInternal :: forall s m i. (IsInterfaceSide s i, MonadCatch m) => Object s m i -> Up s i -> ProtocolAction s m ()
+sendMessageInternal object message = do
   traceM $ "-> " <> showObjectMessage object message
   sendRawMessage messageWithHeader
   where