diff --git a/gi-gtk-hs.cabal b/gi-gtk-hs.cabal
--- a/gi-gtk-hs.cabal
+++ b/gi-gtk-hs.cabal
@@ -1,5 +1,5 @@
 name:                gi-gtk-hs
-version:             0.3.6.3
+version:             0.3.7.0
 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
@@ -8,7 +8,8 @@
 author:              Jonas Platte,
                      Duncan Coutts,
                      Axel Simon,
-                     Hamish Mackenzie
+                     Hamish Mackenzie,
+                     Iñaki García Etxebarria
 maintainer:          mail@jonasplatte.de
 category:            Graphics
 build-type:          Simple
@@ -27,17 +28,17 @@
                        Data.GI.Gtk.ModelView.TreeModel
                        Data.GI.Gtk.ComboBox
 
-  build-depends:       base >=4.7 && <5,
+  build-depends:       base >= 4.9 && <5,
                        base-compat >=0.9.0 && <0.11,
-                       mtl >=2.1 && <2.3,
+                       mtl >= 2.1 && <2.3,
                        transformers >=0.3.0.0 && <0.6,
                        containers >=0.5.5.1 && <0.7,
                        text >=1.2 && <1.3,
-                       haskell-gi-base >=0.21.2 && <0.22,
+                       haskell-gi-base >=0.22.0 && <0.23,
                        gi-glib >=2.0.6 && <2.1,
                        gi-gobject >=2.0.6 && <2.1,
-                       gi-gdk >=3.0.6 && <3.1,
-                       gi-gtk >=3.0.25 && <3.1,
+                       gi-gdk >= 3.0.6 && <3.1,
+                       gi-gtk >= 3.0.26 && <3.1,
                        gi-gdkpixbuf >=2.0.6 && <2.1
 
   hs-source-dirs:      src
diff --git a/src/Data/GI/Gtk/ComboBox.hs b/src/Data/GI/Gtk/ComboBox.hs
--- a/src/Data/GI/Gtk/ComboBox.hs
+++ b/src/Data/GI/Gtk/ComboBox.hs
@@ -16,7 +16,9 @@
 --  but WITHOUT ANY WARRANTY; without even the implied warranty of
 --  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 --  Lesser General Public License for more details.
