diff --git a/GI/Cairo.hs b/GI/Cairo.hs
--- a/GI/Cairo.hs
+++ b/GI/Cairo.hs
@@ -1,207 +1,32 @@
--- Generated code.
 
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{- |
+Copyright  : Will Thompson, Iñaki García Etxebarria and Jonas Platte
+License    : LGPL-2.1
+Maintainer : Iñaki García Etxebarria (garetxe@gmail.com)
+-}
 
-{-# LANGUAGE ForeignFunctionInterface, ConstraintKinds,
-    TypeFamilies, MultiParamTypeClasses, KindSignatures,
-    FlexibleInstances, UndecidableInstances, DataKinds,
-    OverloadedStrings, NegativeLiterals, FlexibleContexts #-}
+module GI.Cairo
+    (     module GI.Cairo.Callbacks               ,
+    module GI.Cairo.Enums                   ,
+    module GI.Cairo.Functions               ,
+    module GI.Cairo.Structs                 ,
 
-module GI.Cairo where
 
+    ) where
+
+import GI.Cairo.Callbacks
+import GI.Cairo.Enums
+import GI.Cairo.Functions
+import GI.Cairo.Structs
+
 import Prelude ()
 import Data.GI.Base.ShortPrelude
-import Data.Char
-import Data.Int
-import Data.Word
+
+import qualified Data.Text as T
 import qualified Data.ByteString.Char8 as B
-import Data.ByteString.Char8 (ByteString)
 import qualified Data.Map as Map
-import Foreign.C
-import Foreign.Ptr
-import Foreign.ForeignPtr
-import Foreign.ForeignPtr.Unsafe (unsafeForeignPtrToPtr)
-import Foreign.Storable (peek, poke, sizeOf)
-import Control.Applicative ((<$>))
-import Control.Exception (onException)
-import Control.Monad.IO.Class
-import qualified Data.Text as T
 
-import Data.GI.Base.Attributes hiding (get, set)
-import Data.GI.Base.BasicTypes
-import Data.GI.Base.BasicConversions
-import Data.GI.Base.Closure
-import Data.GI.Base.GError
-import Data.GI.Base.GHashTable
-import Data.GI.Base.GParamSpec
-import Data.GI.Base.GVariant
-import Data.GI.Base.GValue
-import Data.GI.Base.ManagedPtr
-import Data.GI.Base.Overloading
-import Data.GI.Base.Properties hiding (new)
-import Data.GI.Base.Signals (SignalConnectMode(..), connectSignalFunPtr, SignalHandlerId)
-import Data.GI.Base.Utils
-
-
--- Enum Content
-
-data Content = 
-      ContentCOLOR
-    | ContentALPHA
-    | ContentCOLORALPHA
-    | AnotherContent Int
-    deriving (Show, Eq)
-
-instance Enum Content where
-    fromEnum ContentCOLOR = 4096
-    fromEnum ContentALPHA = 8192
-    fromEnum ContentCOLORALPHA = 12288
-    fromEnum (AnotherContent k) = k
-
-    toEnum 4096 = ContentCOLOR
-    toEnum 8192 = ContentALPHA
-    toEnum 12288 = ContentCOLORALPHA
-    toEnum k = AnotherContent k
-
-foreign import ccall "cairo_gobject_content_get_type" c_cairo_gobject_content_get_type :: 
-    IO GType
-
-instance BoxedEnum Content where
-    boxedEnumType _ = c_cairo_gobject_content_get_type
-
--- struct Context
-newtype Context = Context (ForeignPtr Context)
-noContext :: Maybe Context
-noContext = Nothing
-
-foreign import ccall "cairo_gobject_context_get_type" c_cairo_gobject_context_get_type :: 
-    IO GType
-
-instance BoxedObject Context where
-    boxedType _ = c_cairo_gobject_context_get_type
-
--- struct FontFace
-newtype FontFace = FontFace (ForeignPtr FontFace)
-noFontFace :: Maybe FontFace
-noFontFace = Nothing
-
-foreign import ccall "cairo_gobject_font_face_get_type" c_cairo_gobject_font_face_get_type :: 
-    IO GType
-
-instance BoxedObject FontFace where
-    boxedType _ = c_cairo_gobject_font_face_get_type
-
--- struct FontOptions
-newtype FontOptions = FontOptions (ForeignPtr FontOptions)
-noFontOptions :: Maybe FontOptions
-noFontOptions = Nothing
-
--- struct FontType
-newtype FontType = FontType (ForeignPtr FontType)
-noFontType :: Maybe FontType
-noFontType = Nothing
-
--- struct Matrix
-newtype Matrix = Matrix (ForeignPtr Matrix)
-noMatrix :: Maybe Matrix
-noMatrix = Nothing
-
--- struct Path
-newtype Path = Path (ForeignPtr Path)
-noPath :: Maybe Path
-noPath = Nothing
-
--- struct Pattern
-newtype Pattern = Pattern (ForeignPtr Pattern)
-noPattern :: Maybe Pattern
-noPattern = Nothing
-
-foreign import ccall "cairo_gobject_pattern_get_type" c_cairo_gobject_pattern_get_type :: 
-    IO GType
-
-instance BoxedObject Pattern where
-    boxedType _ = c_cairo_gobject_pattern_get_type
-
--- struct RectangleInt
-newtype RectangleInt = RectangleInt (ForeignPtr RectangleInt)
-noRectangleInt :: Maybe RectangleInt
-noRectangleInt = Nothing
-
-foreign import ccall "cairo_gobject_rectangle_int_get_type" c_cairo_gobject_rectangle_int_get_type :: 
-    IO GType
-
-instance BoxedObject RectangleInt where
-    boxedType _ = c_cairo_gobject_rectangle_int_get_type
-
-rectangleIntReadX :: RectangleInt -> IO Int32
-rectangleIntReadX s = withManagedPtr s $ \ptr -> do
-    val <- peek (ptr `plusPtr` 0) :: IO Int32
-    return val
-
-rectangleIntReadY :: RectangleInt -> IO Int32
-rectangleIntReadY s = withManagedPtr s $ \ptr -> do
-    val <- peek (ptr `plusPtr` 4) :: IO Int32
-    return val
-
-rectangleIntReadWidth :: RectangleInt -> IO Int32
-rectangleIntReadWidth s = withManagedPtr s $ \ptr -> do
-    val <- peek (ptr `plusPtr` 8) :: IO Int32
-    return val
-
-rectangleIntReadHeight :: RectangleInt -> IO Int32
-rectangleIntReadHeight s = withManagedPtr s $ \ptr -> do
-    val <- peek (ptr `plusPtr` 12) :: IO Int32
-    return val
-
--- struct Region
-newtype Region = Region (ForeignPtr Region)
-noRegion :: Maybe Region
-noRegion = Nothing
-
-foreign import ccall "cairo_gobject_region_get_type" c_cairo_gobject_region_get_type :: 
-    IO GType
-
-instance BoxedObject Region where
-    boxedType _ = c_cairo_gobject_region_get_type
-
--- struct ScaledFont
-newtype ScaledFont = ScaledFont (ForeignPtr ScaledFont)
-noScaledFont :: Maybe ScaledFont
-noScaledFont = Nothing
-
-foreign import ccall "cairo_gobject_scaled_font_get_type" c_cairo_gobject_scaled_font_get_type :: 
-    IO GType
-
-instance BoxedObject ScaledFont where
-    boxedType _ = c_cairo_gobject_scaled_font_get_type
-
--- struct Surface
-newtype Surface = Surface (ForeignPtr Surface)
-noSurface :: Maybe Surface
-noSurface = Nothing
-
-foreign import ccall "cairo_gobject_surface_get_type" c_cairo_gobject_surface_get_type :: 
-    IO GType
-
-instance BoxedObject Surface where
-    boxedType _ = c_cairo_gobject_surface_get_type
-
--- function cairo_image_surface_create
--- Args : []
--- Lengths : []
--- hInArgs : []
--- returnType : TBasicType TVoid
--- throws : False
--- Skip return : False
-
-foreign import ccall "cairo_image_surface_create" cairo_image_surface_create :: 
-    IO ()
-
+import GI.Cairo.Types
+import GI.Cairo.Callbacks
 
-imageSurfaceCreate ::
-    (MonadIO m) =>
-    m ()
-imageSurfaceCreate  = liftIO $ do
-    cairo_image_surface_create
-    return ()
 
diff --git a/GI/Cairo/Callbacks.hs b/GI/Cairo/Callbacks.hs
new file mode 100644
--- /dev/null
+++ b/GI/Cairo/Callbacks.hs
@@ -0,0 +1,20 @@
+
+{- |
+Copyright  : Will Thompson, Iñaki García Etxebarria and Jonas Platte
+License    : LGPL-2.1
+Maintainer : Iñaki García Etxebarria (garetxe@gmail.com)
+-}
+
+module GI.Cairo.Callbacks () where
+
+import Prelude ()
+import Data.GI.Base.ShortPrelude
+
+import qualified Data.Text as T
+import qualified Data.ByteString.Char8 as B
+import qualified Data.Map as Map
+
+import GI.Cairo.Types
+
+
+
diff --git a/GI/Cairo/Enums.hs b/GI/Cairo/Enums.hs
new file mode 100644
--- /dev/null
+++ b/GI/Cairo/Enums.hs
@@ -0,0 +1,53 @@
+
+{- |
+Copyright  : Will Thompson, Iñaki García Etxebarria and Jonas Platte
+License    : LGPL-2.1
+Maintainer : Iñaki García Etxebarria (garetxe@gmail.com)
+-}
+
+module GI.Cairo.Enums
+    ( 
+
+-- * Exported types
+    Content(..)                             ,
+
+
+    ) where
+
+import Prelude ()
+import Data.GI.Base.ShortPrelude
+
+import qualified Data.Text as T
+import qualified Data.ByteString.Char8 as B
+import qualified Data.Map as Map
+
+
+
+
+-- Enum Content
+
+data Content = 
+      ContentCOLOR
+    | ContentALPHA
+    | ContentCOLORALPHA
+    | AnotherContent Int
+    deriving (Show, Eq)
+
+instance Enum Content where
+    fromEnum ContentCOLOR = 4096
+    fromEnum ContentALPHA = 8192
+    fromEnum ContentCOLORALPHA = 12288
+    fromEnum (AnotherContent k) = k
+
+    toEnum 4096 = ContentCOLOR
+    toEnum 8192 = ContentALPHA
+    toEnum 12288 = ContentCOLORALPHA
+    toEnum k = AnotherContent k
+
+foreign import ccall "cairo_gobject_content_get_type" c_cairo_gobject_content_get_type :: 
+    IO GType
+
+instance BoxedEnum Content where
+    boxedEnumType _ = c_cairo_gobject_content_get_type
+
+
diff --git a/GI/Cairo/Functions.hs b/GI/Cairo/Functions.hs
new file mode 100644
--- /dev/null
+++ b/GI/Cairo/Functions.hs
@@ -0,0 +1,50 @@
+
+{- |
+Copyright  : Will Thompson, Iñaki García Etxebarria and Jonas Platte
+License    : LGPL-2.1
+Maintainer : Iñaki García Etxebarria (garetxe@gmail.com)
+-}
+
+module GI.Cairo.Functions
+    ( 
+
+ -- * Methods
+-- ** imageSurfaceCreate
+    imageSurfaceCreate                      ,
+
+
+
+
+    ) where
+
+import Prelude ()
+import Data.GI.Base.ShortPrelude
+
+import qualified Data.Text as T
+import qualified Data.ByteString.Char8 as B
+import qualified Data.Map as Map
+
+import GI.Cairo.Types
+import GI.Cairo.Callbacks
+
+-- function cairo_image_surface_create
+-- Args : []
+-- Lengths : []
+-- hInArgs : []
+-- returnType : TBasicType TVoid
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "cairo_image_surface_create" cairo_image_surface_create :: 
+    IO ()
+
+
+imageSurfaceCreate ::
+    (MonadIO m) =>
+    m ()
+imageSurfaceCreate  = liftIO $ do
+    cairo_image_surface_create
+    return ()
+
+
+
diff --git a/GI/Cairo/Structs.hs b/GI/Cairo/Structs.hs
new file mode 100644
--- /dev/null
+++ b/GI/Cairo/Structs.hs
@@ -0,0 +1,46 @@
+
+{- |
+Copyright  : Will Thompson, Iñaki García Etxebarria and Jonas Platte
+License    : LGPL-2.1
+Maintainer : Iñaki García Etxebarria (garetxe@gmail.com)
+-}
+
+module GI.Cairo.Structs
+    (     module GI.Cairo.Structs.Context         ,
+    module GI.Cairo.Structs.FontFace        ,
+    module GI.Cairo.Structs.FontOptions     ,
+    module GI.Cairo.Structs.FontType        ,
+    module GI.Cairo.Structs.Matrix          ,
+    module GI.Cairo.Structs.Path            ,
+    module GI.Cairo.Structs.Pattern         ,
+    module GI.Cairo.Structs.RectangleInt    ,
+    module GI.Cairo.Structs.Region          ,
+    module GI.Cairo.Structs.ScaledFont      ,
+    module GI.Cairo.Structs.Surface         ,
+
+
+    ) where
+
+import GI.Cairo.Structs.Context
+import GI.Cairo.Structs.FontFace
+import GI.Cairo.Structs.FontOptions
+import GI.Cairo.Structs.FontType
+import GI.Cairo.Structs.Matrix
+import GI.Cairo.Structs.Path
+import GI.Cairo.Structs.Pattern
+import GI.Cairo.Structs.RectangleInt
+import GI.Cairo.Structs.Region
+import GI.Cairo.Structs.ScaledFont
+import GI.Cairo.Structs.Surface
+
+import Prelude ()
+import Data.GI.Base.ShortPrelude
+
+import qualified Data.Text as T
+import qualified Data.ByteString.Char8 as B
+import qualified Data.Map as Map
+
+import GI.Cairo.Types
+import GI.Cairo.Callbacks
+
+
diff --git a/GI/Cairo/Structs/Context.hs b/GI/Cairo/Structs/Context.hs
new file mode 100644
--- /dev/null
+++ b/GI/Cairo/Structs/Context.hs
@@ -0,0 +1,38 @@
+
+{- |
+Copyright  : Will Thompson, Iñaki García Etxebarria and Jonas Platte
+License    : LGPL-2.1
+Maintainer : Iñaki García Etxebarria (garetxe@gmail.com)
+-}
+
+module GI.Cairo.Structs.Context
+    ( 
+
+-- * Exported types
+    Context(..)                             ,
+    noContext                               ,
+
+
+    ) where
+
+import Prelude ()
+import Data.GI.Base.ShortPrelude
+
+import qualified Data.Text as T
+import qualified Data.ByteString.Char8 as B
+import qualified Data.Map as Map
+
+import GI.Cairo.Types
+import GI.Cairo.Callbacks
+
+newtype Context = Context (ForeignPtr Context)
+foreign import ccall "cairo_gobject_context_get_type" c_cairo_gobject_context_get_type :: 
+    IO GType
+
+instance BoxedObject Context where
+    boxedType _ = c_cairo_gobject_context_get_type
+
+noContext :: Maybe Context
+noContext = Nothing
+
+
diff --git a/GI/Cairo/Structs/Context.hs-boot b/GI/Cairo/Structs/Context.hs-boot
new file mode 100644
--- /dev/null
+++ b/GI/Cairo/Structs/Context.hs-boot
@@ -0,0 +1,11 @@
+module GI.Cairo.Structs.Context where
+
+import Prelude ()
+import Data.GI.Base.ShortPrelude
+
+import qualified Data.Text as T
+import qualified Data.ByteString.Char8 as B
+import qualified Data.Map as Map
+
+newtype Context = Context (ForeignPtr Context)
+instance BoxedObject Context where
diff --git a/GI/Cairo/Structs/FontFace.hs b/GI/Cairo/Structs/FontFace.hs
new file mode 100644
--- /dev/null
+++ b/GI/Cairo/Structs/FontFace.hs
@@ -0,0 +1,38 @@
+
+{- |
+Copyright  : Will Thompson, Iñaki García Etxebarria and Jonas Platte
+License    : LGPL-2.1
+Maintainer : Iñaki García Etxebarria (garetxe@gmail.com)
+-}
+
+module GI.Cairo.Structs.FontFace
+    ( 
+
+-- * Exported types
+    FontFace(..)                            ,
+    noFontFace                              ,
+
+
+    ) where
+
+import Prelude ()
+import Data.GI.Base.ShortPrelude
+
+import qualified Data.Text as T
+import qualified Data.ByteString.Char8 as B
+import qualified Data.Map as Map
+
+import GI.Cairo.Types
+import GI.Cairo.Callbacks
+
+newtype FontFace = FontFace (ForeignPtr FontFace)
+foreign import ccall "cairo_gobject_font_face_get_type" c_cairo_gobject_font_face_get_type :: 
+    IO GType
+
+instance BoxedObject FontFace where
+    boxedType _ = c_cairo_gobject_font_face_get_type
+
+noFontFace :: Maybe FontFace
+noFontFace = Nothing
+
+
diff --git a/GI/Cairo/Structs/FontFace.hs-boot b/GI/Cairo/Structs/FontFace.hs-boot
new file mode 100644
--- /dev/null
+++ b/GI/Cairo/Structs/FontFace.hs-boot
@@ -0,0 +1,11 @@
+module GI.Cairo.Structs.FontFace where
+
+import Prelude ()
+import Data.GI.Base.ShortPrelude
+
+import qualified Data.Text as T
+import qualified Data.ByteString.Char8 as B
+import qualified Data.Map as Map
+
+newtype FontFace = FontFace (ForeignPtr FontFace)
+instance BoxedObject FontFace where
diff --git a/GI/Cairo/Structs/FontOptions.hs b/GI/Cairo/Structs/FontOptions.hs
new file mode 100644
--- /dev/null
+++ b/GI/Cairo/Structs/FontOptions.hs
@@ -0,0 +1,32 @@
+
+{- |
+Copyright  : Will Thompson, Iñaki García Etxebarria and Jonas Platte
+License    : LGPL-2.1
+Maintainer : Iñaki García Etxebarria (garetxe@gmail.com)
+-}
+
+module GI.Cairo.Structs.FontOptions
+    ( 
+
+-- * Exported types
+    FontOptions(..)                         ,
+    noFontOptions                           ,
+
+
+    ) where
+
+import Prelude ()
+import Data.GI.Base.ShortPrelude
+
+import qualified Data.Text as T
+import qualified Data.ByteString.Char8 as B
+import qualified Data.Map as Map
+
+import GI.Cairo.Types
+import GI.Cairo.Callbacks
+
+newtype FontOptions = FontOptions (ForeignPtr FontOptions)
+noFontOptions :: Maybe FontOptions
+noFontOptions = Nothing
+
+
diff --git a/GI/Cairo/Structs/FontOptions.hs-boot b/GI/Cairo/Structs/FontOptions.hs-boot
new file mode 100644
--- /dev/null
+++ b/GI/Cairo/Structs/FontOptions.hs-boot
@@ -0,0 +1,10 @@
+module GI.Cairo.Structs.FontOptions where
+
+import Prelude ()
+import Data.GI.Base.ShortPrelude
+
+import qualified Data.Text as T
+import qualified Data.ByteString.Char8 as B
+import qualified Data.Map as Map
+
+newtype FontOptions = FontOptions (ForeignPtr FontOptions)
diff --git a/GI/Cairo/Structs/FontType.hs b/GI/Cairo/Structs/FontType.hs
new file mode 100644
--- /dev/null
+++ b/GI/Cairo/Structs/FontType.hs
@@ -0,0 +1,32 @@
+
+{- |
+Copyright  : Will Thompson, Iñaki García Etxebarria and Jonas Platte
+License    : LGPL-2.1
+Maintainer : Iñaki García Etxebarria (garetxe@gmail.com)
+-}
+
+module GI.Cairo.Structs.FontType
+    ( 
+
+-- * Exported types
+    FontType(..)                            ,
+    noFontType                              ,
+
+
+    ) where
+
+import Prelude ()
+import Data.GI.Base.ShortPrelude
+
+import qualified Data.Text as T
+import qualified Data.ByteString.Char8 as B
+import qualified Data.Map as Map
+
+import GI.Cairo.Types
+import GI.Cairo.Callbacks
+
+newtype FontType = FontType (ForeignPtr FontType)
+noFontType :: Maybe FontType
+noFontType = Nothing
+
+
diff --git a/GI/Cairo/Structs/FontType.hs-boot b/GI/Cairo/Structs/FontType.hs-boot
new file mode 100644
--- /dev/null
+++ b/GI/Cairo/Structs/FontType.hs-boot
@@ -0,0 +1,10 @@
+module GI.Cairo.Structs.FontType where
+
+import Prelude ()
+import Data.GI.Base.ShortPrelude
+
+import qualified Data.Text as T
+import qualified Data.ByteString.Char8 as B
+import qualified Data.Map as Map
+
+newtype FontType = FontType (ForeignPtr FontType)
diff --git a/GI/Cairo/Structs/Matrix.hs b/GI/Cairo/Structs/Matrix.hs
new file mode 100644
--- /dev/null
+++ b/GI/Cairo/Structs/Matrix.hs
@@ -0,0 +1,32 @@
+
+{- |
+Copyright  : Will Thompson, Iñaki García Etxebarria and Jonas Platte
+License    : LGPL-2.1
+Maintainer : Iñaki García Etxebarria (garetxe@gmail.com)
+-}
+
+module GI.Cairo.Structs.Matrix
+    ( 
+
+-- * Exported types
+    Matrix(..)                              ,
+    noMatrix                                ,
+
+
+    ) where
+
+import Prelude ()
+import Data.GI.Base.ShortPrelude
+
+import qualified Data.Text as T
+import qualified Data.ByteString.Char8 as B
+import qualified Data.Map as Map
+
+import GI.Cairo.Types
+import GI.Cairo.Callbacks
+
+newtype Matrix = Matrix (ForeignPtr Matrix)
+noMatrix :: Maybe Matrix
+noMatrix = Nothing
+
+
diff --git a/GI/Cairo/Structs/Matrix.hs-boot b/GI/Cairo/Structs/Matrix.hs-boot
new file mode 100644
--- /dev/null
+++ b/GI/Cairo/Structs/Matrix.hs-boot
@@ -0,0 +1,10 @@
+module GI.Cairo.Structs.Matrix where
+
+import Prelude ()
+import Data.GI.Base.ShortPrelude
+
+import qualified Data.Text as T
+import qualified Data.ByteString.Char8 as B
+import qualified Data.Map as Map
+
+newtype Matrix = Matrix (ForeignPtr Matrix)
diff --git a/GI/Cairo/Structs/Path.hs b/GI/Cairo/Structs/Path.hs
new file mode 100644
--- /dev/null
+++ b/GI/Cairo/Structs/Path.hs
@@ -0,0 +1,32 @@
+
+{- |
+Copyright  : Will Thompson, Iñaki García Etxebarria and Jonas Platte
+License    : LGPL-2.1
+Maintainer : Iñaki García Etxebarria (garetxe@gmail.com)
+-}
+
+module GI.Cairo.Structs.Path
+    ( 
+
+-- * Exported types
+    Path(..)                                ,
+    noPath                                  ,
+
+
+    ) where
+
+import Prelude ()
+import Data.GI.Base.ShortPrelude
+
+import qualified Data.Text as T
+import qualified Data.ByteString.Char8 as B
+import qualified Data.Map as Map
+
+import GI.Cairo.Types
+import GI.Cairo.Callbacks
+
+newtype Path = Path (ForeignPtr Path)
+noPath :: Maybe Path
+noPath = Nothing
+
+
diff --git a/GI/Cairo/Structs/Path.hs-boot b/GI/Cairo/Structs/Path.hs-boot
new file mode 100644
--- /dev/null
+++ b/GI/Cairo/Structs/Path.hs-boot
@@ -0,0 +1,10 @@
+module GI.Cairo.Structs.Path where
+
+import Prelude ()
+import Data.GI.Base.ShortPrelude
+
+import qualified Data.Text as T
+import qualified Data.ByteString.Char8 as B
+import qualified Data.Map as Map
+
+newtype Path = Path (ForeignPtr Path)
diff --git a/GI/Cairo/Structs/Pattern.hs b/GI/Cairo/Structs/Pattern.hs
new file mode 100644
--- /dev/null
+++ b/GI/Cairo/Structs/Pattern.hs
@@ -0,0 +1,38 @@
+
+{- |
+Copyright  : Will Thompson, Iñaki García Etxebarria and Jonas Platte
+License    : LGPL-2.1
+Maintainer : Iñaki García Etxebarria (garetxe@gmail.com)
+-}
+
+module GI.Cairo.Structs.Pattern
+    ( 
+
+-- * Exported types
+    Pattern(..)                             ,
+    noPattern                               ,
+
+
+    ) where
+
+import Prelude ()
+import Data.GI.Base.ShortPrelude
+
+import qualified Data.Text as T
+import qualified Data.ByteString.Char8 as B
+import qualified Data.Map as Map
+
+import GI.Cairo.Types
+import GI.Cairo.Callbacks
+
+newtype Pattern = Pattern (ForeignPtr Pattern)
+foreign import ccall "cairo_gobject_pattern_get_type" c_cairo_gobject_pattern_get_type :: 
+    IO GType
+
+instance BoxedObject Pattern where
+    boxedType _ = c_cairo_gobject_pattern_get_type
+
+noPattern :: Maybe Pattern
+noPattern = Nothing
+
+
diff --git a/GI/Cairo/Structs/Pattern.hs-boot b/GI/Cairo/Structs/Pattern.hs-boot
new file mode 100644
--- /dev/null
+++ b/GI/Cairo/Structs/Pattern.hs-boot
@@ -0,0 +1,11 @@
+module GI.Cairo.Structs.Pattern where
+
+import Prelude ()
+import Data.GI.Base.ShortPrelude
+
+import qualified Data.Text as T
+import qualified Data.ByteString.Char8 as B
+import qualified Data.Map as Map
+
+newtype Pattern = Pattern (ForeignPtr Pattern)
+instance BoxedObject Pattern where
diff --git a/GI/Cairo/Structs/RectangleInt.hs b/GI/Cairo/Structs/RectangleInt.hs
new file mode 100644
--- /dev/null
+++ b/GI/Cairo/Structs/RectangleInt.hs
@@ -0,0 +1,77 @@
+
+{- |
+Copyright  : Will Thompson, Iñaki García Etxebarria and Jonas Platte
+License    : LGPL-2.1
+Maintainer : Iñaki García Etxebarria (garetxe@gmail.com)
+-}
+
+module GI.Cairo.Structs.RectangleInt
+    ( 
+
+-- * Exported types
+    RectangleInt(..)                        ,
+    noRectangleInt                          ,
+
+
+ -- * Properties
+-- ** Height
+    rectangleIntReadHeight                  ,
+
+
+-- ** Width
+    rectangleIntReadWidth                   ,
+
+
+-- ** X
+    rectangleIntReadX                       ,
+
+
+-- ** Y
+    rectangleIntReadY                       ,
+
+
+
+
+    ) where
+
+import Prelude ()
+import Data.GI.Base.ShortPrelude
+
+import qualified Data.Text as T
+import qualified Data.ByteString.Char8 as B
+import qualified Data.Map as Map
+
+import GI.Cairo.Types
+import GI.Cairo.Callbacks
+
+newtype RectangleInt = RectangleInt (ForeignPtr RectangleInt)
+foreign import ccall "cairo_gobject_rectangle_int_get_type" c_cairo_gobject_rectangle_int_get_type :: 
+    IO GType
+
+instance BoxedObject RectangleInt where
+    boxedType _ = c_cairo_gobject_rectangle_int_get_type
+
+noRectangleInt :: Maybe RectangleInt
+noRectangleInt = Nothing
+
+rectangleIntReadX :: RectangleInt -> IO Int32
+rectangleIntReadX s = withManagedPtr s $ \ptr -> do
+    val <- peek (ptr `plusPtr` 0) :: IO Int32
+    return val
+
+rectangleIntReadY :: RectangleInt -> IO Int32
+rectangleIntReadY s = withManagedPtr s $ \ptr -> do
+    val <- peek (ptr `plusPtr` 4) :: IO Int32
+    return val
+
+rectangleIntReadWidth :: RectangleInt -> IO Int32
+rectangleIntReadWidth s = withManagedPtr s $ \ptr -> do
+    val <- peek (ptr `plusPtr` 8) :: IO Int32
+    return val
+
+rectangleIntReadHeight :: RectangleInt -> IO Int32
+rectangleIntReadHeight s = withManagedPtr s $ \ptr -> do
+    val <- peek (ptr `plusPtr` 12) :: IO Int32
+    return val
+
+
diff --git a/GI/Cairo/Structs/RectangleInt.hs-boot b/GI/Cairo/Structs/RectangleInt.hs-boot
new file mode 100644
--- /dev/null
+++ b/GI/Cairo/Structs/RectangleInt.hs-boot
@@ -0,0 +1,11 @@
+module GI.Cairo.Structs.RectangleInt where
+
+import Prelude ()
+import Data.GI.Base.ShortPrelude
+
+import qualified Data.Text as T
+import qualified Data.ByteString.Char8 as B
+import qualified Data.Map as Map
+
+newtype RectangleInt = RectangleInt (ForeignPtr RectangleInt)
+instance BoxedObject RectangleInt where
diff --git a/GI/Cairo/Structs/Region.hs b/GI/Cairo/Structs/Region.hs
new file mode 100644
--- /dev/null
+++ b/GI/Cairo/Structs/Region.hs
@@ -0,0 +1,38 @@
+
+{- |
+Copyright  : Will Thompson, Iñaki García Etxebarria and Jonas Platte
+License    : LGPL-2.1
+Maintainer : Iñaki García Etxebarria (garetxe@gmail.com)
+-}
+
+module GI.Cairo.Structs.Region
+    ( 
+
+-- * Exported types
+    Region(..)                              ,
+    noRegion                                ,
+
+
+    ) where
+
+import Prelude ()
+import Data.GI.Base.ShortPrelude
+
+import qualified Data.Text as T
+import qualified Data.ByteString.Char8 as B
+import qualified Data.Map as Map
+
+import GI.Cairo.Types
+import GI.Cairo.Callbacks
+
+newtype Region = Region (ForeignPtr Region)
+foreign import ccall "cairo_gobject_region_get_type" c_cairo_gobject_region_get_type :: 
+    IO GType
+
+instance BoxedObject Region where
+    boxedType _ = c_cairo_gobject_region_get_type
+
+noRegion :: Maybe Region
+noRegion = Nothing
+
+
diff --git a/GI/Cairo/Structs/Region.hs-boot b/GI/Cairo/Structs/Region.hs-boot
new file mode 100644
--- /dev/null
+++ b/GI/Cairo/Structs/Region.hs-boot
@@ -0,0 +1,11 @@
+module GI.Cairo.Structs.Region where
+
+import Prelude ()
+import Data.GI.Base.ShortPrelude
+
+import qualified Data.Text as T
+import qualified Data.ByteString.Char8 as B
+import qualified Data.Map as Map
+
+newtype Region = Region (ForeignPtr Region)
+instance BoxedObject Region where
diff --git a/GI/Cairo/Structs/ScaledFont.hs b/GI/Cairo/Structs/ScaledFont.hs
new file mode 100644
--- /dev/null
+++ b/GI/Cairo/Structs/ScaledFont.hs
@@ -0,0 +1,38 @@
+
+{- |
+Copyright  : Will Thompson, Iñaki García Etxebarria and Jonas Platte
+License    : LGPL-2.1
+Maintainer : Iñaki García Etxebarria (garetxe@gmail.com)
+-}
+
+module GI.Cairo.Structs.ScaledFont
+    ( 
+
+-- * Exported types
+    ScaledFont(..)                          ,
+    noScaledFont                            ,
+
+
+    ) where
+
+import Prelude ()
+import Data.GI.Base.ShortPrelude
+
+import qualified Data.Text as T
+import qualified Data.ByteString.Char8 as B
+import qualified Data.Map as Map
+
+import GI.Cairo.Types
+import GI.Cairo.Callbacks
+
+newtype ScaledFont = ScaledFont (ForeignPtr ScaledFont)
+foreign import ccall "cairo_gobject_scaled_font_get_type" c_cairo_gobject_scaled_font_get_type :: 
+    IO GType
+
+instance BoxedObject ScaledFont where
+    boxedType _ = c_cairo_gobject_scaled_font_get_type
+
+noScaledFont :: Maybe ScaledFont
+noScaledFont = Nothing
+
+
diff --git a/GI/Cairo/Structs/ScaledFont.hs-boot b/GI/Cairo/Structs/ScaledFont.hs-boot
new file mode 100644
--- /dev/null
+++ b/GI/Cairo/Structs/ScaledFont.hs-boot
@@ -0,0 +1,11 @@
+module GI.Cairo.Structs.ScaledFont where
+
+import Prelude ()
+import Data.GI.Base.ShortPrelude
+
+import qualified Data.Text as T
+import qualified Data.ByteString.Char8 as B
+import qualified Data.Map as Map
+
+newtype ScaledFont = ScaledFont (ForeignPtr ScaledFont)
+instance BoxedObject ScaledFont where
diff --git a/GI/Cairo/Structs/Surface.hs b/GI/Cairo/Structs/Surface.hs
new file mode 100644
--- /dev/null
+++ b/GI/Cairo/Structs/Surface.hs
@@ -0,0 +1,38 @@
+
+{- |
+Copyright  : Will Thompson, Iñaki García Etxebarria and Jonas Platte
+License    : LGPL-2.1
+Maintainer : Iñaki García Etxebarria (garetxe@gmail.com)
+-}
+
+module GI.Cairo.Structs.Surface
+    ( 
+
+-- * Exported types
+    Surface(..)                             ,
+    noSurface                               ,
+
+
+    ) where
+
+import Prelude ()
+import Data.GI.Base.ShortPrelude
+
+import qualified Data.Text as T
+import qualified Data.ByteString.Char8 as B
+import qualified Data.Map as Map
+
+import GI.Cairo.Types
+import GI.Cairo.Callbacks
+
+newtype Surface = Surface (ForeignPtr Surface)
+foreign import ccall "cairo_gobject_surface_get_type" c_cairo_gobject_surface_get_type :: 
+    IO GType
+
+instance BoxedObject Surface where
+    boxedType _ = c_cairo_gobject_surface_get_type
+
+noSurface :: Maybe Surface
+noSurface = Nothing
+
+
diff --git a/GI/Cairo/Structs/Surface.hs-boot b/GI/Cairo/Structs/Surface.hs-boot
new file mode 100644
--- /dev/null
+++ b/GI/Cairo/Structs/Surface.hs-boot
@@ -0,0 +1,11 @@
+module GI.Cairo.Structs.Surface where
+
+import Prelude ()
+import Data.GI.Base.ShortPrelude
+
+import qualified Data.Text as T
+import qualified Data.ByteString.Char8 as B
+import qualified Data.Map as Map
+
+newtype Surface = Surface (ForeignPtr Surface)
+instance BoxedObject Surface where
diff --git a/GI/Cairo/Types.hs b/GI/Cairo/Types.hs
new file mode 100644
--- /dev/null
+++ b/GI/Cairo/Types.hs
@@ -0,0 +1,32 @@
+module GI.Cairo.Types
+    (     module GI.Cairo.Structs.Context         ,
+    module GI.Cairo.Structs.FontFace        ,
+    module GI.Cairo.Structs.FontOptions     ,
+    module GI.Cairo.Structs.FontType        ,
+    module GI.Cairo.Structs.Matrix          ,
+    module GI.Cairo.Structs.Path            ,
+    module GI.Cairo.Structs.Pattern         ,
+    module GI.Cairo.Structs.RectangleInt    ,
+    module GI.Cairo.Structs.Region          ,
+    module GI.Cairo.Structs.ScaledFont      ,
+    module GI.Cairo.Structs.Surface         ,
+    module GI.Cairo.Enums                   ,
+
+
+    ) where
+
+
+import {-# SOURCE #-} GI.Cairo.Structs.Context
+import {-# SOURCE #-} GI.Cairo.Structs.FontFace
+import {-# SOURCE #-} GI.Cairo.Structs.FontOptions
+import {-# SOURCE #-} GI.Cairo.Structs.FontType
+import {-# SOURCE #-} GI.Cairo.Structs.Matrix
+import {-# SOURCE #-} GI.Cairo.Structs.Path
+import {-# SOURCE #-} GI.Cairo.Structs.Pattern
+import {-# SOURCE #-} GI.Cairo.Structs.RectangleInt
+import {-# SOURCE #-} GI.Cairo.Structs.Region
+import {-# SOURCE #-} GI.Cairo.Structs.ScaledFont
+import {-# SOURCE #-} GI.Cairo.Structs.Surface
+
+import GI.Cairo.Enums
+
diff --git a/GI/CairoAttributes.hs b/GI/CairoAttributes.hs
deleted file mode 100644
--- a/GI/CairoAttributes.hs
+++ /dev/null
@@ -1,48 +0,0 @@
-{-# OPTIONS_GHC -fno-warn-orphans -fno-warn-unused-imports #-}
-
--- Generated code.
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-
-{-# LANGUAGE ForeignFunctionInterface, ConstraintKinds,
-    TypeFamilies, MultiParamTypeClasses, KindSignatures,
-    FlexibleInstances, UndecidableInstances, DataKinds,
-    OverloadedStrings, NegativeLiterals, FlexibleContexts #-}
-
-module GI.CairoAttributes where
-
-import Prelude ()
-import Data.GI.Base.ShortPrelude
-import Data.Char
-import Data.Int
-import Data.Word
-import qualified Data.ByteString.Char8 as B
-import Data.ByteString.Char8 (ByteString)
-import qualified Data.Map as Map
-import Foreign.C
-import Foreign.Ptr
-import Foreign.ForeignPtr
-import Foreign.ForeignPtr.Unsafe (unsafeForeignPtrToPtr)
-import Foreign.Storable (peek, poke, sizeOf)
-import Control.Applicative ((<$>))
-import Control.Exception (onException)
-import Control.Monad.IO.Class
-import qualified Data.Text as T
-
-import Data.GI.Base.Attributes hiding (get, set)
-import Data.GI.Base.BasicTypes
-import Data.GI.Base.BasicConversions
-import Data.GI.Base.Closure
-import Data.GI.Base.GError
-import Data.GI.Base.GHashTable
-import Data.GI.Base.GParamSpec
-import Data.GI.Base.GVariant
-import Data.GI.Base.GValue
-import Data.GI.Base.ManagedPtr
-import Data.GI.Base.Overloading
-import Data.GI.Base.Properties hiding (new)
-import Data.GI.Base.Signals (SignalConnectMode(..), connectSignalFunPtr, SignalHandlerId)
-import Data.GI.Base.Utils
-
-import GI.Cairo
-
diff --git a/GI/CairoSignals.hs b/GI/CairoSignals.hs
deleted file mode 100644
--- a/GI/CairoSignals.hs
+++ /dev/null
@@ -1,16 +0,0 @@
--- Generated code.
-
-{-# OPTIONS_GHC -fno-warn-orphans #-}
-
-{-# LANGUAGE DataKinds,    FlexibleInstances,
-             TypeFamilies, MultiParamTypeClasses,
-               TypeOperators #-}
-
-module GI.CairoSignals where
-
-import Data.GI.Base.Properties (GObjectNotifySignalInfo)
-import Data.GI.Base.Signals
-import Data.GI.Base.Overloading
-
-import GI.Cairo
-
diff --git a/gi-cairo.cabal b/gi-cairo.cabal
--- a/gi-cairo.cabal
+++ b/gi-cairo.cabal
@@ -1,6 +1,6 @@
 -- Autogenerated, do not edit.
 name:               gi-cairo
-version:            0.1.14.11
+version:            0.1.14.12
 synopsis:           cairo bindings
 description:        Bindings for cairo, autogenerated by haskell-gi.
 homepage:           https://github.com/haskell-gi/haskell-gi
@@ -14,10 +14,29 @@
 
 library
     default-language:   Haskell2010
-    exposed-modules:    GI.Cairo, GI.CairoAttributes, GI.CairoSignals
+    default-extensions: OverloadedStrings, NegativeLiterals, ConstraintKinds, TypeFamilies, MultiParamTypeClasses, KindSignatures, FlexibleInstances, UndecidableInstances, DataKinds, FlexibleContexts
+    other-extensions:   PatternSynonyms ScopedTypeVariables, ViewPatterns
+    ghc-options:        -fno-warn-unused-imports -fno-warn-warnings-deprecations
+    exposed-modules:    GI.Cairo.Types
+                        GI.Cairo
+                        GI.Cairo.Callbacks
+                        GI.Cairo.Enums
+                        GI.Cairo.Functions
+                        GI.Cairo.Structs
+                        GI.Cairo.Structs.Context
+                        GI.Cairo.Structs.FontFace
+                        GI.Cairo.Structs.FontOptions
+                        GI.Cairo.Structs.FontType
+                        GI.Cairo.Structs.Matrix
+                        GI.Cairo.Structs.Path
+                        GI.Cairo.Structs.Pattern
+                        GI.Cairo.Structs.RectangleInt
+                        GI.Cairo.Structs.Region
+                        GI.Cairo.Structs.ScaledFont
+                        GI.Cairo.Structs.Surface
     pkgconfig-depends:  cairo-gobject >= 1.14
     build-depends: base >= 4.7 && <5,
-        haskell-gi-base >= 0.11 && < 1,
+        haskell-gi-base >= 0.12 && < 1,
         bytestring >= 0.10,
         containers >= 0.5,
         text >= 1.0,
