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.1
+version:             0.3.6.2
 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
@@ -33,11 +33,11 @@
                        transformers >=0.3.0.0 && <0.6,
                        containers >=0.5.5.1 && <0.6,
                        text >=1.2 && <1.3,
-                       haskell-gi-base >=0.20 && <0.22,
+                       haskell-gi-base >=0.21.2 && <0.22,
                        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.6 && <3.1,
+                       gi-gtk >=3.0.25 && <3.1,
                        gi-gdkpixbuf >=2.0.6 && <2.1
 
   hs-source-dirs:      src
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
@@ -70,7 +70,7 @@
        (ManagedPtr(..), GObject(..), GType, CGType(..), gtypeToCGType,
         gtypeInt, gtypeBoolean, gtypeString, gtypeInvalid)
 import Data.GI.Base.BasicConversions (gflagsToWord, withTextCString)
-import Data.GI.Base.ManagedPtr (newObject, withManagedPtr)
+import Data.GI.Base.ManagedPtr (newObject, withManagedPtr, newManagedPtr_)
 import Data.GI.Base.GValue (GValue(..))
 import GI.GObject (Object)
 import GI.GdkPixbuf.Objects (Pixbuf(..))
@@ -338,24 +338,12 @@
 foreign export ccall "gtk2hs_store_get_flags_impl"
   treeModelIfaceGetFlags_static :: StablePtr (CustomStoreImplementation model row) -> IO CInt
 
-tempManagedPtr :: Ptr a -> IO (ManagedPtr a)
-tempManagedPtr p = do
-#if MIN_VERSION_haskell_gi_base(0,20,3)
-  isDisowned <- newIORef Nothing
-  fPtr <- newForeignPtr_ p
-  return $ ManagedPtr fPtr isDisowned
-#else
-  isOwned <- newIORef True
-  fPtr <- newForeignPtr_ p
-  return $ ManagedPtr fPtr isOwned
-#endif
-
 treeModelIfaceGetIter_static :: StablePtr (CustomStoreImplementation model row) -> Ptr TreeIter -> Ptr TreePath -> IO CInt
 treeModelIfaceGetIter_static storePtr iterPtr pathPtr = do
-  iterOut <- TreeIter <$> tempManagedPtr iterPtr  -- Take care not to use this outside of this function
+  iterOut <- TreeIter <$> newManagedPtr_ iterPtr  -- Take care not to use this outside of this function
   store <- customStoreIface <$> deRefStablePtr storePtr
   isOwned' <- newIORef False
-  path <- treePathCopy . TreePath =<< tempManagedPtr pathPtr
+  path <- treePathCopy . TreePath =<< newManagedPtr_ pathPtr
   treeModelIfaceGetIter store path >>= \case
     Nothing   -> return (fromBool False)
     Just iter -> do treeIterOverwrite iterOut iter
@@ -415,7 +403,7 @@
 
 treeModelIfaceIterNext_static :: StablePtr (CustomStoreImplementation model row) -> Ptr TreeIter -> IO CInt
 treeModelIfaceIterNext_static storePtr iterPtr = do
-  iterOut <- TreeIter <$> tempManagedPtr iterPtr -- Take care not to use this outside of this function
+  iterOut <- TreeIter <$> newManagedPtr_ iterPtr -- Take care not to use this outside of this function
   store <- customStoreIface <$> deRefStablePtr storePtr
   iter <- newBoxed TreeIter iterPtr
   treeModelIfaceIterNext store iter >>= \case
@@ -429,7 +417,7 @@
 
 treeModelIfaceIterChildren_static :: StablePtr (CustomStoreImplementation model row) -> Ptr TreeIter -> Ptr TreeIter -> IO CInt
 treeModelIfaceIterChildren_static storePtr iterPtr parentIterPtr = do
-  iterOut <- TreeIter <$> tempManagedPtr iterPtr -- Take care not to use this outside of this function
+  iterOut <- TreeIter <$> newManagedPtr_ iterPtr -- Take care not to use this outside of this function
   store <- customStoreIface <$> deRefStablePtr storePtr
   parentIter <- maybeNull (newBoxed TreeIter) parentIterPtr
   treeModelIfaceIterChildren store parentIter >>= \case
@@ -463,7 +451,7 @@
 
 treeModelIfaceIterNthChild_static :: StablePtr (CustomStoreImplementation model row) -> Ptr TreeIter -> Ptr TreeIter -> CInt -> IO CInt
 treeModelIfaceIterNthChild_static storePtr iterPtr parentIterPtr n = do
-  iterOut <- TreeIter <$> tempManagedPtr iterPtr -- Take care not to use this outside of this function
+  iterOut <- TreeIter <$> newManagedPtr_ iterPtr -- Take care not to use this outside of this function
   store <- customStoreIface <$> deRefStablePtr storePtr
   parentIter <- maybeNull (newBoxed TreeIter) parentIterPtr
   treeModelIfaceIterNthChild store parentIter (fromIntegral n) >>= \case
