diff --git a/generator/Data/XCB/Python/Parse.hs b/generator/Data/XCB/Python/Parse.hs
--- a/generator/Data/XCB/Python/Parse.hs
+++ b/generator/Data/XCB/Python/Parse.hs
@@ -290,7 +290,8 @@
                      -> Either (Maybe String, String)
                                (String, Either (Expr (), Expr ())
                                                ([(Expr (), [GenStructElem Type])]), Maybe Int)
-structElemToPyUnpack _ _ _ (Pad i) = Left (Nothing, mkPad i)
+structElemToPyUnpack _ _ _ (Pad PadBytes i) = Left (Nothing, mkPad i)
+structElemToPyUnpack _ _ _ (Pad PadAlignment _) = Left (Nothing, "")
 
 -- XXX: This is a cheap hack for noop, we should really do better.
 structElemToPyUnpack _ _ _ (Doc _ _ _) = Left (Nothing, "")
@@ -357,7 +358,7 @@
                    -> Either (Maybe String, String) [(String, Either (Maybe (Expr ()))
                                                                      [(Expr (), [GenStructElem Type])]
                                                     )]
-structElemToPyPack _ _ _ (Pad i) = Left (Nothing, mkPad i)
+structElemToPyPack _ _ _ (Pad _ i) = Left (Nothing, mkPad i)
 -- TODO: implement these?
 structElemToPyPack _ _ _ (Doc _ _ _) = Left (Nothing, "")
 structElemToPyPack _ _ _ (Fd _) = Left (Nothing, "")
@@ -654,7 +655,7 @@
   if null names then [] else [Decorated [classmethod] synthetic ()]
     where
       getName :: GenStructElem Type -> Maybe String
-      getName (Pad _) = Nothing
+      getName (Pad _ _) = Nothing
       getName (X.List n _ _ _) = Just n
       getName (SField n _ _ _) = Just n
       getName (ExprField n _ _) = Just n
diff --git a/test/GeneratorTests.hs b/test/GeneratorTests.hs
--- a/test/GeneratorTests.hs
+++ b/test/GeneratorTests.hs
@@ -41,6 +41,7 @@
           , "render_1.7"
           , "xproto_1.7"
           , "render"
+          , "randr"
           , "eventstruct"
           ]
 
