diff --git a/src/Quasar/Wayland/Protocol/Core.hs b/src/Quasar/Wayland/Protocol/Core.hs
index eca993f6ebab7fa57d3f37d6833bf128d32e7a6d..25ca5ca5a76a0e5bf14b7e49043baa5518e4c70e 100644
--- a/src/Quasar/Wayland/Protocol/Core.hs
+++ b/src/Quasar/Wayland/Protocol/Core.hs
@@ -555,13 +555,19 @@ putWaylandBlob blob = do
   putWord32host (fromIntegral (size + 1))
   putByteString blob
   putWord8 0
-  replicateM_ ((4 - (size `mod` 4)) `mod` 4) (putWord8 0)
+  replicateM_ (padding size) (putWord8 0)
 
 
 skipPadding :: Get ()
 skipPadding = do
   bytes <- bytesRead
-  skip $ fromIntegral ((4 - (bytes `mod` 4)) `mod` 4)
+  skip $ fromIntegral (padding bytes)
+
+paddedSize :: Integral a => a -> a
+paddedSize size = size + padding size
+
+padding :: Integral a => a -> a
+padding size = ((4 - (size `mod` 4)) `mod` 4)
 
 
 sendRawMessage :: MonadCatch m => Put -> ProtocolAction s m ()