diff --git a/hw-kafka-client.cabal b/hw-kafka-client.cabal
--- a/hw-kafka-client.cabal
+++ b/hw-kafka-client.cabal
@@ -1,7 +1,7 @@
 cabal-version: 2.2
 
 name:                   hw-kafka-client
-version:                4.0.1
+version:                4.0.2
 synopsis:               Kafka bindings for Haskell
 description:            Apache Kafka bindings backed by the librdkafka C library.
                         .
diff --git a/src/Kafka/Producer.hs b/src/Kafka/Producer.hs
--- a/src/Kafka/Producer.hs
+++ b/src/Kafka/Producer.hs
@@ -117,7 +117,8 @@
   tc <- topicConf (TopicProps $ (ppTopicProps pps))
 
   -- add default delivery report callback
-  deliveryCallback (const mempty) kc
+  let Callback setDeliveryCallback = deliveryCallback (const mempty)
+  setDeliveryCallback kc
 
   -- set callbacks
   forM_ (ppCallbacks pps) (\(Callback setCb) -> setCb kc)
diff --git a/src/Kafka/Producer/Callbacks.hs b/src/Kafka/Producer/Callbacks.hs
--- a/src/Kafka/Producer/Callbacks.hs
+++ b/src/Kafka/Producer/Callbacks.hs
@@ -15,7 +15,7 @@
 import           Kafka.Callbacks        as X
 import           Kafka.Consumer.Types   (Offset(..))
 import           Kafka.Internal.RdKafka (RdKafkaMessageT(..), RdKafkaRespErrT(..), rdKafkaConfSetDrMsgCb)
-import           Kafka.Internal.Setup   (KafkaConf(..), getRdKafkaConf)
+import           Kafka.Internal.Setup   (KafkaConf(..), getRdKafkaConf, Callback(..))
 import           Kafka.Internal.Shared  (kafkaRespErr, readTopic, readKey, readPayload)
 import           Kafka.Producer.Types   (ProducerRecord(..), DeliveryReport(..), ProducePartition(..))
 import           Kafka.Types            (KafkaError(..), TopicName(..))
@@ -27,8 +27,8 @@
 --   callbacks. For callbacks to individual messsages see
 --   'Kafka.Producer.produceMessage\''./
 --
-deliveryCallback :: (DeliveryReport -> IO ()) -> KafkaConf -> IO ()
-deliveryCallback callback kc = rdKafkaConfSetDrMsgCb (getRdKafkaConf kc) realCb
+deliveryCallback :: (DeliveryReport -> IO ()) -> Callback
+deliveryCallback callback = Callback $ \kc -> rdKafkaConfSetDrMsgCb (getRdKafkaConf kc) realCb
   where
     realCb :: t -> Ptr RdKafkaMessageT -> IO ()
     realCb _ mptr =
