diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -14,41 +14,38 @@
 ## Benchmarks
 
 Following are the benchmark results comparing the performance
-of encoding typical documents using this library and "aeson".
-The numbers after the slash identify the amount of objects in
-the rendered JSON.
+of encoding typical documents using this library, "aeson" and "buffer-builder".
+Every approach is measured on Twitter API data of sizes ranging from roughly 1kB to 60MB.
 "lazy-aeson" stands for "aeson" producing a lazy bytestring,
 otherwise it's strict.
+"buffer-builder" is another library providing an alternative JSON encoder.
 
 ```
-jsonifier/1                              mean 2.043 μs  ( +- 24.33 ns  )
-jsonifier/10                             mean 12.60 μs  ( +- 139.3 ns  )
-jsonifier/100                            mean 120.8 μs  ( +- 3.271 μs  )
-jsonifier/1,000                          mean 1.275 ms  ( +- 13.45 μs  )
-jsonifier/10,000                         mean 20.71 ms  ( +- 864.1 μs  )
-jsonifier/100,000                        mean 195.2 ms  ( +- 15.26 ms  )
-aeson/1                                  mean 6.400 μs  ( +- 40.03 ns  )
-aeson/10                                 mean 31.40 μs  ( +- 760.1 ns  )
-aeson/100                                mean 262.1 μs  ( +- 4.486 μs  )
-aeson/1,000                              mean 3.413 ms  ( +- 83.81 μs  )
-aeson/10,000                             mean 30.38 ms  ( +- 439.9 μs  )
-aeson/100,000                            mean 275.8 ms  ( +- 5.646 ms  )
-lazy-aeson/1                             mean 6.403 μs  ( +- 58.98 ns  )
-lazy-aeson/10                            mean 30.30 μs  ( +- 447.1 ns  )
-lazy-aeson/100                           mean 257.7 μs  ( +- 4.806 μs  )
-lazy-aeson/1,000                         mean 2.485 ms  ( +- 24.07 μs  )
-lazy-aeson/10,000                        mean 24.89 ms  ( +- 447.1 μs  )
-lazy-aeson/100,000                       mean 245.4 ms  ( +- 1.571 ms  )
+jsonifier/1kB          mean 2.087 μs  ( +- 260.0 ns  )
+jsonifier/6kB          mean 12.33 μs  ( +- 222.2 ns  )
+jsonifier/60kB         mean 118.3 μs  ( +- 1.991 μs  )
+jsonifier/600kB        mean 1.270 ms  ( +- 38.92 μs  )
+jsonifier/6MB          mean 20.53 ms  ( +- 1.042 ms  )
+jsonifier/60MB         mean 194.9 ms  ( +- 15.04 ms  )
+aeson/1kB              mean 6.542 μs  ( +- 199.2 ns  )
+aeson/6kB              mean 31.25 μs  ( +- 494.5 ns  )
+aeson/60kB             mean 261.7 μs  ( +- 8.044 μs  )
+aeson/600kB            mean 3.395 ms  ( +- 114.6 μs  )
+aeson/6MB              mean 30.71 ms  ( +- 701.0 μs  )
+aeson/60MB             mean 277.1 ms  ( +- 4.776 ms  )
+lazy-aeson/1kB         mean 6.423 μs  ( +- 83.69 ns  )
+lazy-aeson/6kB         mean 30.74 μs  ( +- 607.0 ns  )
+lazy-aeson/60kB        mean 259.1 μs  ( +- 4.890 μs  )
+lazy-aeson/600kB       mean 2.511 ms  ( +- 18.71 μs  )
+lazy-aeson/6MB         mean 24.92 ms  ( +- 95.36 μs  )
+lazy-aeson/60MB        mean 248.6 ms  ( +- 736.6 μs  )
+buffer-builder/1kB     mean 5.512 μs  ( +- 77.39 ns  )
+buffer-builder/6kB     mean 30.29 μs  ( +- 459.9 ns  )
+buffer-builder/60kB    mean 307.0 μs  ( +- 3.640 μs  )
+buffer-builder/600kB   mean 3.001 ms  ( +- 75.72 μs  )
+buffer-builder/6MB     mean 33.05 ms  ( +- 336.3 μs  )
+buffer-builder/60MB    mean 308.5 ms  ( +- 3.489 ms  )
 ```
