diff --git a/Web/PathPieces.hs b/Web/PathPieces.hs
--- a/Web/PathPieces.hs
+++ b/Web/PathPieces.hs
@@ -20,15 +20,15 @@
     toPathPiece :: s -> S.Text
 
 instance PathPiece String where
-    fromPathPiece s = if S.null s then Nothing else Just (S.unpack s)
+    fromPathPiece = Just . S.unpack
     toPathPiece = S.pack
 
 instance PathPiece S.Text where
-    fromPathPiece s = if S.null s then Nothing else Just s
+    fromPathPiece = Just
     toPathPiece = id
 
 instance PathPiece L.Text where
-    fromPathPiece s = if S.null s then Nothing else Just (L.fromChunks [s])
+    fromPathPiece = Just . L.fromChunks . return
     toPathPiece = S.concat . L.toChunks
 
 instance PathPiece Integer where
diff --git a/path-pieces.cabal b/path-pieces.cabal
--- a/path-pieces.cabal
+++ b/path-pieces.cabal
@@ -1,5 +1,5 @@
 name:            path-pieces
-version:         0.1.1
+version:         0.1.2
 license:         BSD3
 license-file:    LICENSE
 author:          Michael Snoyman <michael@snoyman.com>
@@ -9,7 +9,8 @@
 stability:       unstable
 cabal-version:   >= 1.8
 build-type:      Simple
-homepage:        http://github.com/snoyberg/path-pieces
+extra-source-files:
+  test/main.hs
 
 library
     build-depends:   base             >= 4       && < 5
@@ -24,13 +25,13 @@
     hs-source-dirs: test
     ghc-options:   -Wall
     build-depends:   HUnit
-                   , hspec >= 0.8 && < 0.9
+                   , hspec >= 1.3
                    , file-location >= 0.4 && < 0.5
                    , base >= 4 && < 5
-                   , QuickCheck == 2.4.*
+                   , QuickCheck
                    , path-pieces
                    , text
 
 source-repository head
   type:     git
-  location: git://github.com/snoyberg/path-pieces.git
+  location: https://github.com/yesodweb/path-pieces
diff --git a/test/main.hs b/test/main.hs
new file mode 100644
--- /dev/null
+++ b/test/main.hs
@@ -0,0 +1,69 @@
+{-# Language ScopedTypeVariables #-}
+{-# OPTIONS_GHC -fno-warn-orphans #-}
+module Main where
+
+import Test.Hspec
+import Test.Hspec.QuickCheck(prop)
+import Test.QuickCheck
+
+import Web.PathPieces
+import qualified Data.Text as T
+import Data.Maybe (fromJust)
+
+-- import FileLocation (debug)
+
+instance Arbitrary T.Text where
+  arbitrary = fmap T.pack arbitrary
+
+
+main :: IO ()
+main = hspec spec
+
+spec :: Spec
+spec = do
+  describe "PathPiece" $ do
+    prop "toPathPiece <=> fromPathPiece String" $ \(p::String) ->
+      case (fromPathPiece . toPathPiece) p of
+        Nothing -> null p
+        Just pConverted -> p == pConverted
+
+    prop "toPathPiece <=> fromPathPiece String" $ \(p::T.Text) ->
+      case (fromPathPiece . toPathPiece) p of
+        Nothing -> T.null p
+        Just pConverted -> p == pConverted
+
+    prop "toPathPiece <=> fromPathPiece String" $ \(p::Int) ->
+      case (fromPathPiece . toPathPiece) p of
+        Nothing -> p < 0
+        Just pConverted -> p == pConverted
+
+  describe "PathMultiPiece" $ do
+    prop "toPathMultiPiece <=> fromPathMultiPiece String" $ \(p::[String]) ->
+      p == (fromJust . fromPathMultiPiece . toPathMultiPiece) p
+
+    prop "toPathMultiPiece <=> fromPathMultiPiece String" $ \(p::[T.Text]) ->
+      p == (fromJust . fromPathMultiPiece . toPathMultiPiece) p
+
+
+  describe "SinglePiece" $ do
+    prop "toPathPiece <=> fromPathPiece String" $ \(p::String) ->
+      case (fromPathPiece . toPathPiece) p of
+        Nothing -> null p
+        Just pConverted -> p == pConverted
+
+    prop "toPathPiece <=> fromPathPiece String" $ \(p::T.Text) ->
+      case (fromPathPiece . toPathPiece) p of
+        Nothing -> T.null p
+        Just pConverted -> p == pConverted
+
+    prop "toPathPiece <=> fromPathPiece String" $ \(p::Int) ->
+      case (fromPathPiece . toPathPiece) p of
+        Nothing -> p < 0
+        Just pConverted -> p == pConverted
+
+  describe "MultiPiece" $ do
+    prop "toPathMultiPiece <=> fromPathMultiPiece String" $ \(p::[String]) ->
+      p == (fromJust . fromPathMultiPiece . toPathMultiPiece) p
+
+    prop "toPathMultiPiece <=> fromPathMultiPiece String" $ \(p::[T.Text]) ->
+      p == (fromJust . fromPathMultiPiece . toPathMultiPiece) p
