diff --git a/changelog.md b/changelog.md
--- a/changelog.md
+++ b/changelog.md
@@ -1,3 +1,6 @@
+0.3.3.0
+* Export more granular serializtion functions for things like the query string.
+
 0.3.2.2
 * Loosen dependencies
 
diff --git a/src/URI/ByteString.hs b/src/URI/ByteString.hs
--- a/src/URI/ByteString.hs
+++ b/src/URI/ByteString.hs
@@ -55,6 +55,14 @@
     -- * Serializing
     , serializeURIRef
     , serializeURIRef'
+    , serializeQuery
+    , serializeQuery'
+    , serializeFragment
+    , serializeFragment'
+    , serializeAuthority
+    , serializeAuthority'
+    , serializeUserInfo
+    , serializeUserInfo'
     -- ** Normalized Serialization
     , normalizeURIRef
     , normalizeURIRef'
diff --git a/src/URI/ByteString/Internal.hs b/src/URI/ByteString/Internal.hs
--- a/src/URI/ByteString/Internal.hs
+++ b/src/URI/ByteString/Internal.hs
@@ -185,7 +185,7 @@
       | otherwise = h:t
     authority = maybe Monoid.mempty (serializeAuthority o mScheme) rrAuthority
     query = serializeQuery o rrQuery
-    fragment = maybe mempty (\s -> c8 '#' <> bs s) rrFragment
+    fragment = serializeFragment rrFragment
 
 
 -------------------------------------------------------------------------------
@@ -254,6 +254,9 @@
 
 
 -------------------------------------------------------------------------------
+-- | Serialize the query part of a url
+-- @serializeQuery opts mempty = ""@
+-- @serializeQuery opts (Query [("a","b"),("c","d")]) = "?a=b&c=d"@
 serializeQuery :: URINormalizationOptions -> Query -> Builder
 serializeQuery _ (Query []) = mempty
 serializeQuery URINormalizationOptions {..} (Query ps) =
@@ -265,7 +268,20 @@
       | otherwise = ps
 
 
+serializeQuery' :: URINormalizationOptions -> Query -> ByteString
+serializeQuery' opts = BB.toByteString . serializeQuery opts
+
+
 -------------------------------------------------------------------------------
+serializeFragment :: Maybe ByteString -> Builder
+serializeFragment = maybe mempty (\s -> c8 '#' <> bs s)
+
+
+serializeFragment' :: Maybe ByteString -> ByteString
+serializeFragment' = BB.toByteString . serializeFragment
+
+
+-------------------------------------------------------------------------------
 serializeAuthority :: URINormalizationOptions -> Maybe Scheme -> Authority -> Builder
 serializeAuthority URINormalizationOptions {..} mScheme Authority {..} = BB.fromString "//" <> userinfo <> bs host <> port
   where
@@ -288,9 +304,16 @@
       | otherwise = Just p
 
 
+serializeAuthority' :: URINormalizationOptions -> Maybe Scheme -> Authority -> ByteString
+serializeAuthority' opts mScheme = BB.toByteString . serializeAuthority opts mScheme
+
 -------------------------------------------------------------------------------
 serializeUserInfo :: UserInfo -> Builder
 serializeUserInfo UserInfo {..} = bs uiUsername <> c8 ':' <> bs uiPassword <> c8 '@'
+
+
+serializeUserInfo' :: UserInfo -> ByteString
+serializeUserInfo' = BB.toByteString . serializeUserInfo
 
 
 -------------------------------------------------------------------------------
diff --git a/uri-bytestring.cabal b/uri-bytestring.cabal
--- a/uri-bytestring.cabal
+++ b/uri-bytestring.cabal
@@ -1,5 +1,5 @@
 name:                uri-bytestring
-version:             0.3.2.2
+version:             0.3.3.0
 synopsis:            Haskell URI parsing as ByteStrings
 description: uri-bytestring aims to be an RFC3986 compliant URI parser that uses efficient ByteStrings for parsing and representing the URI data.
 license:             BSD3