-
-Here is the listing of the data sizes of produced documents by the amounts of objects:
-
-- 1: 941B
-- 10: 6.4kB
-- 100: 60kB
-- 1,000: 604kB
-- 10,000: 6MB
-- 100,000: 60MB
 
 The benchmark suite is bundled with the package.
 
diff --git a/bench/Main.hs b/bench/Main.hs
--- a/bench/Main.hs
+++ b/bench/Main.hs
@@ -5,6 +5,7 @@
 import qualified Main.Model as Model
 import qualified Main.Jsonifier
 import qualified Main.Aeson
+import qualified Main.BufferBuilder as BufferBuilder
 import qualified Data.Aeson
 import qualified Data.ByteString.Lazy
 import qualified Data.ByteString.Char8 as Char8ByteString
@@ -24,6 +25,7 @@
 
     -- Ensure that encoders are correct
     test "jsonifier" encodeWithJsonifier twitter10Data
+    test "buffer-builder" BufferBuilder.encodeResult twitter10Data
     test "aeson" encodeWithAeson twitter10Data
 
     -- Print out the data sizes of samples
@@ -36,57 +38,38 @@
         "- " <> TextBuilder.text sampleName <> ": " <>
         sampleDataSize sampleData
       in 
-        "Sample data sizes report:\n" <>
-        sample "twitter-1" twitter1Data <> "\n" <>
-        sample "twitter-10" twitter10Data <> "\n" <>
-        sample "twitter-100" twitter100Data <> "\n" <>
-        sample "twitter-1,000" twitter1000Data <> "\n" <>
-        sample "twitter-10,000" twitter10000Data <> "\n" <>
-        sample "twitter-100,000" twitter100000Data
+        "Input data sizes report:\n" <>
+        sample "twitter with 1 objects" twitter1Data <> "\n" <>
+        sample "twitter with 10 objects" twitter10Data <> "\n" <>
+        sample "twitter with 100 objects" twitter100Data <> "\n" <>
+        sample "twitter with 1,000 objects" twitter1000Data <> "\n" <>
+        sample "twitter with 10,000 objects" twitter10000Data <> "\n" <>
+        sample "twitter with 100,000 objects" twitter100000Data
 
-    defaultMain [
-      bgroup "jsonifier" [
-        bench "1" (nf encodeWithJsonifier twitter1Data)
-        ,
-        bench "10" (nf encodeWithJsonifier twitter10Data)
-        ,
-        bench "100" (nf encodeWithJsonifier twitter100Data)
-        ,
-        bench "1,000" (nf encodeWithJsonifier twitter1000Data)
-        ,
-        bench "10,000" (nf encodeWithJsonifier twitter10000Data)
-        ,
-        bench "100,000" (nf encodeWithJsonifier twitter100000Data)
-        ]
-      ,
-      bgroup "aeson" [
-        bench "1" (nf encodeWithAeson twitter1Data)
-        ,
-        bench "10" (nf encodeWithAeson twitter10Data)
-        ,
-        bench "100" (nf encodeWithAeson twitter100Data)
-        ,
-        bench "1,000" (nf encodeWithAeson twitter1000Data)
-        ,
-        bench "10,000" (nf encodeWithAeson twitter10000Data)
-        ,
-        bench "100,000" (nf encodeWithAeson twitter100000Data)
-        ]
-      ,
-      bgroup "lazy-aeson" [
-        bench "1" (nf encodeWithLazyAeson twitter1Data)
-        ,
-        bench "10" (nf encodeWithLazyAeson twitter10Data)
-        ,
-        bench "100" (nf encodeWithLazyAeson twitter100Data)
-        ,
-        bench "1,000" (nf encodeWithLazyAeson twitter1000Data)
-        ,
-        bench "10,000" (nf encodeWithLazyAeson twitter10000Data)
-        ,
-        bench "100,000" (nf encodeWithLazyAeson twitter100000Data)
-        ]
-      ]
+    let
+      benchLib :: NFData a => String -> (Model.Result -> a) -> Benchmark
+      benchLib name encode =
+        bgroup name [
+          bench "1kB" (nf encode twitter1Data)
+          ,
+          bench "6kB" (nf encode twitter10Data)
+          ,
+          bench "60kB" (nf encode twitter100Data)
+          ,
+          bench "600kB" (nf encode twitter1000Data)
+          ,
+          bench "6MB" (nf encode twitter10000Data)
+          ,
+          bench "60MB" (nf encode twitter100000Data)
+          ]
+      in
+        defaultMain [
+          benchLib "jsonifier" encodeWithJsonifier,
+          benchLib "aeson" encodeWithAeson,
+          benchLib "lazy-aeson" encodeWithLazyAeson,
+          benchLib "buffer-builder" BufferBuilder.encodeResult
+          ]
+
 
 load :: FilePath -> IO Model.Result
 load fileName =
