diff --git a/shikensu.cabal b/shikensu.cabal
--- a/shikensu.cabal
+++ b/shikensu.cabal
@@ -3,7 +3,7 @@
 -- see: https://github.com/sol/hpack
 
 name:           shikensu
-version:        0.3.6
+version:        0.3.7
 synopsis:       Run a sequence of functions on in-memory representations of files
 description:    See README at <https://github.com/icidasset/shikensu#readme>
 category:       Filesystem
diff --git a/src/Shikensu.hs b/src/Shikensu.hs
--- a/src/Shikensu.hs
+++ b/src/Shikensu.hs
@@ -125,10 +125,10 @@
 makeDefinition rootDirname pattern absolutePath =
     let
         workingDirname      = commonDirectory pattern
-        rootWorkingDirname  = combine rootDirname workingDirname
+        rootWorkingDirname  = (combine rootDirname workingDirname) <> [ pathSeparator ]
 
         theAbsolutePath     = normalise absolutePath
-        theLocalPath        = dropDrive (stripPrefix rootWorkingDirname theAbsolutePath)
+        theLocalPath        = stripPrefix rootWorkingDirname theAbsolutePath
     in
         Definition
             { basename        = takeBaseName theLocalPath
diff --git a/src/Shikensu/Internal/Utilities.hs b/src/Shikensu/Internal/Utilities.hs
--- a/src/Shikensu/Internal/Utilities.hs
+++ b/src/Shikensu/Internal/Utilities.hs
@@ -40,7 +40,7 @@
 compileParentPath dirname =
     case dirname of
         "" -> Nothing
-        _  -> Just "../"
+        _  -> Just $ addTrailingPathSeparator ".."
 
 
 {-| Path to root.
diff --git a/tests/Test.hs b/tests/Test.hs
--- a/tests/Test.hs
+++ b/tests/Test.hs
@@ -1,7 +1,7 @@
 module Main where
 
-import System.Directory (canonicalizePath, removePathForcibly)
-import System.FilePath (combine)
+import System.Directory (getCurrentDirectory, removePathForcibly)
+import System.FilePath ((</>))
 import Test.Contrib
 import Test.Example
 import Test.Shikensu
@@ -11,8 +11,8 @@
 
 main :: IO ()
 main = do
-    root        <- canonicalizePath "./"
-    _           <- removePathForcibly (combine root "tests/build")
+    root        <- getCurrentDirectory
+    _           <- removePathForcibly (root </> "tests" </> "build")
 
     defaultMain tests
 
diff --git a/tests/Test/Contrib.hs b/tests/Test/Contrib.hs
--- a/tests/Test/Contrib.hs
+++ b/tests/Test/Contrib.hs
@@ -3,8 +3,9 @@
     ) where
 
 import Data.ByteString (ByteString)
+import Data.Monoid ((<>))
 import Flow
-import System.FilePath (joinPath)
+import System.FilePath
 import Test.Helpers
 import Test.Tasty
 import Test.Tasty.HUnit
@@ -43,13 +44,13 @@
 
 
 list :: String -> IO Shikensu.Dictionary
-list pattern =
-    Shikensu.listRelative [pattern] "."
+list thePattern =
+    Shikensu.listRelative [thePattern] "."
 
 
 example_md :: IO Shikensu.Dictionary
 example_md =
-    list "tests/fixtures/example.md"
+    list $ joinPath [ "tests", "fixtures", "example.md" ]
 
 
 renderer :: Shikensu.Definition -> Maybe ByteString
@@ -63,7 +64,12 @@
             |> fmap (\c -> BS.intercalate B.empty [openingTag, c, closingTag])
 
 
+upstairs :: String
+upstairs =
+    addTrailingPathSeparator ".."
 
+
+
 -- Tests
 
 
@@ -116,12 +122,12 @@
             )
             example_md
 
-        definition      = fmap (List.reverse .> List.head) dictionary
+        definition          = fmap (List.reverse .> List.head) dictionary
 
-        lookupTitle     = \def -> HashMap.lookup keyA (Shikensu.metadata def)
-        lookupHello     = \def -> HashMap.lookup keyB (Shikensu.metadata def)
-        lookupRemoved   = \def -> HashMap.lookup keyC (Shikensu.metadata def)
-        lookupBasename  = \def -> HashMap.lookup keyBase (Shikensu.metadata def)
+        lookupTitle     def = HashMap.lookup keyA (Shikensu.metadata def)
+        lookupHello     def = HashMap.lookup keyB (Shikensu.metadata def)
+        lookupRemoved   def = HashMap.lookup keyC (Shikensu.metadata def)
+        lookupBasename  def = HashMap.lookup keyBase (Shikensu.metadata def)
     in
         testGroup
             "Metadata"
