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.2.1
+version:             0.2.2.2
 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,8 @@
+0.2.2.2
+
+* Add the ability to percent-encode directly into a Utf8Builder.
+* Add Utf8Builder.unsafeAppendBufferBuilder.
+
 0.2.2.0
 
 * Add the ability to encode custom types as JSON keys
diff --git a/src/Data/BufferBuilder/Utf8.hs b/src/Data/BufferBuilder/Utf8.hs
--- a/src/Data/BufferBuilder/Utf8.hs
+++ b/src/Data/BufferBuilder/Utf8.hs
@@ -31,6 +31,9 @@
     , appendBS7
     , appendLiteral7
 
+    -- * URL percent-encoding
+    , appendUrlEncoded
+
     -- * Printing numbers
     , appendDecimalSignedInt
     , appendDecimalDouble
@@ -41,6 +44,7 @@
     , appendEscapedJsonText
 
     -- * Unsafe append operations
+    , unsafeAppendBufferBuilder
     , unsafeAppendByte
     , unsafeAppendChar8
     , unsafeAppendLiteral
@@ -112,6 +116,15 @@
 {-# INLINE appendLiteral7 #-}
 
 
+-- URL percent-encoding
+
+-- | Directly calls 'BB.appendUrlEncoded'.  The output from URL
+-- percent-encoding is guaranteed to be valid UTF-8.
+appendUrlEncoded :: ByteString -> Utf8Builder ()
+appendUrlEncoded = Utf8Builder . BB.appendUrlEncoded
+{-# INLINE appendUrlEncoded #-}
+
+
 -- Printing numbers
 
 appendDecimalSignedInt :: Int -> Utf8Builder ()
@@ -138,6 +151,11 @@
 
 
 -- Unsafe
+
+-- | Directly append a BufferBuilder into the UTF-8 code stream.  Incorrect
+-- use of this function can result in invalid UTF-8.
+unsafeAppendBufferBuilder :: BufferBuilder () -> Utf8Builder ()
+unsafeAppendBufferBuilder = Utf8Builder
 
 -- | Directly append a byte into the UTF-8 code stream.  Incorrect use of
 -- this function can result in invalid UTF-8.
