diff --git a/CHANGELOG b/CHANGELOG
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,3 +1,5 @@
+0.5.5:
+	* Use filepath's isValid function for additional sanity checks
 0.5.4:
 	* Disable parsing of path consisting only of "."
 	* Add NFData instance for Path
diff --git a/path.cabal b/path.cabal
--- a/path.cabal
+++ b/path.cabal
@@ -1,5 +1,5 @@
 name:                path
-version:             0.5.4
+version:             0.5.5
 synopsis:            Support for well-typed paths
 description:         Support for will-typed paths.
 license:             BSD3
diff --git a/src/Path.hs b/src/Path.hs
--- a/src/Path.hs
+++ b/src/Path.hs
@@ -97,7 +97,8 @@
   if FilePath.isAbsolute filepath &&
      not (null (normalizeDir filepath)) &&
      not ("~/" `isPrefixOf` filepath) &&
-     not (hasParentDir filepath)
+     not (hasParentDir filepath) &&
+     FilePath.isValid filepath
      then return (Path (normalizeDir filepath))
      else throwM (InvalidAbsDir filepath)
 
@@ -116,7 +117,8 @@
      not ("~/" `isPrefixOf` filepath) &&
      not (hasParentDir filepath) &&
      not (null (normalizeDir filepath)) &&
-     not (all (=='.') filepath)
+     not (all (== '.') filepath) &&
+     FilePath.isValid filepath
      then return (Path (normalizeDir filepath))
      else throwM (InvalidRelDir filepath)
 
@@ -132,7 +134,8 @@
      not ("~/" `isPrefixOf` filepath) &&
      not (hasParentDir filepath) &&
      not (null (normalizeFile filepath)) &&
-     not (all (=='.') filepath)
+     not (all (== '.') filepath) &&
+     FilePath.isValid filepath
      then return (Path (normalizeFile filepath))
      else throwM (InvalidAbsFile filepath)
 
@@ -151,7 +154,8 @@
      not ("~/" `isPrefixOf` filepath) &&
      not (hasParentDir filepath) &&
      not (null (normalizeFile filepath)) &&
-     not (all (=='.') filepath)
+     not (all (== '.') filepath) &&
+     FilePath.isValid filepath
      then return (Path (normalizeFile filepath))
      else throwM (InvalidRelFile filepath)
 
