diff --git a/changelog.md b/changelog.md
--- a/changelog.md
+++ b/changelog.md
@@ -1,3 +1,6 @@
+0.1.5
+* Fix serialization bug where userinfo was not including the @ separator.
+
 0.1.4
 * Bump attoparsec bounds
 
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
@@ -96,7 +96,7 @@
 
 -------------------------------------------------------------------------------
 serializeUserInfo :: UserInfo -> Builder
-serializeUserInfo UserInfo {..} = bs uiUsername <> c8 ':' <> bs uiPassword
+serializeUserInfo UserInfo {..} = bs uiUsername <> c8 ':' <> bs uiPassword <> c8 '@'
 
 
 -------------------------------------------------------------------------------
diff --git a/test/URI/ByteStringTests.hs b/test/URI/ByteStringTests.hs
--- a/test/URI/ByteStringTests.hs
+++ b/test/URI/ByteStringTests.hs
@@ -24,6 +24,7 @@
     parseUriTests
   , uriParseErrorInstancesTests
   , lensTests
+  , serializeURITests
   ]
 
 
@@ -143,6 +144,8 @@
       read (show e) == e
   ]
 
+
+-------------------------------------------------------------------------------
 lensTests :: TestTree
 lensTests = testGroup "lenses"
   [
@@ -210,10 +213,13 @@
      ((rr & rrFragmentL .~ x) === rr { rrFragment = x })
   ]
 
+
+-------------------------------------------------------------------------------
 testParses :: ByteString -> URI -> TestTree
 testParses = testParses' strictURIParserOptions
 
 
+-------------------------------------------------------------------------------
 testParseHost :: ByteString -> ByteString -> TestTree
 testParseHost uri expectedHost =
   testParses uri $
@@ -224,10 +230,13 @@
         Nothing
 
 
+
+-------------------------------------------------------------------------------
 testParsesLax :: ByteString -> URI -> TestTree
 testParsesLax = testParses' laxURIParserOptions
 
 
+-------------------------------------------------------------------------------
 testParses' :: URIParserOptions -> ByteString -> URI -> TestTree
 testParses' opts s u = testGroup "testParses'"
     [ parseTestURI opts s $ Right u
@@ -235,20 +244,24 @@
     ]
 
 
+-------------------------------------------------------------------------------
 makeRelativeRefTyped :: URI -> RelativeRef
 makeRelativeRefTyped (URI _ a p q f) = RelativeRef a p q f
 
 
+-------------------------------------------------------------------------------
 makeRelativeRefBS :: ByteString -> ByteString
 makeRelativeRefBS s = B8.tail x
   where
     (_, x) = B8.break (==':') s
 
 
+-------------------------------------------------------------------------------
 testParseFailure :: ByteString -> URIParseError -> TestTree
 testParseFailure s = parseTestURI strictURIParserOptions s . Left
 
 
+-------------------------------------------------------------------------------
 parseTestURI
     :: URIParserOptions
     -> ByteString
@@ -256,6 +269,8 @@
     -> TestTree
 parseTestURI opts s r = testCase (B8.unpack s) $ parseURI opts s @?= r
 
+
+-------------------------------------------------------------------------------
 roundtripTestURI
     :: URIParserOptions
     -> ByteString
@@ -263,6 +278,8 @@
 roundtripTestURI opts s =
     testCase (B8.unpack s) $ (parseURI opts s >>= return . BB.toByteString . serializeURI) @?= Right s
 
+
+-------------------------------------------------------------------------------
 parseTestRelativeRef
     :: URIParserOptions
     -> ByteString
@@ -270,3 +287,19 @@
     -> TestTree
 parseTestRelativeRef opts s r =
   testCase (B8.unpack s) $ parseRelativeRef opts s @?= r
+
+
+-------------------------------------------------------------------------------
+serializeURITests :: TestTree
+serializeURITests = testGroup "serializeURI"
+  [
+    testCase "renders userinfo correctly" $ do
+       let ui = UserInfo "user" "pass"
+       let uri = URI (Scheme "http")
+                 (Just (Authority (Just ui) (Host "www.example.org") Nothing))
+                 "/"
+                 (Query [("foo", "bar")])
+                 (Just "somefragment")
+       let res = BB.toLazyByteString (serializeURI uri)
+       res @?= "http://user:pass@www.example.org/?foo=bar#somefragment"
+  ]
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.1.4
+version:             0.1.5
 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
