diff --git a/haskell-gi-base.cabal b/haskell-gi-base.cabal
--- a/haskell-gi-base.cabal
+++ b/haskell-gi-base.cabal
@@ -1,5 +1,5 @@
 name:                haskell-gi-base
-version:             0.18.4
+version:             0.19
 synopsis:            Foundation for libraries generated by haskell-gi
 description:         Foundation for libraries generated by haskell-gi
 homepage:            https://github.com/haskell-gi/haskell-gi-base
diff --git a/src/Data/GI/Base/ManagedPtr.hs b/src/Data/GI/Base/ManagedPtr.hs
--- a/src/Data/GI/Base/ManagedPtr.hs
+++ b/src/Data/GI/Base/ManagedPtr.hs
@@ -61,7 +61,7 @@
 
 #if MIN_VERSION_base(4,9,0)
 import GHC.Stack (HasCallStack)
-#elif MIN_VERSION_base(4,8,0)
+#elif MIN_VERSION_base(4,8,1)
 import GHC.Stack (CallStack)
 import GHC.Exts (Constraint)
 type HasCallStack = ((?callStack :: CallStack) :: Constraint)
diff --git a/src/Data/GI/Base/Utils.hsc b/src/Data/GI/Base/Utils.hsc
--- a/src/Data/GI/Base/Utils.hsc
+++ b/src/Data/GI/Base/Utils.hsc
@@ -9,6 +9,7 @@
     , mapSecond
     , mapSecondA
     , convertIfNonNull
+    , convertFunPtrIfNonNull
     , callocBytes
     , callocBoxedBytes
     , callocMem
@@ -38,7 +39,7 @@
 
 import Foreign (peek)
 import Foreign.C.Types (CSize(..))
-import Foreign.Ptr (Ptr, nullPtr, FunPtr, freeHaskellFunPtr)
+import Foreign.Ptr (Ptr, nullPtr, FunPtr, nullFunPtr, freeHaskellFunPtr)
 import Foreign.Storable (Storable(..))
 
 import Data.GI.Base.BasicTypes (GType(..), CGType, BoxedObject(..),
@@ -90,6 +91,13 @@
 convertIfNonNull ptr convert = if ptr == nullPtr
                                then return Nothing
                                else Just <$> convert ptr
+
+-- | Apply the given conversion action to the given function pointer
+-- if it is non-NULL, otherwise return `Nothing`.
+convertFunPtrIfNonNull :: FunPtr a -> (FunPtr a -> IO b) -> IO (Maybe b)
+convertFunPtrIfNonNull ptr convert = if ptr == nullFunPtr
+                                     then return Nothing
+                                     else Just <$> convert ptr
 
 foreign import ccall "g_malloc0" g_malloc0 ::
     #{type gsize} -> IO (Ptr a)