@@ -149,13 +155,13 @@
         testGroup
             "Permalink"
             [ testCase "Should have the correct `localPath`"
-            $ assertDef definition Shikensu.localPath "example/index.md"
+            $ assertDef definition Shikensu.localPath ("example" </> "index.md")
 
             , testCase "Should have the correct `parentPath`"
-            $ assertDef definition Shikensu.parentPath (Just "../")
+            $ assertDef definition Shikensu.parentPath (Just upstairs)
 
             , testCase "Should have the correct `pathToRoot`"
-            $ assertDef definition Shikensu.pathToRoot "../"
+            $ assertDef definition Shikensu.pathToRoot upstairs
             ]
 
 
@@ -163,19 +169,22 @@
 testPrefixDirname :: TestTree
 testPrefixDirname =
     let
-        dictionary = fmap (Contrib.prefixDirname "prefix/") (list "tests/**/example.md")
+        thePrefix  = addTrailingPathSeparator "prefix"
+        thePattern = "tests" </> "**" </> "example.md"
+
+        dictionary = fmap (Contrib.prefixDirname thePrefix) (list thePattern)
         definition = fmap List.head dictionary
     in
         testGroup
             "PrefixDirname"
             [ testCase "Should have the correct `dirname`"
-            $ assertDef definition Shikensu.dirname "prefix/fixtures"
-
-            , testCase "Should have the correct `pathToRoot`"
-            $ assertDef definition Shikensu.pathToRoot "../../"
+            $ assertDef definition Shikensu.dirname ("prefix" </> "fixtures")
 
             , testCase "Should have the correct `parentPath`"
-            $ assertDef definition Shikensu.parentPath (Just "../")
+            $ assertDef definition Shikensu.parentPath (Just upstairs)
+
+            , testCase "Should have the correct `pathToRoot`"
+            $ assertDef definition Shikensu.pathToRoot (upstairs <> upstairs)
             ]
 
 
@@ -228,8 +237,10 @@
 testWrite :: TestTree
 testWrite =
     let
-        destination = "tests/build/"
-        dictionary  = list "tests/**/example.md"
+        destination = "tests" </> "build" <> [ pathSeparator ]
+        thePattern  = "tests" </> "**" </> "example.md"
+
+        dictionary  = list thePattern
             >>= Contrib.IO.read
             >>= Contrib.IO.write destination
 
@@ -237,5 +248,5 @@
     in
         testCase "Should `write`"
         $ fmap Shikensu.rootDirname definition
-            >>= \r -> readFile (joinPath [r, destination, "fixtures/example.md"])
+            >>= \r -> readFile (joinPath [ r, destination, "fixtures", "example.md" ])
             >>= \c -> assertEq "# Example\n" c
diff --git a/tests/Test/Example.hs b/tests/Test/Example.hs
--- a/tests/Test/Example.hs
+++ b/tests/Test/Example.hs
@@ -3,14 +3,14 @@
     ) where
 
 import Data.ByteString (ByteString)
-import Data.Monoid ((<>))
 import Data.Text (Text)
 import Flow
 import Prelude hiding (read)
 import Shikensu (Definition(..), Dictionary(..), list, makeDefinition)
 import Shikensu.Contrib (clone, copyPropsToMetadata, permalink, renameExt, renderContent)
 import Shikensu.Contrib.IO (read, write)
-import System.Directory (canonicalizePath)
+import System.Directory (getCurrentDirectory)
+import System.FilePath ((</>), joinPath)
 import Test.Helpers
 import Test.Tasty
 import Test.Tasty.HUnit
@@ -23,14 +23,21 @@
     testCase "Example test" $ dictionaries >>= uncurry assertEq
 
 
+thePattern :: String
+thePattern =
+    "fixtures" </> "*.md"
+
+
 dictionaries :: IO (Dictionary, Dictionary)
 dictionaries = do
-    root            <- canonicalizePath "./tests"
-    dictA           <- dictionary_io root
+    root            <- getCurrentDirectory
 
-    let absolute    = root <> "/fixtures/example.md"
-    let dictB       = [Shikensu.makeDefinition root "fixtures/*.md" absolute]
+    let testsDir    = root </> "tests"
+    dictA           <- dictionary_io testsDir
 
+    let absolute    = testsDir </> "fixtures" </> "example.md"
+    let dictB       = [ Shikensu.makeDefinition testsDir thePattern absolute ]
+
     dictB_Read      <- read dictB
     dictB_Final     <- flow dictB_Read
 
@@ -43,10 +50,10 @@
 
 dictionary_io :: String -> IO Dictionary
 dictionary_io absolutePathToCwd =
-    Shikensu.list ["fixtures/*.md"] absolutePathToCwd
+    Shikensu.list [thePattern] absolutePathToCwd
         >>= read
         >>= flow
-        >>= write "./build"
+        >>= write "build"
 
 
 flow :: Dictionary -> IO Dictionary
diff --git a/tests/Test/Helpers.hs b/tests/Test/Helpers.hs
--- a/tests/Test/Helpers.hs
+++ b/tests/Test/Helpers.hs
@@ -36,8 +36,8 @@
 
 
 define :: String -> String -> IO Definition
