diff --git a/GI/Atk/Callbacks.hs b/GI/Atk/Callbacks.hs
--- a/GI/Atk/Callbacks.hs
+++ b/GI/Atk/Callbacks.hs
@@ -107,7 +107,7 @@
     IO ()
 propertyChangeHandlerWrapper funptrptr _cb obj vals = do
     obj' <- (newObject Object) obj
-    vals' <- (newPtr 56 PropertyValues) vals
+    vals' <- (newPtr PropertyValues) vals
     _cb  obj' vals'
     maybeReleaseFunPtr funptrptr
 
@@ -138,7 +138,7 @@
     Ptr () ->
     IO Int32
 keySnoopFuncWrapper funptrptr _cb event _ = do
-    event' <- (newPtr 32 KeyEventStruct) event
+    event' <- (newPtr KeyEventStruct) event
     result <- _cb  event'
     maybeReleaseFunPtr funptrptr
     return result
diff --git a/GI/Atk/Structs/Attribute.hs b/GI/Atk/Structs/Attribute.hs
--- a/GI/Atk/Structs/Attribute.hs
+++ b/GI/Atk/Structs/Attribute.hs
@@ -64,9 +64,14 @@
 import GI.Atk.Callbacks
 
 newtype Attribute = Attribute (ForeignPtr Attribute)
+instance WrappedPtr Attribute where
+    wrappedPtrCalloc = callocBytes 16
+    wrappedPtrCopy = copyPtr 16
+    wrappedPtrFree = Just ptr_to_g_free
+
 -- | Construct a `Attribute` struct initialized to zero.
 newZeroAttribute :: MonadIO m => m Attribute
-newZeroAttribute = liftIO $ callocBytes 16 >>= wrapPtr Attribute
+newZeroAttribute = liftIO $ wrappedPtrCalloc >>= wrapPtr Attribute
 
 instance tag ~ 'AttrSet => Constructible Attribute tag where
     new _ attrs = do
diff --git a/GI/Atk/Structs/Attribute.hs-boot b/GI/Atk/Structs/Attribute.hs-boot
--- a/GI/Atk/Structs/Attribute.hs-boot
+++ b/GI/Atk/Structs/Attribute.hs-boot
@@ -8,3 +8,4 @@
 import qualified Data.Map as Map
 
 newtype Attribute = Attribute (ForeignPtr Attribute)
+instance WrappedPtr Attribute where
diff --git a/GI/Atk/Structs/Implementor.hs b/GI/Atk/Structs/Implementor.hs
--- a/GI/Atk/Structs/Implementor.hs
+++ b/GI/Atk/Structs/Implementor.hs
@@ -35,6 +35,12 @@
 import GI.Atk.Callbacks
 
 newtype Implementor = Implementor (ForeignPtr Implementor)
+-- XXX Wrapping a foreign struct/union with no known destructor or size, leak?
+instance WrappedPtr Implementor where
+    wrappedPtrCalloc = return nullPtr
+    wrappedPtrCopy = return
+    wrappedPtrFree = Nothing
+
 noImplementor :: Maybe Implementor
 noImplementor = Nothing
 
diff --git a/GI/Atk/Structs/Implementor.hs-boot b/GI/Atk/Structs/Implementor.hs-boot
--- a/GI/Atk/Structs/Implementor.hs-boot
+++ b/GI/Atk/Structs/Implementor.hs-boot
@@ -8,4 +8,5 @@
 import qualified Data.Map as Map
 
 newtype Implementor = Implementor (ForeignPtr Implementor)
+instance WrappedPtr Implementor where
 data ImplementorRefAccessibleMethodInfo
diff --git a/GI/Atk/Structs/KeyEventStruct.hs b/GI/Atk/Structs/KeyEventStruct.hs
--- a/GI/Atk/Structs/KeyEventStruct.hs
+++ b/GI/Atk/Structs/KeyEventStruct.hs
@@ -76,9 +76,14 @@
 import GI.Atk.Callbacks
 
 newtype KeyEventStruct = KeyEventStruct (ForeignPtr KeyEventStruct)
+instance WrappedPtr KeyEventStruct where
+    wrappedPtrCalloc = callocBytes 32
+    wrappedPtrCopy = copyPtr 32
+    wrappedPtrFree = Just ptr_to_g_free
+
 -- | Construct a `KeyEventStruct` struct initialized to zero.
 newZeroKeyEventStruct :: MonadIO m => m KeyEventStruct
-newZeroKeyEventStruct = liftIO $ callocBytes 32 >>= wrapPtr KeyEventStruct
+newZeroKeyEventStruct = liftIO $ wrappedPtrCalloc >>= wrapPtr KeyEventStruct
 
 instance tag ~ 'AttrSet => Constructible KeyEventStruct tag where
     new _ attrs = do
diff --git a/GI/Atk/Structs/KeyEventStruct.hs-boot b/GI/Atk/Structs/KeyEventStruct.hs-boot
--- a/GI/Atk/Structs/KeyEventStruct.hs-boot
+++ b/GI/Atk/Structs/KeyEventStruct.hs-boot
@@ -8,3 +8,4 @@
 import qualified Data.Map as Map
 
 newtype KeyEventStruct = KeyEventStruct (ForeignPtr KeyEventStruct)
