diff --git a/bytestring-strict-builder.cabal b/bytestring-strict-builder.cabal
--- a/bytestring-strict-builder.cabal
+++ b/bytestring-strict-builder.cabal
@@ -1,11 +1,7 @@
-name:
-  bytestring-strict-builder
-version:
-  0.4.5.3
-category:
-  Text, ByteString, Builders, Serialization
-synopsis:
-  An efficient strict bytestring builder
+name: bytestring-strict-builder
+version: 0.4.5.4
+category: Text, ByteString, Builders, Serialization
+synopsis: An efficient strict bytestring builder
 description:
   According to 
   <https://github.com/nikita-volkov/bytestring-builders-benchmark the competition benchmarks>, 
@@ -15,38 +11,24 @@
   The encoders from the \"postgresql-binary\" library have shown
   a stable performance improvement by factors of up to 10 after the migration
   from the standard builder to \"bytestring-strict-builder\".
-homepage:
-  https://github.com/nikita-volkov/bytestring-strict-builder 
-bug-reports:
-  https://github.com/nikita-volkov/bytestring-strict-builder/issues 
-author:
-  Nikita Volkov <nikita.y.volkov@mail.ru>
-maintainer:
-  Nikita Volkov <nikita.y.volkov@mail.ru>
-copyright:
-  (c) 2017, Nikita Volkov
-license:
-  MIT
-license-file:
-  LICENSE
-build-type:
-  Simple
-cabal-version:
-  >=1.10
+homepage: https://github.com/nikita-volkov/bytestring-strict-builder
+bug-reports: https://github.com/nikita-volkov/bytestring-strict-builder/issues
+author: Nikita Volkov <nikita.y.volkov@mail.ru>
+maintainer: Nikita Volkov <nikita.y.volkov@mail.ru>
+copyright: (c) 2017, Nikita Volkov
+license: MIT
+license-file: LICENSE
+build-type: Simple
+cabal-version: >=1.10
 
 source-repository head
-  type:
-    git
-  location:
-    git://github.com/nikita-volkov/bytestring-strict-builder.git
+  type: git
+  location: git://github.com/nikita-volkov/bytestring-strict-builder.git
 
 library
-  hs-source-dirs:
-    library
-  default-extensions:
-    Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFoldable, DeriveFunctor, DeriveGeneric, DeriveTraversable, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators, UnboxedTuples
-  default-language:
-    Haskell2010
+  hs-source-dirs: library
+  default-extensions: Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFoldable, DeriveFunctor, DeriveGeneric, DeriveTraversable, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators, UnboxedTuples
+  default-language: Haskell2010
   exposed-modules:
     ByteString.StrictBuilder
   other-modules:
@@ -55,50 +37,32 @@
     ByteString.StrictBuilder.Population.UncheckedShifting
     ByteString.StrictBuilder.UTF8
   build-depends:
-    semigroups >= 0.18 && < 0.20,
-    bytestring >= 0.10.2 && < 0.11,
-    base-prelude >= 1.2 && < 2,
-    base >= 4.6 && < 5
+    base >=4.11 && <5,
+    bytestring >=0.10.2 && <0.12
 
 test-suite tests
-  type:
-    exitcode-stdio-1.0
-  hs-source-dirs:
-    tests
-  main-is:
-    Main.hs
-  default-extensions:
-    Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFoldable, DeriveFunctor, DeriveGeneric, DeriveTraversable, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators, UnboxedTuples
-  default-language:
-    Haskell2010
+  type: exitcode-stdio-1.0
+  hs-source-dirs: tests
+  main-is: Main.hs
+  default-extensions: Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFoldable, DeriveFunctor, DeriveGeneric, DeriveTraversable, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators, UnboxedTuples
+  default-language: Haskell2010
   build-depends:
     bytestring-strict-builder,
-    -- testing:
-    tasty >= 0.12 && < 2,
-    tasty-quickcheck >= 0.9 && < 0.11,
-    tasty-hunit >= 0.9 && < 0.11,
-    quickcheck-instances >= 0.3.11 && < 0.4,
-    QuickCheck >= 2.8.1 && < 3,
-    -- general:
-    rerebase == 1.*
+    QuickCheck >=2.8.1 && <3,
+    quickcheck-instances >=0.3.11 && <0.4,
+    rerebase >=1.10 && <2,
+    tasty >=1.4 && <2,
+    tasty-hunit >=0.10 && <0.11,
+    tasty-quickcheck >=0.10 && <0.11
 
 benchmark benchmarks
