diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,3 +1,7 @@
+### 0.24.8
+
++ Make the StablePtr IsGValue instance make a copy in fromGValue.
+
 ### 0.24.7
 
 + Add a mechanism for marshalling generic Haskell values into `GValue`s.
diff --git a/Data/GI/Base/GValue.hs b/Data/GI/Base/GValue.hs
--- a/Data/GI/Base/GValue.hs
+++ b/Data/GI/Base/GValue.hs
@@ -398,6 +398,8 @@
     Ptr GValue -> Ptr a -> IO ()
 foreign import ccall "g_value_get_boxed" get_boxed ::
     Ptr GValue -> IO (Ptr b)
+foreign import ccall "g_value_dup_boxed" dup_boxed ::
+    Ptr GValue -> IO (Ptr b)
 
 foreign import ccall "g_value_set_variant" set_variant ::
     Ptr GValue -> Ptr GVariant -> IO ()
@@ -425,9 +427,10 @@
 take_stablePtr gvPtr stablePtr =
   g_value_take_boxed gvPtr (castStablePtrToPtr stablePtr)
 
--- | Get the value of a `GValue` containing a `StablePtr`
+-- | Get (a freshly allocated copy of) the value of a `GValue`
+-- containing a `StablePtr`
 get_stablePtr :: Ptr GValue -> IO (StablePtr a)
-get_stablePtr gv = castPtrToStablePtr <$> get_boxed gv
+get_stablePtr gv = castPtrToStablePtr <$> dup_boxed gv
 
 foreign import ccall g_value_copy :: Ptr GValue -> Ptr GValue -> IO ()
 
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.26.7
+version:             0.26.8
 synopsis:            Foundation for libraries generated by haskell-gi
 description:         Foundation for libraries generated by haskell-gi
 homepage:            https://github.com/haskell-gi/haskell-gi
