diff --git a/hedgehog-test/Main.hs b/hedgehog-test/Main.hs
--- a/hedgehog-test/Main.hs
+++ b/hedgehog-test/Main.hs
@@ -31,8 +31,8 @@
           ,
           p "tableRef" 10000 Gen.tableRef Parsing.tableRef Rendering.tableRef
           ,
-          p "aExpr" 100000 Gen.aExpr Parsing.aExpr Rendering.aExpr
+          p "aExpr" 60000 Gen.aExpr Parsing.aExpr Rendering.aExpr
           ,
-          p "preparableStmt" 35000 Gen.preparableStmt Parsing.preparableStmt Rendering.preparableStmt
+          p "preparableStmt" 30000 Gen.preparableStmt Parsing.preparableStmt Rendering.preparableStmt
         ]
   ]
diff --git a/hedgehog-test/Main/Gen.hs b/hedgehog-test/Main/Gen.hs
--- a/hedgehog-test/Main/Gen.hs
+++ b/hedgehog-test/Main/Gen.hs
@@ -802,7 +802,9 @@
 
 iconstOrFconst = choice [Left <$> iconst <|> Right <$> fconst]
 
-fconst = realFrac_ (Range.exponentialFloat 0 309457394857984375983475943)
+fconst =
+  filter (\ a -> fromIntegral (round a) /= a) $
+  realFrac_ (Range.exponentialFloat 0 309457394857984375983475943)
 
 iconst = integral (Range.exponential 0 maxBound)
 
diff --git a/library/PostgresqlSyntax/Extras/TextBuilder.hs b/library/PostgresqlSyntax/Extras/TextBuilder.hs
new file mode 100644
--- /dev/null
+++ b/library/PostgresqlSyntax/Extras/TextBuilder.hs
@@ -0,0 +1,17 @@
+module PostgresqlSyntax.Extras.TextBuilder where
+
+import PostgresqlSyntax.Prelude
+import Text.Builder
+
+
+char7 :: Char -> Builder
+char7 = char
+
+intDec :: Int -> Builder
+intDec = decimal
+
+int64Dec :: Int64 -> Builder
+int64Dec = decimal
+
+doubleDec :: Double -> Builder
+doubleDec = fromString . show
diff --git a/library/PostgresqlSyntax/Rendering.hs b/library/PostgresqlSyntax/Rendering.hs
--- a/library/PostgresqlSyntax/Rendering.hs
+++ b/library/PostgresqlSyntax/Rendering.hs
@@ -2,30 +2,26 @@
 
 import PostgresqlSyntax.Prelude hiding (aExpr, try, option, many, sortBy, bit, fromList)
 import PostgresqlSyntax.Ast
-import Data.ByteString.FastBuilder
+import Text.Builder hiding (char7, intDec, int64Dec, doubleDec)
+import PostgresqlSyntax.Extras.TextBuilder
 import qualified PostgresqlSyntax.Extras.NonEmpty as NonEmpty
 import qualified Data.List.NonEmpty as NonEmpty
 import qualified Data.Text as Text
 import qualified Data.Text.Encoding as Text
-import qualified Data.ByteString.Builder as BsBuilder
-import qualified Data.ByteString.Lazy as LazyBs
 
 
 -- * Execution
 -------------------------
 
 toByteString :: Builder -> ByteString
-toByteString = toStrictByteString
+toByteString = Text.encodeUtf8 . toText
 
 toText :: Builder -> Text
-toText = Text.decodeUtf8 . toByteString
+toText = run
 
 
 -- * Helpers
 -------------------------
-
-text :: Text -> Builder
-text = stringUtf8 . Text.unpack
 
 commaNonEmpty :: (a -> Builder) -> NonEmpty a -> Builder
 commaNonEmpty = NonEmpty.intersperseFoldMap ", "
diff --git a/postgresql-syntax.cabal b/postgresql-syntax.cabal
--- a/postgresql-syntax.cabal
+++ b/postgresql-syntax.cabal
@@ -1,5 +1,5 @@
 name: postgresql-syntax
-version: 0.3.0.3
+version: 0.4
 category: Database, PostgreSQL, Parsing
 synopsis: PostgreSQL AST parsing and rendering
 description:
@@ -32,19 +32,19 @@
     PostgresqlSyntax.Validation
   other-modules:
     PostgresqlSyntax.CharSet
+    PostgresqlSyntax.Extras.TextBuilder
     PostgresqlSyntax.Extras.HeadedMegaparsec
     PostgresqlSyntax.Extras.NonEmpty
     PostgresqlSyntax.Predicate
     PostgresqlSyntax.Prelude
   build-depends:
-    base >=4.11 && <5,
-    bytestring >=0.10 && <0.11,
+    base >=4.12 && <5,
+    bytestring >=0.10 && <0.12,
     case-insensitive >=1.2 && <2,
-    fast-builder >=0.1.2 && <0.2,
     hashable >=1.2 && <2,
-    headed-megaparsec >=0.2 && <0.3,
+    headed-megaparsec >=0.2.0.1 && <0.3,
     megaparsec >=9 && <10,
-    parser-combinators >=1.1 && <1.3,
+    parser-combinators >=1.1 && <1.4,
     text >=1 && <2,
     text-builder >=0.6.6.1 && <0.7,
     unordered-containers >=0.2.10 && <0.3
