diff --git a/bench/JsonBench.hs b/bench/JsonBench.hs
--- a/bench/JsonBench.hs
+++ b/bench/JsonBench.hs
@@ -129,23 +129,38 @@
         Green -> "green" :: Text
         Blue -> "blue"
         Brown -> "brown"
+    toEncoding ec = Aeson.toEncoding $ case ec of
+        Green -> "green" :: Text
+        Blue -> "blue"
+        Brown -> "brown"
 
 instance Aeson.ToJSON Gender where
     toJSON g = Aeson.toJSON $ case g of
         Male -> "male" :: Text
         Female -> "female"
+    toEncoding g = Aeson.toEncoding $ case g of
+        Male -> "male" :: Text
+        Female -> "female"
 
 instance Aeson.ToJSON Fruit where
     toJSON f = Aeson.toJSON $ case f of
         Apple -> "apple" :: Text
         Banana -> "banana"
         Strawberry -> "strawberry"
+    toEncoding f = Aeson.toEncoding $ case f of
+        Apple -> "apple" :: Text
+        Banana -> "banana"
+        Strawberry -> "strawberry"
 
 instance Aeson.ToJSON Friend where
     toJSON Friend {..} = Aeson.object
         [ "id" Aeson..= fId
         , "name" Aeson..= fName
         ]
+    toEncoding Friend {..} = Aeson.pairs
+        ( "id" Aeson..= fId
+        <> "name" Aeson..= fName
+        )
 
 instance Aeson.ToJSON User where
     toJSON User{..} = Aeson.object
@@ -172,7 +187,30 @@
         , "greeting" Aeson..= uGreeting
         , "favoriteFruit" Aeson..= uFavouriteFruit
         ]
-
+    toEncoding User{..} = Aeson.pairs
+        ( "_id" Aeson..= uId
+        <> "index" Aeson..= uIndex
+        <> "guid" Aeson..= uGuid
+        <> "isActive" Aeson..= uIsActive
+        <> "balance" Aeson..= uBalance
+        <> "picture" Aeson..= uPicture
+        <> "age" Aeson..= uAge
+        <> "eyeColor" Aeson..= uEyeColor
+        <> "name" Aeson..= uName
+        <> "gender" Aeson..= uGender
+        <> "company" Aeson..= uCompany
+        <> "email" Aeson..= uEmail
+        <> "phone" Aeson..= uPhone
+        <> "address" Aeson..= uAddress
+        <> "about" Aeson..= uAbout
+        <> "registered" Aeson..= uRegistered
+        <> "latitude" Aeson..= uLatitude
+        <> "longitude" Aeson..= uLongitude
+        <> "tags" Aeson..= uTags
+        <> "friends" Aeson..= uFriends
+        <> "greeting" Aeson..= uGreeting
+        <> "favoriteFruit" Aeson..= uFavouriteFruit
+        )
 --- BufferBuilder instances ---
 
 instance Json.ToJson EyeColor where
@@ -329,6 +367,7 @@
                 , bgroup "render"
                     [ bench "bufferbuilder" $ nf Json.encodeJson parsedUserList
                     , bench "aeson" $ nf Aeson.encode parsedUserList
+                    , bench "aeson-value" $ nf (Aeson.encode . Aeson.toJSON) parsedUserList
                     , bench "json-builder" $ nf JB.toJsonLBS parsedUserList
                     ]
                 , bgroup "addr vs text keys"
diff --git a/buffer-builder.cabal b/buffer-builder.cabal
--- a/buffer-builder.cabal
+++ b/buffer-builder.cabal
@@ -1,5 +1,5 @@
 name:                buffer-builder
-version:             0.2.4.4
+version:             0.2.4.5
 synopsis:            Library for efficiently building up buffers, one piece at a time
 description:
 
diff --git a/changelog.md b/changelog.md
--- a/changelog.md
+++ b/changelog.md
@@ -1,3 +1,7 @@
+0.2.4.5
+
+* Add Semigroup instance for ObjectBuilder
+
 0.2.4.4
 
 * Add 'stdc++' as an explicit library dependency.  (Thanks Rob Dockins!)
diff --git a/src/Data/BufferBuilder/Json.hs b/src/Data/BufferBuilder/Json.hs
--- a/src/Data/BufferBuilder/Json.hs
+++ b/src/Data/BufferBuilder/Json.hs
@@ -55,7 +55,8 @@
 import Data.BufferBuilder.Utf8 (Utf8Builder)
 import qualified Data.BufferBuilder.Utf8 as UB
 import Data.ByteString (ByteString)
-import Data.Monoid
+import Data.Monoid hiding ((<>))
+import Data.Semigroup
 import Data.Text (Text)
 import Data.Foldable (Foldable, foldMap)
 import qualified Data.Vector as Vector
@@ -142,17 +143,21 @@
 -- resulting JSON document will be illegal.
 data ObjectBuilder = NoPair | Pair !(Utf8Builder ())
 
+instance Semigroup ObjectBuilder where
+    {-# INLINE (<>) #-}
+    NoPair <> a = a
+    a <> NoPair = a
+    (Pair a) <> (Pair b) = Pair $ do
+        a
+        UB.appendChar7 ','
+        b
+
 instance Monoid ObjectBuilder where
     {-# INLINE mempty #-}
     mempty = NoPair
 
     {-# INLINE mappend #-}
-    mappend NoPair a = a
-    mappend a NoPair = a
-    mappend (Pair a) (Pair b) = Pair $ do 
-        a
-        UB.appendChar7 ','
-        b
+    mappend = (<>)
 
 instance ToJson ObjectBuilder where
     {-# INLINE toJson #-}