+instance WrappedPtr KeyEventStruct where
diff --git a/GI/Atk/Structs/PropertyValues.hs b/GI/Atk/Structs/PropertyValues.hs
--- a/GI/Atk/Structs/PropertyValues.hs
+++ b/GI/Atk/Structs/PropertyValues.hs
@@ -56,9 +56,14 @@
 import GI.Atk.Callbacks
 
 newtype PropertyValues = PropertyValues (ForeignPtr PropertyValues)
+instance WrappedPtr PropertyValues where
+    wrappedPtrCalloc = callocBytes 56
+    wrappedPtrCopy = copyPtr 56
+    wrappedPtrFree = Just ptr_to_g_free
+
 -- | Construct a `PropertyValues` struct initialized to zero.
 newZeroPropertyValues :: MonadIO m => m PropertyValues
-newZeroPropertyValues = liftIO $ callocBytes 56 >>= wrapPtr PropertyValues
+newZeroPropertyValues = liftIO $ wrappedPtrCalloc >>= wrapPtr PropertyValues
 
 instance tag ~ 'AttrSet => Constructible PropertyValues tag where
     new _ attrs = do
diff --git a/GI/Atk/Structs/PropertyValues.hs-boot b/GI/Atk/Structs/PropertyValues.hs-boot
--- a/GI/Atk/Structs/PropertyValues.hs-boot
+++ b/GI/Atk/Structs/PropertyValues.hs-boot
@@ -8,3 +8,4 @@
 import qualified Data.Map as Map
 
 newtype PropertyValues = PropertyValues (ForeignPtr PropertyValues)
+instance WrappedPtr PropertyValues where
diff --git a/GI/Atk/Structs/TextRange.hs b/GI/Atk/Structs/TextRange.hs
--- a/GI/Atk/Structs/TextRange.hs
+++ b/GI/Atk/Structs/TextRange.hs
@@ -83,7 +83,7 @@
 textRangeReadBounds s = liftIO $ withManagedPtr s $ \ptr -> do
     val <- peek (ptr `plusPtr` 0) :: IO (Ptr TextRectangle)
     result <- convertIfNonNull val $ \val' -> do
-        val'' <- (newPtr 16 TextRectangle) val'
+        val'' <- (newPtr TextRectangle) val'
         return val''
     return result
 
diff --git a/GI/Atk/Structs/TextRectangle.hs b/GI/Atk/Structs/TextRectangle.hs
--- a/GI/Atk/Structs/TextRectangle.hs
+++ b/GI/Atk/Structs/TextRectangle.hs
@@ -57,9 +57,14 @@
 import GI.Atk.Callbacks
 
 newtype TextRectangle = TextRectangle (ForeignPtr TextRectangle)
+instance WrappedPtr TextRectangle where
+    wrappedPtrCalloc = callocBytes 16
+    wrappedPtrCopy = copyPtr 16
+    wrappedPtrFree = Just ptr_to_g_free
+
 -- | Construct a `TextRectangle` struct initialized to zero.
 newZeroTextRectangle :: MonadIO m => m TextRectangle
-newZeroTextRectangle = liftIO $ callocBytes 16 >>= wrapPtr TextRectangle
+newZeroTextRectangle = liftIO $ wrappedPtrCalloc >>= wrapPtr TextRectangle
 
 instance tag ~ 'AttrSet => Constructible TextRectangle tag where
     new _ attrs = do
diff --git a/GI/Atk/Structs/TextRectangle.hs-boot b/GI/Atk/Structs/TextRectangle.hs-boot
--- a/GI/Atk/Structs/TextRectangle.hs-boot
+++ b/GI/Atk/Structs/TextRectangle.hs-boot
@@ -8,3 +8,4 @@
 import qualified Data.Map as Map
 
 newtype TextRectangle = TextRectangle (ForeignPtr TextRectangle)
+instance WrappedPtr TextRectangle where
diff --git a/gi-atk.cabal b/gi-atk.cabal
--- a/gi-atk.cabal
+++ b/gi-atk.cabal
@@ -1,6 +1,6 @@
 -- Autogenerated, do not edit.
 name:               gi-atk
-version:            0.2.18.14
+version:            0.2.18.15
 synopsis:           Atk bindings
 description:        Bindings for Atk, autogenerated by haskell-gi.
 homepage:           https://github.com/haskell-gi/haskell-gi
@@ -66,9 +66,9 @@
                         GI.Atk.Structs.TextRectangle
     pkgconfig-depends:  atk >= 2.18
     build-depends: base >= 4.7 && <5,
-        haskell-gi-base >= 0.14 && < 1,
-        gi-glib >= 0.2.46.14 && < 0.2.47,
-        gi-gobject >= 0.2.46.14 && < 0.2.47,
+        haskell-gi-base >= 0.15 && < 1,
+        gi-glib >= 0.2.46.15 && < 0.2.47,
+        gi-gobject >= 0.2.46.15 && < 0.2.47,
         bytestring >= 0.10,
         containers >= 0.5,
         text >= 1.0,