-define pattern root =
+define thePattern root =
     root
-        |> Shikensu.listRelative [pattern]
+        |> Shikensu.listRelative [ thePattern ]
         |> fmap (List.sortBy sortByAbsolutePath)
         |> fmap List.head
diff --git a/tests/Test/Shikensu.hs b/tests/Test/Shikensu.hs
--- a/tests/Test/Shikensu.hs
+++ b/tests/Test/Shikensu.hs
@@ -2,6 +2,7 @@
     ( shikensuTests
     ) where
 
+import System.FilePath ((</>))
 import Test.Helpers
 import Test.Tasty
 import Test.Tasty.HUnit
@@ -27,7 +28,8 @@
 testRegular :: TestTree
 testRegular =
     let
-        definition = define "tests/**/*.md" "."
+        thePattern = "tests" </> "**" </> "*.md"
+        definition = define thePattern "."
     in
         testGroup "Test regular"
             [ testCase "Should have the correct basename"
@@ -40,7 +42,7 @@
             $ assertDef definition Shikensu.extname ".md"
 
             , testCase "Should have the correct pattern"
-            $ assertDef definition Shikensu.pattern "tests/**/*.md"
+            $ assertDef definition Shikensu.pattern thePattern
 
             , testCase "Should have the correct workingDirname"
             $ assertDef definition Shikensu.workingDirname "tests"
@@ -51,7 +53,8 @@
 testDot :: TestTree
 testDot =
     let
-        definition = define "./tests/**/*.md" "."
+        thePattern = "." </> "tests" </> "**" </> "*.md"
+        definition = define thePattern "."
     in
         testGroup "Test dot"
             [ testCase "Should have the correct basename"
@@ -64,7 +67,7 @@
             $ assertDef definition Shikensu.extname ".md"
 
             , testCase "Should have the correct pattern"
-            $ assertDef definition Shikensu.pattern "./tests/**/*.md"
+            $ assertDef definition Shikensu.pattern thePattern
 
             , testCase "Should have the correct workingDirname"
             $ assertDef definition Shikensu.workingDirname "tests"
@@ -75,7 +78,8 @@
 testWithoutWd :: TestTree
 testWithoutWd =
     let
-        definition = define "**/*.md" "./tests"
+        thePattern = "**" </> "*.md"
+        definition = define thePattern "tests"
     in
         testGroup "Test without workingDirname"
             [ testCase "Should have the correct basename"
@@ -88,7 +92,7 @@
             $ assertDef definition Shikensu.extname ".md"
 
             , testCase "Should have the correct pattern"
-            $ assertDef definition Shikensu.pattern "**/*.md"
+            $ assertDef definition Shikensu.pattern thePattern
 
             , testCase "Should have the correct workingDirname"
             $ assertDef definition Shikensu.workingDirname ""
@@ -99,7 +103,8 @@
 testRootFile :: TestTree
 testRootFile =
     let
-        definition = define "*.md" "."
+        thePattern = "*.md"
+        definition = define thePattern "."
     in
         testGroup "Test file in root path"
             [ testCase "Should have the correct basename"
@@ -112,7 +117,7 @@
             $ assertDef definition Shikensu.extname ".md"
 
             , testCase "Should have the correct pattern"
-            $ assertDef definition Shikensu.pattern "*.md"
+            $ assertDef definition Shikensu.pattern thePattern
 
             , testCase "Should have the correct workingDirname"
             $ assertDef definition Shikensu.workingDirname ""
diff --git a/tests/Test/Utilities.hs b/tests/Test/Utilities.hs
--- a/tests/Test/Utilities.hs
+++ b/tests/Test/Utilities.hs
@@ -5,6 +5,7 @@
 import Flow
 import Shikensu
 import Shikensu.Utilities as Utils
+import System.FilePath ((</>))
 import Test.Helpers
 import Test.Tasty
 import Test.Tasty.HUnit
@@ -22,6 +23,15 @@
 
 
 
+-- Test data
+
+
+thePattern :: String
+thePattern =
+    "tests" </> "fixtures" </> "example.md"
+
+
+
 -- Tests
 
 
@@ -30,8 +40,8 @@
     let
         result =
             Utils.lsequence
-                [ ( "a", Shikensu.listRelative ["tests/fixtures/example.md"] "." )
-                , ( "b", Shikensu.listRelative ["tests/fixtures/example.md"] "." )
+                [ ( "a", Shikensu.listRelative [thePattern] "." )
+                , ( "b", Shikensu.listRelative [thePattern] "." )
                 ]
     in
         testCase "Test lsequence"
@@ -43,7 +53,7 @@
     let
         definition =
             "."
-                |> define "tests/fixtures/example.md"
+                |> define thePattern
                 |> fmap (Contrib.insertMetadataDef $ HashMap.singleton "a" "Hi!")
 
         resultExisting =