diff --git a/bench/Main/BufferBuilder.hs b/bench/Main/BufferBuilder.hs
new file mode 100644
--- /dev/null
+++ b/bench/Main/BufferBuilder.hs
@@ -0,0 +1,58 @@
+module Main.BufferBuilder where
+
+import Prelude
+import Data.BufferBuilder.Json
+import qualified Main.Model as M
+
+
+encodeResult :: M.Result -> ByteString
+encodeResult =
+  encodeJson
+
+instance ToJson M.Geo where
+  toJson M.Geo{..} =
+    toJson $
+      "type_"# .=# toJson type_ <>
+      "coordinates"# .=# toJson coordinates
+
+instance ToJson (Double, Double) where
+  toJson (a, b) =
+    toJson [toJson a, toJson b]
+
+instance ToJson M.Story where
+  toJson M.Story{..} =
+    toJson $
+      "from_user_id_str"# .=# toJson from_user_id_str <>
+      "profile_image_url"# .=# toJson profile_image_url <>
+      "created_at"# .=# toJson created_at <>
+      "from_user"# .=# toJson from_user <>
+      "id_str"# .=# toJson id_str <>
+      "metadata"# .=# toJson metadata <>
+      "to_user_id"# .=# toJson to_user_id <>
+      "text"# .=# toJson text <>
+      "id"# .=# toJson id <>
+      "from_user_id"# .=# toJson from_user_id <>
+      "geo"# .=# toJson geo <>
+      "iso_language_code"# .=# toJson iso_language_code <>
+      "to_user_id_str"# .=# toJson to_user_id_str <>
+      "source"# .=# toJson source
+
+instance ToJson M.Metadata where
+  toJson M.Metadata{..} =
+    toJson $
+      "result_type"# .=# toJson result_type
+
+instance ToJson M.Result where
+  toJson M.Result{..} =
+    toJson $
+      "results"# .=# toJson results <>
+      "max_id"# .=# toJson max_id <>
+      "since_id"# .=# toJson since_id <>
+      "refresh_url"# .=# toJson refresh_url <>
+      "next_page"# .=# toJson next_page <>
+      "results_per_page"# .=# toJson results_per_page <>
+      "page"# .=# toJson page <>
+      "completed_in"# .=# toJson completed_in <>
+      "since_id_str"# .=# toJson since_id_str <>
+      "max_id_str"# .=# toJson max_id_str <>
+      "query"# .=# toJson query
diff --git a/jsonifier.cabal b/jsonifier.cabal
--- a/jsonifier.cabal
+++ b/jsonifier.cabal
@@ -1,5 +1,5 @@
 name: jsonifier
-version: 0.1.0.2
+version: 0.1.0.3
 synopsis: Fast and simple JSON encoding toolkit
 description:
   Minimalistic library for encoding JSON directly to strict bytestring.
@@ -82,6 +82,7 @@
   main-is: Main.hs
   other-modules:
     Main.Aeson
+    Main.BufferBuilder
     Main.Jsonifier
     Main.Model
   ghc-options: -O2 -threaded "-with-rtsopts=-N"
@@ -89,6 +90,7 @@
   default-language: Haskell2010
   build-depends:
     aeson >=1.5.4.1 && <1.6,
+    buffer-builder >=0.2.4.7 && <0.3,
     gauge >=0.2.5 && <0.3,
     jsonifier,
     rerebase >=1.10.0.1 && <2,