-  type:
-    exitcode-stdio-1.0
-  hs-source-dirs:
-    benchmarks
-  main-is:
-    Main.hs
-  ghc-options:
-    -O2
-    -threaded
-    "-with-rtsopts=-N"
-    -funbox-strict-fields
-  default-extensions:
-    Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFoldable, DeriveFunctor, DeriveTraversable, DeriveGeneric, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators, UnboxedTuples
-  default-language:
-    Haskell2010
+  type: exitcode-stdio-1.0
+  hs-source-dirs: benchmarks
+  main-is: Main.hs
+  ghc-options: -O2 -threaded "-with-rtsopts=-N" -funbox-strict-fields
+  default-extensions: Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFoldable, DeriveFunctor, DeriveTraversable, DeriveGeneric, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators, UnboxedTuples
+  default-language: Haskell2010
   build-depends:
     bytestring-strict-builder,
-    criterion >= 1.1 && < 1.6,
-    rerebase == 1.*
+    criterion >=1.5.9 && <1.6,
+    rerebase >=1.10 && <2
diff --git a/library/ByteString/StrictBuilder.hs b/library/ByteString/StrictBuilder.hs
--- a/library/ByteString/StrictBuilder.hs
+++ b/library/ByteString/StrictBuilder.hs
@@ -34,13 +34,22 @@
 data Builder =
   Builder !Int !A.Population
 
