diff --git a/demo/Main.hs b/demo/Main.hs
--- a/demo/Main.hs
+++ b/demo/Main.hs
@@ -34,7 +34,7 @@
   A.object rows
   where
     rows =
-      A.row "name" (A.string name) <>
+      A.row "name" (A.stringFromText name) <>
       A.row "genres" (A.array genresElements)
       where
         genresElements =
@@ -45,7 +45,7 @@
   A.object rows
   where
     rows =
-      A.row "name" (A.string name)
+      A.row "name" (A.stringFromText name)
 
 metallica :: A.Literal
 metallica =
diff --git a/json-bytes-builder.cabal b/json-bytes-builder.cabal
--- a/json-bytes-builder.cabal
+++ b/json-bytes-builder.cabal
@@ -1,7 +1,7 @@
 name:
   json-bytes-builder
 version:
-  0.4
+  0.5
 synopsis:
   Direct-to-bytes JSON Builder
 description:
diff --git a/library/JSONBytesBuilder/Builder.hs b/library/JSONBytesBuilder/Builder.hs
--- a/library/JSONBytesBuilder/Builder.hs
+++ b/library/JSONBytesBuilder/Builder.hs
@@ -6,11 +6,14 @@
   Literal,
   null,
   boolean,
-  number_int,
-  number_integer,
-  number_double,
-  number_scientific,
-  string,
+  numberFromInt,
+  numberFromInteger,
+  numberFromDouble,
+  numberFromScientific,
+  stringFromText,
+  stringFromLazyText,
+  stringFromBytes,
+  stringFromLazyBytes,
   object,
   array,
   -- ** Rows builders
diff --git a/library/JSONBytesBuilder/Private/Builder.hs b/library/JSONBytesBuilder/Private/Builder.hs
--- a/library/JSONBytesBuilder/Private/Builder.hs
+++ b/library/JSONBytesBuilder/Private/Builder.hs
@@ -3,6 +3,8 @@
 
 import JSONBytesBuilder.Private.Prelude hiding (null)
 import qualified Data.ByteString.Builder as A
+import qualified Data.Text.Lazy as C
+import qualified Data.ByteString.Lazy as D
 import qualified JSONBytesBuilder.Private.ByteString.Builder as E
 
 
@@ -69,38 +71,55 @@
 
 -- |
 -- JSON Number literal from 'Int'.
-{-# INLINE number_int #-}
-number_int :: Int -> Literal
-number_int =
+{-# INLINE numberFromInt #-}
+numberFromInt :: Int -> Literal
+numberFromInt =
   Literal . inline A.intDec
 
 -- |
 -- JSON Number literal from 'Integer'.
-{-# INLINE number_integer #-}
-number_integer :: Integer -> Literal
-number_integer =
+{-# INLINE numberFromInteger #-}
+numberFromInteger :: Integer -> Literal
+numberFromInteger =
   Literal . inline A.integerDec
 
 -- |
 -- JSON Number literal from 'Double'.
-{-# INLINE number_double #-}
-number_double :: Double -> Literal
-number_double =
+{-# INLINE numberFromDouble #-}
+numberFromDouble :: Double -> Literal
+numberFromDouble =
   Literal . inline A.doubleDec
 
 -- |
 -- JSON Number literal from 'Scientific'.
-{-# INLINE number_scientific #-}
-number_scientific :: Scientific -> Literal
-number_scientific =
+{-# INLINE numberFromScientific #-}
+numberFromScientific :: Scientific -> Literal
+numberFromScientific =
   Literal . inline E.scientific
 
 -- |
--- JSON String literal from 'Text'.
-{-# INLINE string #-}
-string :: Text -> Literal
-string =
-  Literal . inline E.string
+-- JSON String literal from 'Text' encoded using UTF8.
+{-# INLINE stringFromText #-}
+stringFromText :: Text -> Literal
+stringFromText =
+  Literal . inline E.stringFromText
+
+-- |
+-- JSON String literal from lazy Text encoded using UTF8.
+{-# INLINE stringFromLazyText #-}
+stringFromLazyText :: C.Text -> Literal
+stringFromLazyText =
+  Literal . inline E.stringFromLazyText
+
+{-# INLINE stringFromBytes #-}
+stringFromBytes :: ByteString -> Literal
+stringFromBytes =
+  Literal . inline E.stringFromBytes
+
+{-# INLINE stringFromLazyBytes #-}
+stringFromLazyBytes :: D.ByteString -> Literal
+stringFromLazyBytes =
+  Literal . inline E.stringFromLazyBytes
 
 -- |
 -- JSON Object literal from the 'Rows' builder.
diff --git a/library/JSONBytesBuilder/Private/ByteString/Builder.hs b/library/JSONBytesBuilder/Private/ByteString/Builder.hs
--- a/library/JSONBytesBuilder/Private/ByteString/Builder.hs
+++ b/library/JSONBytesBuilder/Private/ByteString/Builder.hs
@@ -5,9 +5,13 @@
 import Data.ByteString.Builder
 import qualified JSONBytesBuilder.Private.ByteString.BoundedPrim as A
 import qualified Data.ByteString.Builder.Prim as A
+import qualified Data.ByteString.Builder.Scientific as D
+import qualified Data.ByteString as E
+import qualified Data.ByteString.Lazy as F
 import qualified Data.Text.Encoding as B
+import qualified Data.Text.Lazy as G
+import qualified Data.Text.Lazy.Encoding as H
 import qualified Data.Scientific as C
-import qualified Data.ByteString.Builder.Scientific as D
 
 
 {-# INLINABLE null #-}
@@ -20,11 +24,26 @@
 boolean =
   A.primBounded A.boolean
 
-{-# INLINABLE string #-}
-string :: Text -> Builder
-string x =
+{-# INLINABLE stringFromText #-}
+stringFromText :: Text -> Builder
+stringFromText x =
   char8 '"' <> B.encodeUtf8BuilderEscaped A.stringEncodedByte x <> char8 '"'
 
+{-# INLINABLE stringFromLazyText #-}
+stringFromLazyText :: G.Text -> Builder
+stringFromLazyText x =
+  char8 '"' <> H.encodeUtf8BuilderEscaped A.stringEncodedByte x <> char8 '"'
+
+{-# INLINABLE stringFromBytes #-}
+stringFromBytes :: ByteString -> Builder
+stringFromBytes x =
+  char8 '"' <> A.primMapByteStringBounded (inline A.stringEncodedByte) x <> char8 '"'
+
+{-# INLINABLE stringFromLazyBytes #-}
+stringFromLazyBytes :: F.ByteString -> Builder
+stringFromLazyBytes x =
+  char8 '"' <> A.primMapLazyByteStringBounded (inline A.stringEncodedByte) x <> char8 '"'
+
 {-# INLINABLE scientific #-}
 scientific :: Scientific -> Builder
 scientific n =
@@ -43,7 +62,7 @@
 {-# INLINABLE row #-}
 row :: Text -> Builder -> Builder
 row key value =
-  string key <> char8 ':' <> value
+  stringFromText key <> char8 ':' <> value
 
 {-# INLINABLE inSquarelies #-}
 inSquarelies :: Builder -> Builder