---
+
+{-# LANGUAGE MonoLocalBinds #-}
+
 -- |
 -- Stability   : provisional
 -- Portability : portable (depends on GHC)
diff --git a/src/Data/GI/Gtk/ModelView/CellLayout.hs b/src/Data/GI/Gtk/ModelView/CellLayout.hs
--- a/src/Data/GI/Gtk/ModelView/CellLayout.hs
+++ b/src/Data/GI/Gtk/ModelView/CellLayout.hs
@@ -1,6 +1,8 @@
 {-# LANGUAGE LambdaCase #-}
 {-# LANGUAGE DataKinds #-}
 {-# LANGUAGE ScopedTypeVariables #-}
+{-# LANGUAGE MonoLocalBinds #-}
+
 -- -*-haskell-*-
 --  GIMP Toolkit (GTK) Interface CellLayout
 --
@@ -149,9 +151,10 @@
  -> model  -- ^ @model@ - A model from which to draw data.
  -> (TreeIter -> IO ()) -- ^ Function to set attributes on the cell renderer.
  -> m ()
-cellLayoutSetDataFunc' self cell model func = liftIO $
+cellLayoutSetDataFunc' self cell model func = liftIO $ do
   cellLayoutSetCellDataFunc self cell . Just $ \_ (CellRenderer cellPtr') model' iter -> do
-    iter <- convertIterFromParentToChildModel iter model' =<< toTreeModel model
+    castModel <- toTreeModel model
+    iter <- convertIterFromParentToChildModel iter model' castModel
     CellRenderer cellPtr <- toCellRenderer cell
     if managedForeignPtr cellPtr /= managedForeignPtr cellPtr' then
       error ("cellLayoutSetAttributeFunc: attempt to set attributes of "++
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
@@ -2,6 +2,8 @@
 {-# LANGUAGE TypeFamilies #-}
 {-# LANGUAGE DataKinds #-}
 {-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE TypeApplications #-}
+
 -- -*-haskell-*-
 --  GIMP Toolkit (GTK) CustomStore TreeModel
 --
@@ -67,11 +69,12 @@
 import Foreign.Storable (peek, poke, peekByteOff)
 import System.IO.Unsafe (unsafePerformIO)
 import Data.GI.Base.BasicTypes
-       (ManagedPtr(..), GObject(..), GType, CGType(..), gtypeToCGType,
-        gtypeInt, gtypeBoolean, gtypeString, gtypeInvalid)
+       (ManagedPtr(..), GObject(..), 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_)
 import Data.GI.Base.GValue (GValue(..))
+import Data.GI.Base.Overloading (HasParentTypes, ParentTypes)
 import GI.GObject (Object)
 import GI.GdkPixbuf.Objects (Pixbuf(..))
 import GI.Gtk.Flags (TreeModelFlags(..))
@@ -108,13 +111,15 @@
 --   models 'Data.GI.Gtk.ModelView.ListStore.ListStore' or
 --   'Data.GI.Gtk.ModelView.TreeStore.TreeStore'.
 newtype CustomStore private row = CustomStore (ManagedPtr (CustomStore private row))
-instance IsTreeModel (CustomStore private row)
 
+instance HasParentTypes (CustomStore private row)
+type instance ParentTypes (CustomStore private row) = '[ TreeModel ]
+
 instance GObject (CustomStore private row) where
 #if !MIN_VERSION_haskell_gi_base(0,20,1)
     gobjectIsInitiallyUnowned _ = False
 #endif
-    gobjectType _ = gobjectType (undefined :: TreeModel)
+    gobjectType = gobjectType @TreeModel
 
 -- | Type synonym for viewing the store as a set of columns.
 type ColumnMap row = IORef [ColumnAccess row]
@@ -314,7 +319,7 @@
 caToGType CAInvalid = gtypeInt -- to avoid warnings of functions that iterate through all columns
 
 gtypePixbuf :: GType
-gtypePixbuf = unsafePerformIO $ gobjectType (undefined :: Pixbuf)
+gtypePixbuf = unsafePerformIO $ gobjectType @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
@@ -3,6 +3,8 @@
 {-# LANGUAGE DataKinds #-}
 {-# LANGUAGE LambdaCase #-}
 {-# LANGUAGE ScopedTypeVariables #-}
+{-# LANGUAGE TypeApplications #-}
+
 -- -*-haskell-*-
 --  GIMP Toolkit (GTK) CustomStore TreeModel
 --
@@ -77,6 +79,7 @@
 import Data.GI.Base.BasicTypes
        (ManagedPtr(..), GObject(..), GObject)
 import Data.GI.Base.ManagedPtr (withManagedPtr)
+import Data.GI.Base.Overloading (HasParentTypes, ParentTypes)
 
 import Data.GI.Gtk.ModelView.Types
 import Data.GI.Gtk.ModelView.CustomStore
@@ -132,13 +135,14 @@
 mkForestStore :: CustomStore (IORef (Store a)) a -> ForestStore a
 mkForestStore (CustomStore ptr) = ForestStore ptr
 
-instance IsTreeModel (ForestStore a)
+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 (undefined :: TreeModel)
+    gobjectType = gobjectType @TreeModel
 
 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
@@ -2,6 +2,8 @@
 {-# LANGUAGE ScopedTypeVariables #-}
 {-# LANGUAGE TypeFamilies #-}
 {-# LANGUAGE DataKinds #-}
+{-# LANGUAGE TypeApplications #-}
+
 -- -*-haskell-*-
 --  GIMP Toolkit (GTK) CustomStore TreeModel
 --
@@ -89,6 +91,7 @@
        (setTreeIterUserData3, setTreeIterUserData2, setTreeIterStamp,
         setTreeIterUserData, getTreeIterUserData, TreeIter(..))
 import Data.GI.Base (get, new)
+import Data.GI.Base.Overloading (HasParentTypes, ParentTypes)
 import Data.Word (Word32)
 import Unsafe.Coerce (unsafeCoerce)
 import Foreign.Ptr (nullPtr)
@@ -107,13 +110,14 @@
 mkSeqStore :: CustomStore (IORef (Seq a)) a -> SeqStore a
 mkSeqStore (CustomStore ptr) = SeqStore ptr
 
-instance IsTreeModel (SeqStore a)
+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 (undefined :: TreeModel)
+    gobjectType = gobjectType @TreeModel
 
 instance IsTypedTreeModel SeqStore
 
diff --git a/src/Data/GI/Gtk/ModelView/TreeModel.hs b/src/Data/GI/Gtk/ModelView/TreeModel.hs
--- a/src/Data/GI/Gtk/ModelView/TreeModel.hs
+++ b/src/Data/GI/Gtk/ModelView/TreeModel.hs
@@ -1,4 +1,3 @@
-{-# LANGUAGE LambdaCase #-}
 -- -*-haskell-*-
 --  GIMP Toolkit (GTK) TreeModel
 --
@@ -17,6 +16,10 @@
 --  but WITHOUT ANY WARRANTY; without even the implied warranty of
 --  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 --  Lesser General Public License for more details.
+
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE MonoLocalBinds #-}
+
 --
 -- |
 -- Stability   : provisional
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
@@ -9,6 +9,8 @@
 {-# LANGUAGE DataKinds #-}
 {-# LANGUAGE TypeFamilies #-}
 {-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE TypeApplications #-}
+
 -- -*-haskell-*-
 --  GIMP Toolkit (GTK) CustomStore TreeModel
 --
@@ -89,6 +91,7 @@
        (ManagedPtr(..), ManagedPtrNewtype, UnexpectedNullPointerReturn,
         GObject(..))
 import Data.GI.Base.ManagedPtr (withManagedPtr)
+import Data.GI.Base.Overloading (HasParentTypes, ParentTypes)
 import Data.GI.Base.GValue (GValue)
 import GI.GObject.Objects.Object (Object(..))
 import GI.Gtk.Interfaces.TreeModel (TreeModel, IsTreeModel(..))
@@ -129,15 +132,14 @@
 
 newtype TypedTreeModelSort row = TypedTreeModelSort (ManagedPtr (TypedTreeModelSort row))
 
-instance IsTreeModelSort (TypedTreeModelSort row)
-instance IsTreeSortable (TypedTreeModelSort row)
-instance IsTreeModel (TypedTreeModelSort row)
+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 (undefined :: TreeModelSort)
+    gobjectType = gobjectType @TreeModelSort
 
 unsafeTreeModelSortToGeneric :: TreeModelSort -> TypedTreeModelSort row
 unsafeTreeModelSortToGeneric = unsafeCoerce#