diff --git a/test/generator/randr.py b/test/generator/randr.py
new file mode 100644
--- /dev/null
+++ b/test/generator/randr.py
@@ -0,0 +1,65 @@
+import xcffib
+import struct
+import io
+MAJOR_VERSION = 1
+MINOR_VERSION = 6
+key = xcffib.ExtensionKey("RANDR")
+_events = {}
+_errors = {}
+class TRANSFORM(xcffib.Struct):
+    xge = False
+    def __init__(self, unpacker):
+        if isinstance(unpacker, xcffib.Protobj):
+            unpacker = xcffib.MemoryUnpacker(unpacker.pack())
+        xcffib.Struct.__init__(self, unpacker)
+        base = unpacker.offset
+        self.matrix11, self.matrix12, self.matrix13, self.matrix21, self.matrix22, self.matrix23, self.matrix31, self.matrix32, self.matrix33 = unpacker.unpack("iiiiiiiii")
+        self.bufsize = unpacker.offset - base
+    def pack(self):
+        buf = io.BytesIO()
+        buf.write(struct.pack("=iiiiiiiii", self.matrix11, self.matrix12, self.matrix13, self.matrix21, self.matrix22, self.matrix23, self.matrix31, self.matrix32, self.matrix33))
+        return buf.getvalue()
+    fixed_size = 36
+    @classmethod
+    def synthetic(cls, matrix11, matrix12, matrix13, matrix21, matrix22, matrix23, matrix31, matrix32, matrix33):
+        self = cls.__new__(cls)
+        self.matrix11 = matrix11
+        self.matrix12 = matrix12
+        self.matrix13 = matrix13
+        self.matrix21 = matrix21
+        self.matrix22 = matrix22
+        self.matrix23 = matrix23
+        self.matrix31 = matrix31
+        self.matrix32 = matrix32
+        self.matrix33 = matrix33
+        return self
+class GetCrtcTransformReply(xcffib.Reply):
+    xge = False
+    def __init__(self, unpacker):
+        if isinstance(unpacker, xcffib.Protobj):
+            unpacker = xcffib.MemoryUnpacker(unpacker.pack())
+        xcffib.Reply.__init__(self, unpacker)
+        base = unpacker.offset
+        unpacker.unpack("xx2x4x")
+        self.pending_transform = TRANSFORM(unpacker)
+        self.has_transforms, = unpacker.unpack("B3x")
+        unpacker.pad(TRANSFORM)
+        self.current_transform = TRANSFORM(unpacker)
+        self.pending_len, self.pending_nparams, self.current_len, self.current_nparams = unpacker.unpack("4xHHHH")
+        unpacker.pad("c")
+        self.pending_filter_name = xcffib.List(unpacker, "c", self.pending_len)
+        unpacker.pad("i")
+        self.pending_params = xcffib.List(unpacker, "i", self.pending_nparams)
+        unpacker.pad("c")
+        self.current_filter_name = xcffib.List(unpacker, "c", self.current_len)
+        unpacker.pad("i")
+        self.current_params = xcffib.List(unpacker, "i", self.current_nparams)
+        self.bufsize = unpacker.offset - base
+class GetCrtcTransformCookie(xcffib.Cookie):
+    reply_type = GetCrtcTransformReply
+class randrExtension(xcffib.Extension):
+    def GetCrtcTransform(self, crtc, is_checked=True):
+        buf = io.BytesIO()
+        buf.write(struct.pack("=xx2xI", crtc))
+        return self.send_request(27, buf, GetCrtcTransformCookie, is_checked=is_checked)
+xcffib._add_ext(key, randrExtension, _events, _errors)
diff --git a/test/generator/randr.xml b/test/generator/randr.xml
new file mode 100644
--- /dev/null
+++ b/test/generator/randr.xml
@@ -0,0 +1,53 @@
+<xcb header="randr" extension-xname="RANDR" extension-name="RandR"
+    major-version="1" minor-version="6">
+
+  <typedef oldname="INT32" newname="FIXED" />
+
+  <struct name="TRANSFORM">
+    <field type="FIXED" name="matrix11" />
+    <field type="FIXED" name="matrix12" />
+    <field type="FIXED" name="matrix13" />
+    <field type="FIXED" name="matrix21" />
+    <field type="FIXED" name="matrix22" />
+    <field type="FIXED" name="matrix23" />
+    <field type="FIXED" name="matrix31" />
+    <field type="FIXED" name="matrix32" />
+    <field type="FIXED" name="matrix33" />
+  </struct>
+
+	<xidtype name="MODE" />
+	<xidtype name="CRTC" />
+	<xidtype name="OUTPUT" />
+	<xidtype name="PROVIDER" />
+	<xidtype name="LEASE" />
+
+	<request name="GetCrtcTransform" opcode="27">
+		<field type="CRTC" name="crtc" />
+		<reply>
+			<pad bytes="1" />
+			<field type="TRANSFORM" name="pending_transform" />
+			<field type="BOOL" name="has_transforms" />
+			<pad bytes="3" />
+			<field type="TRANSFORM" name="current_transform" />
+			<pad bytes="4" />
+			<field type="CARD16" name="pending_len" />
+			<field type="CARD16" name="pending_nparams" />
+			<field type="CARD16" name="current_len" />
+			<field type="CARD16" name="current_nparams" />
+			<list type="char" name="pending_filter_name" >
+				<fieldref>pending_len</fieldref>
+			</list>
+			<pad align="4" />
+			<list type="FIXED" name="pending_params" >
+				<fieldref>pending_nparams</fieldref>
+			</list>
+			<list type="char" name="current_filter_name" >
+				<fieldref>current_len</fieldref>
+			</list>
+			<pad align="4" />
+			<list type="FIXED" name="current_params" >
+				<fieldref>current_nparams</fieldref>
+			</list>
+		</reply>
+	</request>
+</xcb>
diff --git a/xcffib.cabal b/xcffib.cabal
--- a/xcffib.cabal
+++ b/xcffib.cabal
@@ -1,5 +1,5 @@
 name:                xcffib
-version:             1.2.0
+version:             1.3.0
 synopsis:            A cffi-based python binding for X
 homepage:            http://github.com/tych0/xcffib
 license:             OtherLicense
@@ -25,7 +25,7 @@
 
 library
   build-depends: base ==4.*,
-                 xcb-types >= 0.12.0,
+                 xcb-types >= 0.13.0,
                  language-python >= 0.5.6,
                  filepath,
                  filemanip,
@@ -48,7 +48,7 @@
                  xcffib,
                  language-python >= 0.5.6,
                  split,
-                 xcb-types >= 0.12.0,
+                 xcb-types >= 0.13.0,
                  optparse-applicative >= 0.13,
                  filepath,
                  filemanip,
@@ -83,7 +83,7 @@
   type: exitcode-stdio-1.0
   build-depends: base ==4.*,
                  xcffib,
-                 xcb-types >= 0.12.0,
+                 xcb-types >= 0.13.0,
                  language-python >= 0.5.6,
                  HUnit,
                  test-framework,
