diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,3 +1,7 @@
+### 0.21.4
+
++ Add support for callback-valued properties.
+
 ### 0.21.3
 
 + Fix a compilation error on Windows, see [issue 193](https://github.com/haskell-gi/haskell-gi/issues/193).
diff --git a/Data/GI/Base/Properties.hsc b/Data/GI/Base/Properties.hsc
--- a/Data/GI/Base/Properties.hsc
+++ b/Data/GI/Base/Properties.hsc
@@ -24,6 +24,7 @@
     , setObjectPropertyByteArray
     , setObjectPropertyPtrGList
     , setObjectPropertyHash
+    , setObjectPropertyCallback
 
     , getObjectPropertyString
     , getObjectPropertyStringArray
@@ -48,6 +49,7 @@
     , getObjectPropertyByteArray
     , getObjectPropertyPtrGList
     , getObjectPropertyHash
+    , getObjectPropertyCallback
 
     , constructObjectPropertyString
     , constructObjectPropertyStringArray
@@ -72,6 +74,7 @@
     , constructObjectPropertyByteArray
     , constructObjectPropertyPtrGList
     , constructObjectPropertyHash
+    , constructObjectPropertyCallback
     ) where
 
 #if !MIN_VERSION_base(4,8,0)
@@ -90,7 +93,8 @@
 import Data.GI.Base.GVariant (newGVariantFromPtr)
 import Data.GI.Base.Utils (freeMem, convertIfNonNull)
 
-import Foreign (Ptr, Int32, Word32, Int64, Word64, nullPtr)
+import Foreign (Ptr, FunPtr, Int32, Word32, Int64, Word64, nullPtr,
+                castFunPtrToPtr, castPtrToFunPtr)
 import Foreign.C (CString, withCString)
 import Foreign.C.Types (CInt, CUInt, CLong, CULong)
 
@@ -519,3 +523,19 @@
 getObjectPropertyHash :: GObject a => a -> String -> IO b
 getObjectPropertyHash =
     error $ "Getting GHashTable properties not supported yet."
+
+setObjectPropertyCallback :: GObject a => a -> String -> FunPtr b -> IO ()
+setObjectPropertyCallback obj propName funPtr =
+    setObjectProperty obj propName (castFunPtrToPtr funPtr) set_pointer gtypePointer
+
+constructObjectPropertyCallback :: String -> FunPtr b -> IO (GValueConstruct o)
+constructObjectPropertyCallback propName funPtr =
+  constructObjectProperty propName (castFunPtrToPtr funPtr) set_pointer gtypePointer
+
+getObjectPropertyCallback :: GObject a => a -> String ->
+                             (FunPtr b -> c) -> IO (Maybe c)
+getObjectPropertyCallback obj propName wrapper = do
+  ptr <- getObjectProperty obj propName get_pointer gtypePointer
+  if ptr /= nullPtr
+    then return . Just . wrapper $ castPtrToFunPtr ptr
+    else return Nothing
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.21.3
+version:             0.21.4
 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
