diff --git a/Data/XCB/FromXML.hs b/Data/XCB/FromXML.hs
--- a/Data/XCB/FromXML.hs
+++ b/Data/XCB/FromXML.hs
@@ -26,7 +26,7 @@
 
 import Data.List as List
 import qualified Data.Map as Map
-import Data.Maybe (catMaybes, mapMaybe)
+import Data.Maybe (catMaybes, mapMaybe, maybeToList)
 
 import Control.Monad (MonadPlus (mzero, mplus), guard, liftM, liftM2)
 import Control.Monad.Reader (ReaderT, runReaderT, ask, lift, withReaderT)
@@ -57,7 +57,7 @@
 fromStrings :: [String] -> [XHeader]
 fromStrings xs =
    let rs = mapAlt fromString xs
-       Just headers = runReaderT rs headers
+       headers = concat $ maybeToList $ runReaderT rs headers
    in headers
 
 -- The 'Parse' monad.  Provides the name of the
@@ -349,8 +349,10 @@
         return $ SField name typ enum mask
 
     | el `named` "pad" = do
-        bytes <- el `attr` "bytes" >>= readM
-        return $ Pad bytes
+        let bytes = liftM (Pad PadBytes) $ el `attr` "bytes" >>= readM
+        let align = liftM (Pad PadAlignment) $ el `attr` "align" >>= readM
+
+        return $ head $ catMaybes $ [bytes, align]
 
     | el `named` "list" = do
         typ <- liftM mkType $ el `attr` "type"
diff --git a/Data/XCB/Pretty.hs b/Data/XCB/Pretty.hs
--- a/Data/XCB/Pretty.hs
+++ b/Data/XCB/Pretty.hs
@@ -97,8 +97,12 @@
         = parens $ toDoc op <> toDoc expr
     toDoc (ParamRef n) = toDoc n
 
+instance Pretty PadType where
+    pretty PadBytes = "bytes"
+    pretty PadAlignment = "align"
+
 instance Pretty a => Pretty (GenStructElem a) where
-    toDoc (Pad n) = braces $ toDoc n <+> text "bytes"
+    toDoc (Pad typ n) = braces $ toDoc n <+> toDoc typ
     toDoc (List nm typ len enums)
         = text nm <+> text "::" <+> brackets (toDoc typ <+> toDoc enums) <+> toDoc len
     toDoc (SField nm typ enums mask) = hsep [text nm
diff --git a/Data/XCB/Types.hs b/Data/XCB/Types.hs
--- a/Data/XCB/Types.hs
+++ b/Data/XCB/Types.hs
@@ -46,6 +46,7 @@
     , MaskPadding
     , Alignment ( .. )
     , AllowedEvent ( .. )
+    , PadType ( .. )
     ) where
 
 import Data.Map
@@ -93,8 +94,13 @@
     | XEventStruct Name [AllowedEvent]
  deriving (Show, Functor)
 
+data PadType
+    = PadBytes
+    | PadAlignment
+ deriving (Show)
+
 data GenStructElem typ
-    = Pad Int
+    = Pad PadType Int
     | List Name typ (Maybe (Expression typ)) (Maybe (EnumVals typ))
     | SField Name typ (Maybe (EnumVals typ)) (Maybe (MaskVals typ))
     | ExprField Name typ (Expression typ)
diff --git a/xcb-types.cabal b/xcb-types.cabal
--- a/xcb-types.cabal
+++ b/xcb-types.cabal
@@ -1,5 +1,5 @@
 Name:         xcb-types
-Version:      0.12.0
+Version:      0.13.0
 Cabal-Version:  >= 1.10
 Synopsis:     Parses XML files used by the XCB project
 Description:   This package provides types which mirror the structures
