diff --git a/hw-kafka-client.cabal b/hw-kafka-client.cabal
--- a/hw-kafka-client.cabal
+++ b/hw-kafka-client.cabal
@@ -1,5 +1,5 @@
 name:                hw-kafka-client
-version:             2.0.1
+version:             2.0.2
 homepage:            https://github.com/haskell-works/hw-kafka-client
 bug-reports:         https://github.com/haskell-works/hw-kafka-client/issues
 license:             MIT
@@ -61,6 +61,9 @@
                      , temporary
                      , transformers
                      , unix
+  if impl(ghc < 8.0)
+    build-depends: semigroups
+
   exposed-modules:
     Kafka.Types
     Kafka.Consumer.ConsumerProperties
diff --git a/src/Kafka/Consumer/ConsumerProperties.hs b/src/Kafka/Consumer/ConsumerProperties.hs
--- a/src/Kafka/Consumer/ConsumerProperties.hs
+++ b/src/Kafka/Consumer/ConsumerProperties.hs
@@ -9,7 +9,7 @@
 import qualified Data.List                as L
 import           Data.Map                 (Map)
 import qualified Data.Map                 as M
-import           Data.Monoid              ((<>))
+import           Data.Semigroup
 import           Kafka.Consumer.Callbacks
 import           Kafka.Consumer.Types
 import           Kafka.Types
@@ -21,11 +21,15 @@
   , callbacks  :: [KafkaConf -> IO ()]
   }
 
+-- | /Right biased/ so we prefer newer properties over older ones.
+instance Semigroup ConsumerProperties where
+  (<>) (ConsumerProperties m1 ll1 cb1) (ConsumerProperties m2 ll2 cb2) =
+    ConsumerProperties (M.union m2 m1) (ll2 `mplus` ll1) (cb2 <> cb1)
+    
 instance Monoid ConsumerProperties where
   mempty = ConsumerProperties M.empty Nothing []
-  mappend (ConsumerProperties m1 ll1 cb1) (ConsumerProperties m2 ll2 cb2) =
-    ConsumerProperties (M.union m1 m2) (ll2 `mplus` ll1) (cb2 <> cb1)
-
+  mappend = (<>)
+  
 brokersList :: [BrokerAddress] -> ConsumerProperties
 brokersList bs =
   let bs' = L.intercalate "," ((\(BrokerAddress x) -> x) <$> bs)
diff --git a/src/Kafka/Producer/ProducerProperties.hs b/src/Kafka/Producer/ProducerProperties.hs
--- a/src/Kafka/Producer/ProducerProperties.hs
+++ b/src/Kafka/Producer/ProducerProperties.hs
@@ -8,6 +8,7 @@
 import qualified Data.List       as L
 import           Data.Map        (Map)
 import qualified Data.Map        as M
+import           Data.Semigroup
 import           Kafka.Callbacks
 import           Kafka.Types
 
@@ -18,11 +19,15 @@
   , ppLogLevel   :: Maybe KafkaLogLevel
   , callbacks    :: [KafkaConf -> IO ()]
   }
-
+  
+-- | /Right biased/ so we prefer newer properties over older ones.
+instance Semigroup ProducerProperties where
+  (<>) (ProducerProperties k1 t1 ll1 cb1) (ProducerProperties k2 t2 ll2 cb2) =
+    ProducerProperties (M.union k2 k1) (M.union t2 t1) (ll2 `mplus` ll1) (cb2 `mplus` cb1)
+    
 instance Monoid ProducerProperties where
   mempty = ProducerProperties M.empty M.empty Nothing []
-  mappend (ProducerProperties k1 t1 ll1 cb1) (ProducerProperties k2 t2 ll2 cb2) =
-    ProducerProperties (M.union k1 k2) (M.union t1 t2) (ll2 `mplus` ll1) (cb2 `mplus` cb1)
+  mappend = (<>)
 
 brokersList :: [BrokerAddress] -> ProducerProperties
 brokersList bs =