+instance Semigroup Builder where
+  (<>) (Builder leftSize leftPopulation) (Builder rightSize rightPopulation) =
+    Builder (leftSize + rightSize) (leftPopulation <> rightPopulation)
+  {-# INLINE sconcat #-}
+  sconcat builders =
+    Builder size population
+    where
+      size =
+        foldl' (\acc (Builder x _) -> acc + x) 0 builders
+      population =
+        foldMap (\(Builder _ x) -> x) builders
+
 instance Monoid Builder where
   {-# INLINE mempty #-}
   mempty =
     Builder 0 mempty
-  {-# INLINE mappend #-}
-  mappend (Builder leftSize leftPopulation) (Builder rightSize rightPopulation) =
-    Builder (leftSize + rightSize) (leftPopulation <> rightPopulation)
   {-# INLINE mconcat #-}
   mconcat builders =
     Builder size population
@@ -49,9 +58,6 @@
         foldl' (\acc (Builder x _) -> acc + x) 0 builders
       population =
         foldMap (\(Builder _ x) -> x) builders
-
-instance Semigroup Builder where
-  (<>) = mappend
 
 instance IsString Builder where
   fromString =
diff --git a/library/ByteString/StrictBuilder/Population.hs b/library/ByteString/StrictBuilder/Population.hs
--- a/library/ByteString/StrictBuilder/Population.hs
+++ b/library/ByteString/StrictBuilder/Population.hs
@@ -12,16 +12,14 @@
 newtype Population =
   Population { populationPtrUpdate :: Ptr Word8 -> IO (Ptr Word8) }
 
+instance Semigroup Population where
+  (<>) (Population leftPtrUpdate) (Population rightPtrUpdate) =
+    Population (leftPtrUpdate >=> rightPtrUpdate)
+
 instance Monoid Population where
   {-# INLINE mempty #-}
   mempty =
     Population return
-  {-# INLINE mappend #-}
-  mappend (Population leftPtrUpdate) (Population rightPtrUpdate) =
-    Population (leftPtrUpdate >=> rightPtrUpdate)
-
-instance Semigroup Population where
-  (<>) = mappend
 
 
 {-|
diff --git a/library/ByteString/StrictBuilder/Prelude.hs b/library/ByteString/StrictBuilder/Prelude.hs
--- a/library/ByteString/StrictBuilder/Prelude.hs
+++ b/library/ByteString/StrictBuilder/Prelude.hs
@@ -4,6 +4,76 @@
 )
 where
 
-import BasePrelude as Exports
+-- base
+-------------------------
+import Control.Applicative as Exports hiding (WrappedArrow(..))
+import Control.Arrow as Exports hiding (first, second)
+import Control.Category as Exports
+import Control.Concurrent as Exports
+import Control.Exception as Exports
+import Control.Monad as Exports hiding (fail, mapM_, sequence_, forM_, msum, mapM, sequence, forM)
+import Control.Monad.IO.Class as Exports
+import Control.Monad.Fail as Exports
+import Control.Monad.Fix as Exports hiding (fix)
+import Control.Monad.ST as Exports
+import Data.Bifunctor as Exports
+import Data.Bits as Exports
+import Data.Bool as Exports
+import Data.Char as Exports
+import Data.Coerce as Exports
+import Data.Complex as Exports
+import Data.Data as Exports
+import Data.Dynamic as Exports
+import Data.Either as Exports
+import Data.Fixed as Exports
+import Data.Foldable as Exports hiding (toList)
+import Data.Function as Exports hiding (id, (.))
+import Data.Functor as Exports
+import Data.Functor.Compose as Exports
+import Data.Int as Exports
+import Data.IORef as Exports
+import Data.Ix as Exports
+import Data.List as Exports hiding (sortOn, isSubsequenceOf, uncons, concat, foldr, foldl1, maximum, minimum, product, sum, all, and, any, concatMap, elem, foldl, foldr1, notElem, or, find, maximumBy, minimumBy, mapAccumL, mapAccumR, foldl')
+import Data.List.NonEmpty as Exports (NonEmpty(..))
+import Data.Maybe as Exports
+import Data.Monoid as Exports hiding (Alt, (<>))
+import Data.Ord as Exports
+import Data.Proxy as Exports
+import Data.Ratio as Exports
+import Data.Semigroup as Exports hiding (First(..), Last(..))
+import Data.STRef as Exports
+import Data.String as Exports
+import Data.Traversable as Exports
+import Data.Tuple as Exports
+import Data.Unique as Exports
+import Data.Version as Exports
+import Data.Void as Exports
+import Data.Word as Exports
+import Debug.Trace as Exports
+import Foreign.ForeignPtr as Exports
+import Foreign.Ptr as Exports
+import Foreign.StablePtr as Exports
+import Foreign.Storable as Exports
+import GHC.Conc as Exports hiding (orElse, withMVar, threadWaitWriteSTM, threadWaitWrite, threadWaitReadSTM, threadWaitRead)
+import GHC.Exts as Exports (IsList(..), lazy, inline, sortWith, groupWith)
+import GHC.Generics as Exports (Generic)
+import GHC.IO.Exception as Exports
+import GHC.OverloadedLabels as Exports
+import Numeric as Exports
+import Prelude as Exports hiding (Read, fail, concat, foldr, mapM_, sequence_, foldl1, maximum, minimum, product, sum, all, and, any, concatMap, elem, foldl, foldr1, notElem, or, mapM, sequence, id, (.))
+import System.Environment as Exports
+import System.Exit as Exports
+import System.IO as Exports (Handle, hClose)
+import System.IO.Error as Exports
+import System.IO.Unsafe as Exports
+import System.Mem as Exports
+import System.Mem.StableName as Exports
+import System.Timeout as Exports
+import Text.ParserCombinators.ReadP as Exports (ReadP, readP_to_S, readS_to_P)
+import Text.ParserCombinators.ReadPrec as Exports (ReadPrec, readPrec_to_P, readP_to_Prec, readPrec_to_S, readS_to_Prec)
+import Text.Printf as Exports (printf, hPrintf)
+import Unsafe.Coerce as Exports
+
+-- bytestring
+-------------------------
 import Data.ByteString as Exports (ByteString)
-import Data.Semigroup as Exports hiding ((<>), Last(..), First(..))
diff --git a/library/ByteString/StrictBuilder/UTF8.hs b/library/ByteString/StrictBuilder/UTF8.hs
--- a/library/ByteString/StrictBuilder/UTF8.hs
+++ b/library/ByteString/StrictBuilder/UTF8.hs
@@ -19,8 +19,8 @@
 
 {-# INLINE char #-}
 char :: Char -> UTF8Char
-char =
-  unicodeCodePoint . ord
+char x =
+  unicodeCodePoint (ord x)
 
 {-# INLINE unicodeCodePoint #-}
 unicodeCodePoint :: Int -> UTF8Char