@@ -477,7 +465,7 @@
 
 treeModelIfaceIterParent_static :: StablePtr (CustomStoreImplementation model row) -> Ptr TreeIter -> Ptr TreeIter -> IO CInt
 treeModelIfaceIterParent_static  storePtr iterPtr childIterPtr = do
-  iterOut <- TreeIter <$> tempManagedPtr iterPtr -- Take care not to use this outside of this function
+  iterOut <- TreeIter <$> newManagedPtr_ iterPtr -- Take care not to use this outside of this function
   store <- customStoreIface <$> deRefStablePtr storePtr
   childIter <- newBoxed TreeIter childIterPtr
   iter <- treeModelIfaceIterParent store childIter
@@ -513,7 +501,7 @@
 customDragSourceRowDraggable_static mPtr storePtr pathPtr = do
   model <- newObject TreeModel mPtr
   store <- customTreeDragSourceIface <$> deRefStablePtr storePtr
-  path <- treePathCopy . TreePath =<< tempManagedPtr pathPtr
+  path <- treePathCopy . TreePath =<< newManagedPtr_ pathPtr
   fromBool <$> customDragSourceRowDraggable store (unsafeTreeModelToGeneric model) path
 
 foreign export ccall "gtk2hs_store_row_draggable_impl"
@@ -523,8 +511,8 @@
 customDragSourceDragDataGet_static mPtr storePtr pathPtr selectionPtr = do
   model <- newObject TreeModel mPtr
   store <- customTreeDragSourceIface <$> deRefStablePtr storePtr
-  path <- treePathCopy . TreePath =<< tempManagedPtr pathPtr
-  selection <- selectionDataCopy . SelectionData =<< tempManagedPtr selectionPtr
+  path <- treePathCopy . TreePath =<< newManagedPtr_ pathPtr
+  selection <- selectionDataCopy . SelectionData =<< newManagedPtr_ selectionPtr
   fromBool <$> customDragSourceDragDataGet store (unsafeTreeModelToGeneric model) path selection
 
 foreign export ccall "gtk2hs_store_drag_data_get_impl"
@@ -534,7 +522,7 @@
 customDragSourceDragDataDelete_static mPtr storePtr pathPtr = do
   model <- newObject TreeModel mPtr
   store <- customTreeDragSourceIface <$> deRefStablePtr storePtr
-  path <- treePathCopy . TreePath =<< tempManagedPtr pathPtr
+  path <- treePathCopy . TreePath =<< newManagedPtr_ pathPtr
   fromBool <$> customDragSourceDragDataDelete store (unsafeTreeModelToGeneric model) path
 
 foreign export ccall "gtk2hs_store_drag_data_delete_impl"
@@ -544,8 +532,8 @@
 customDragDestDragDataReceived_static mPtr storePtr pathPtr selectionPtr = do
   model <- newObject TreeModel mPtr
   store <- customTreeDragDestIface <$> deRefStablePtr storePtr
-  path <- treePathCopy . TreePath =<< tempManagedPtr pathPtr
-  selection <- selectionDataCopy . SelectionData =<< tempManagedPtr selectionPtr
+  path <- treePathCopy . TreePath =<< newManagedPtr_ pathPtr
+  selection <- selectionDataCopy . SelectionData =<< newManagedPtr_ selectionPtr
   fromBool <$> customDragDestDragDataReceived store (unsafeTreeModelToGeneric model) path selection
 
 foreign export ccall "gtk2hs_store_drag_data_received_impl"
@@ -555,8 +543,8 @@
 customDragDestRowDropPossible_static mPtr storePtr pathPtr selectionPtr = do
   model <- newObject TreeModel mPtr
   store <- customTreeDragDestIface <$> deRefStablePtr storePtr
-  path <- treePathCopy . TreePath =<< tempManagedPtr pathPtr
-  selection <- selectionDataCopy . SelectionData =<< tempManagedPtr selectionPtr
+  path <- treePathCopy . TreePath =<< newManagedPtr_ pathPtr
+  selection <- selectionDataCopy . SelectionData =<< newManagedPtr_ selectionPtr
   fromBool <$> customDragDestRowDropPossible store (unsafeTreeModelToGeneric model) path selection
 
 foreign export ccall "gtk2hs_store_row_drop_possible_impl"
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
@@ -172,7 +172,11 @@
 treePathGetIndices' :: MonadIO m => TreePath -> m [Int32]
 treePathGetIndices' path = treePathGetDepth path >>= \case
                                 0 -> return []
-                                _ -> treePathGetIndices path
+                                _ -> do
+                                  indices <- treePathGetIndices path
+                                  case indices of
+                                    Just ixs -> return ixs
+                                    Nothing -> return []
 
 withTreePath :: MonadIO m => [Int32] -> (TreePath -> m a) -> m a
 withTreePath tp act = treePathNewFromIndices' tp >>= act
