diff --git a/gi-gtk-hs.cabal b/gi-gtk-hs.cabal
--- a/gi-gtk-hs.cabal
+++ b/gi-gtk-hs.cabal
@@ -1,8 +1,8 @@
 name:                gi-gtk-hs
-version:             0.3.8.1
+version:             0.3.9
 synopsis:            A wrapper for gi-gtk, adding a few more idiomatic API parts on top
 description:         A wrapper for gi-gtk, adding a few more idiomatic API parts on top
-homepage:            https://github.com/haskell-gi/gi-gtk-hs
+homepage:            https://github.com/haskell-gi/haskell-gi
 license:             LGPL-2.1
 license-file:        LICENSE
 author:              Jonas Platte,
@@ -34,7 +34,7 @@
                        transformers >=0.3.0.0 && <0.6,
                        containers >=0.5.5.1 && <0.7,
                        text >=1.2 && <1.3,
-                       haskell-gi-base >=0.23.0 && <0.24,
+                       haskell-gi-base >=0.24.0 && <0.25,
                        gi-glib >=2.0.6 && <2.1,
                        gi-gobject >=2.0.6 && <2.1,
                        gi-gdk >= 3.0.6 && <3.1,
diff --git a/src/Data/GI/Gtk/ModelView/CustomStore.hs b/src/Data/GI/Gtk/ModelView/CustomStore.hs
--- a/src/Data/GI/Gtk/ModelView/CustomStore.hs
+++ b/src/Data/GI/Gtk/ModelView/CustomStore.hs
@@ -69,7 +69,8 @@
 import Foreign.Storable (peek, poke, peekByteOff)
 import System.IO.Unsafe (unsafePerformIO)
 import Data.GI.Base.BasicTypes
-       (ManagedPtr(..), GObject(..), GType, CGType(..), gtypeToCGType)
+       (ManagedPtr(..), GObject, TypedObject(..),
+        GType, CGType(..), gtypeToCGType)
 import Data.GI.Base.GType (gtypeInt, gtypeBoolean, gtypeString, gtypeInvalid)
 import Data.GI.Base.BasicConversions (gflagsToWord, withTextCString)
 import Data.GI.Base.ManagedPtr (newObject, withManagedPtr, newManagedPtr_)
@@ -115,11 +116,10 @@
 instance HasParentTypes (CustomStore private row)
 type instance ParentTypes (CustomStore private row) = '[ TreeModel ]
 
+instance TypedObject (CustomStore private row) where
+  glibType = glibType @TreeModel
+
 instance GObject (CustomStore private row) where
-#if !MIN_VERSION_haskell_gi_base(0,20,1)
-    gobjectIsInitiallyUnowned _ = False
-#endif
-    gobjectType = gobjectType @TreeModel
 
 -- | Type synonym for viewing the store as a set of columns.
 type ColumnMap row = IORef [ColumnAccess row]
@@ -319,7 +319,7 @@
 caToGType CAInvalid = gtypeInt -- to avoid warnings of functions that iterate through all columns
 
 gtypePixbuf :: GType
-gtypePixbuf = unsafePerformIO $ gobjectType @Pixbuf
+gtypePixbuf = unsafePerformIO $ glibType @Pixbuf
 {-# NOINLINE gtypePixbuf #-}
 
 treeModelIfaceGetColumnType_static :: StablePtr (CustomStoreImplementation model row) -> CInt -> IO CGType
diff --git a/src/Data/GI/Gtk/ModelView/ForestStore.hs b/src/Data/GI/Gtk/ModelView/ForestStore.hs
--- a/src/Data/GI/Gtk/ModelView/ForestStore.hs
+++ b/src/Data/GI/Gtk/ModelView/ForestStore.hs
@@ -77,7 +77,7 @@
 import Foreign.ForeignPtr (ForeignPtr)
 
 import Data.GI.Base.BasicTypes
-       (ManagedPtr(..), GObject(..), GObject)
+       (TypedObject(..), ManagedPtr(..), GObject)
 import Data.GI.Base.ManagedPtr (withManagedPtr)
 import Data.GI.Base.Overloading (HasParentTypes, ParentTypes)
 
@@ -138,11 +138,10 @@
 instance HasParentTypes (ForestStore a)
 type instance ParentTypes (ForestStore a) = '[TreeModel]
 
-instance GObject (ForestStore a) where
-#if !MIN_VERSION_haskell_gi_base(0,20,1)
-    gobjectIsInitiallyUnowned _ = False
-#endif
-    gobjectType = gobjectType @TreeModel
+instance TypedObject (ForestStore a) where
+  glibType = glibType @TreeModel
+
+instance GObject (ForestStore a)
 
 instance IsTypedTreeModel ForestStore
 
diff --git a/src/Data/GI/Gtk/ModelView/SeqStore.hs b/src/Data/GI/Gtk/ModelView/SeqStore.hs
--- a/src/Data/GI/Gtk/ModelView/SeqStore.hs
+++ b/src/Data/GI/Gtk/ModelView/SeqStore.hs
@@ -78,7 +78,7 @@
         TreeModelIface(..), customStoreNew, DragDestIface(..),
         DragSourceIface(..), CustomStore(..))
 import Data.GI.Base.BasicTypes
-       (ManagedPtr(..), GObject(..), GObject)
+       (TypedObject(..), ManagedPtr(..), GObject)
 import Data.GI.Base.ManagedPtr (withManagedPtr)
 import GI.Gtk.Interfaces.TreeModel
        (treeModelRowDeleted, treeModelRowInserted,
@@ -113,11 +113,10 @@
 instance HasParentTypes (SeqStore a)
 type instance ParentTypes (SeqStore a) = '[TreeModel]
 
-instance GObject (SeqStore a) where
-#if !MIN_VERSION_haskell_gi_base(0,20,1)
-    gobjectIsInitiallyUnowned _ = False
-#endif
-    gobjectType = gobjectType @TreeModel
+instance TypedObject (SeqStore a) where
+  glibType = glibType @TreeModel
+
+instance GObject (SeqStore a)
 
 instance IsTypedTreeModel SeqStore
 
diff --git a/src/Data/GI/Gtk/ModelView/Types.hs b/src/Data/GI/Gtk/ModelView/Types.hs
--- a/src/Data/GI/Gtk/ModelView/Types.hs
+++ b/src/Data/GI/Gtk/ModelView/Types.hs
@@ -89,7 +89,7 @@
 import Foreign.Marshal.Utils (with)
 import Data.GI.Base.BasicTypes
        (ManagedPtr(..), ManagedPtrNewtype, UnexpectedNullPointerReturn,
-        GObject(..))
+        TypedObject(..), GObject)
 import Data.GI.Base.ManagedPtr (withManagedPtr)
 import Data.GI.Base.Overloading (HasParentTypes, ParentTypes)
 import Data.GI.Base.GValue (GValue)
@@ -135,11 +135,10 @@
 instance HasParentTypes (TypedTreeModelSort row)
 type instance ParentTypes (TypedTreeModelSort row) = '[TreeSortable, TreeModel, TreeModelSort]
 
-instance GObject (TypedTreeModelSort row) where
-#if !MIN_VERSION_haskell_gi_base(0,20,1)
-    gobjectIsInitiallyUnowned _ = False
-#endif
-    gobjectType = gobjectType @TreeModelSort
+instance TypedObject (TypedTreeModelSort row) where
+  glibType = glibType @TreeModelSort
+
+instance GObject (TypedTreeModelSort row)
 
 unsafeTreeModelSortToGeneric :: TreeModelSort -> TypedTreeModelSort row
 unsafeTreeModelSortToGeneric = unsafeCoerce#
