diff --git a/changelog.md b/changelog.md
--- a/changelog.md
+++ b/changelog.md
@@ -1,3 +1,6 @@
+0.3.0.1
+* Fix normalization bug where certain combination of options would fail to add a trailing slash.
+
 0.3.0.0
 * Add MonadFail instance.
 * Correct haddock spelling mistake.
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
@@ -171,7 +171,8 @@
   authority <> path <> query <> fragment
   where
     path
-      | unoSlashEmptyPath && BS.null rrPath = "/"
+      | unoSlashEmptyPath && BS.null rrPath  = "/"
+      | segs == [""] = "/"
       | otherwise  = mconcat (intersperse (c8 '/') (map urlEncodePath segs))
     segs = dropSegs (BS.split slash (pathRewrite rrPath))
     pathRewrite
diff --git a/test/URI/ByteStringTests.hs b/test/URI/ByteStringTests.hs
--- a/test/URI/ByteStringTests.hs
+++ b/test/URI/ByteStringTests.hs
@@ -430,6 +430,9 @@
   , testCase "percent encoding is upcased automatically" $ do
       normalizeURIBS o "http://example.org/a?foo%3abar=baz" @?=
         "http://example.org/a?foo%3Abar=baz"
+  , testCase "aggressive normalization retains slashes (issue 41)" $ do
+      normalizeURIBS aggressiveNormalization "http://example.org/" @?=
+        "http://example.org/"
   ]
   where
     o = noNormalization
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.0.0
+version:             0.3.0.1
 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
