diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,7 @@
+## Version 0.2.0.1 (01 Jun 2015)
+
+- Updated package dependencies
+
 ## Version 0.2.0.0 (15 Sep 2013)
 
 - Added option -v for version information
diff --git a/LICENSE b/LICENSE
--- a/LICENSE
+++ b/LICENSE
@@ -1,4 +1,4 @@
-Copyright (c) 2013 Mauro Taraborelli
+Copyright (c) 2015 Mauro Taraborelli
 
 All rights reserved.
 
diff --git a/haskdeep.cabal b/haskdeep.cabal
--- a/haskdeep.cabal
+++ b/haskdeep.cabal
@@ -1,10 +1,10 @@
 name:                haskdeep
-version:             0.2.0.0
+version:             0.2.0.1
 cabal-version:       >=1.8
 build-type:          Simple
 license:             BSD3
 license-file:        LICENSE
-copyright:           © 2013 Mauro Taraborelli
+copyright:           © 2015 Mauro Taraborelli
 author:              Mauro Taraborelli
 maintainer:          maurotaraborelli@gmail.com
 stability:           experimental
@@ -70,27 +70,29 @@
     HaskDeep.KnownHash.Reader
     HaskDeep.KnownHash.Writer
   build-depends:
-      attoparsec           ==0.10.*
-    , attoparsec-conduit   ==1.0.*
+      attoparsec           ==0.13.*
     , base                 ==4.*
     , base16-bytestring    ==0.1.*
-    , bytestring           ==0.9.*
-    , cereal               ==0.3.*
-    , conduit              ==1.0.*
-    , containers           ==0.4.*
-    , cryptohash           ==0.10.*
+    , bytestring           ==0.10.*
+    , cereal               ==0.4.*
+    , conduit              ==1.2.*
+    , conduit-combinators  ==1.0.*
+    , conduit-extra        ==1.1.*
+    , containers           ==0.5.*
+    , cryptohash           ==0.11.*
     , cryptohash-cryptoapi ==0.1.*
-    , crypto-api           ==0.12.*
+    , crypto-api           ==0.13.*
     , crypto-conduit       ==0.5.*
-    , filesystem-conduit   ==1.0.*
-    , old-locale           ==1.0.*
-    , optparse-applicative ==0.5.*
-    , system-fileio        ==0.3.*
-    , system-filepath      ==0.4.*
-    , text                 ==0.11.*
-    , time                 ==1.4.*
-    , regex-tdfa           ==1.1.*
+    , directory            ==1.2.*
+    , filepath             ==1.4.*
+    , optparse-applicative ==0.11.*
+    , resourcet            ==1.1.*
+    , text                 ==1.2.*
+    , time                 ==1.5.*
+    , transformers         ==0.3.*
+    , regex-tdfa           ==1.2.*
     , regex-tdfa-text      ==1.0.*
+    , unix-compat          ==0.4.*
   ghc-options: -Wall
 
 source-repository head
diff --git a/src/HaskDeep/Computation.hs b/src/HaskDeep/Computation.hs
--- a/src/HaskDeep/Computation.hs
+++ b/src/HaskDeep/Computation.hs
@@ -22,20 +22,20 @@
 where
 
 import           Control.Monad (liftM)
-import           Data.Maybe (fromJust)
+import           Control.Monad.IO.Class (liftIO)
+import           Control.Monad.Trans.Resource (ResourceT, runResourceT)
 import           Prelude hiding (FilePath)
 
 import           Crypto.Classes (Hash)
 import qualified Crypto.Conduit as CC
 import           Data.Conduit (($$))
-import qualified Data.Conduit as C
-import qualified Data.Conduit.Filesystem as CF
-import qualified Data.Conduit.List as CL
+import qualified Data.Conduit.Combinators as CCB
+import qualified Data.Conduit.Binary as CB
 import qualified Data.Text as T
 import           Data.Time (UTCTime)
-import qualified Filesystem as FS
-import           Filesystem.Path.CurrentOS (FilePath)
-import qualified Filesystem.Path.CurrentOS as FSC
+import qualified System.Directory as D
+import           System.FilePath (FilePath, makeRelative)
+import qualified System.PosixCompat.Files as PF
 import           Text.Regex.TDFA ((=~))
 import           Text.Regex.TDFA.Text ()
 
@@ -48,7 +48,7 @@
 compute :: Hash ctx a => HaskDeepConfiguration
         -> ComputationMode a
         -> IO HashSet
-compute conf cm = CF.traverse False root $$ CL.foldM insert_hash empty_with_symbol
+compute conf cm = runResourceT $ CCB.sourceDirectoryDeep False root $$ CCB.foldM insert_hash empty_with_symbol
     where
       root              = rootDirectory conf
       regex             = excludeRegex conf
@@ -56,21 +56,20 @@
       mod_upto          = includeModUpTo conf
       empty_with_symbol = HS.setSymbol (symbol cm) HS.empty
 
-      insert_hash :: HashSet -> FilePath -> IO HashSet
-      insert_hash hs fp = do let fpt = fpToText $ relativize root fp
-                             fmt <- FS.getModified fp
-                             if (excRegex fpt regex) || (excMod fmt mod_from mod_upto)
+      insert_hash :: HashSet -> FilePath -> ResourceT IO HashSet
+      insert_hash hs fp = do let fpt = T.pack $ makeRelative root fp
+                             fmt <- liftIO $ D.getModificationTime fp
+                             if excRegex fpt regex || excMod fmt mod_from mod_upto
                              then return hs
-                             else do s <- FS.getSize fp
-                                     h <- liftM (runComputation cm) $ C.runResourceT
-                                          $ CF.sourceFile fp $$ CC.sinkHash
+                             else do s <- liftIO $ getFileSize fp
+                                     h <- liftM (runComputation cm) $ runResourceT
+                                          $ CB.sourceFile fp $$ CC.sinkHash
                                      return $ HS.insert (HashInfo fpt s h) hs
 
-relativize :: FilePath -> FilePath -> FilePath
-relativize root fp = fromJust $ FSC.stripPrefix root fp
-
-fpToText :: FilePath -> T.Text
-fpToText = either id id . FSC.toText
+getFileSize :: FilePath -> IO Integer
+getFileSize path = do
+  stat <- PF.getFileStatus path
+  return (toInteger $ PF.fileSize stat)
 
 excRegex :: T.Text -> Maybe T.Text -> Bool
 excRegex fpt (Just rule) = fpt =~ rule
diff --git a/src/HaskDeep/Configuration.hs b/src/HaskDeep/Configuration.hs
--- a/src/HaskDeep/Configuration.hs
+++ b/src/HaskDeep/Configuration.hs
@@ -24,8 +24,7 @@
 
 import           Data.Text (Text)
 import           Data.Time (UTCTime)
-import           Filesystem.Path (FilePath)
-import qualified Filesystem.Path.CurrentOS as FSC
+import           System.FilePath (FilePath)
 
 -- | HaskDeep configuration.
 data HaskDeepConfiguration = HaskDeepConfiguration
@@ -39,8 +38,8 @@
 -- | HaskDeep default configuration.
 defaultHaskDeepConfiguration :: HaskDeepConfiguration
 defaultHaskDeepConfiguration = HaskDeepConfiguration
-    { rootDirectory   = FSC.decodeString "."
-    , knownHashes     = FSC.decodeString "known.haskdeep"
+    { rootDirectory   = "."
+    , knownHashes     = "known.haskdeep"
     , excludeRegex    = Nothing
     , includeModFrom  = Nothing
     , includeModUpTo  = Nothing
diff --git a/src/HaskDeep/KnownHash/Reader.hs b/src/HaskDeep/KnownHash/Reader.hs
--- a/src/HaskDeep/KnownHash/Reader.hs
+++ b/src/HaskDeep/KnownHash/Reader.hs
@@ -22,6 +22,7 @@
 
 import           Control.Applicative ((<*), many)
 import           Control.Monad (liftM)
+import           Control.Monad.Trans.Resource (runResourceT)
 import           Data.Maybe(fromJust)
 import           Data.Word (Word8)
 import           Prelude hiding (FilePath)
@@ -32,12 +33,11 @@
 import qualified Data.Attoparsec.Combinator as AC
 import qualified Data.ByteString.Char8 as B8
 import           Data.Conduit (($$))
-import qualified Data.Conduit as C
 import qualified Data.Conduit.Attoparsec as CA
-import qualified Data.Conduit.Filesystem as CF
+import qualified Data.Conduit.Binary as CB
 import           Data.Text ()
 import qualified Data.Text.Encoding as TE
-import           Filesystem.Path ()
+import           System.FilePath ()
 
 import           HaskDeep.Configuration
 import           HaskDeep.HashSet (HashSet, HashInfo(..))
@@ -46,8 +46,8 @@
 -- | Read known hashes file into an @HashSet@.
 readHashes :: HaskDeepConfiguration -- ^ Configuration
            -> IO HashSet            -- ^ @HashSet@ red from file
-readHashes conf = liftM HS.fromList $ C.runResourceT
-                  $ CF.sourceFile (knownHashes conf) $$ CA.sinkParser knownHashesP
+readHashes conf = liftM HS.fromList $ runResourceT
+                  $ CB.sourceFile (knownHashes conf) $$ CA.sinkParser knownHashesP
 
 
 -- Parsers
diff --git a/src/HaskDeep/KnownHash/Writer.hs b/src/HaskDeep/KnownHash/Writer.hs
--- a/src/HaskDeep/KnownHash/Writer.hs
+++ b/src/HaskDeep/KnownHash/Writer.hs
@@ -20,21 +20,19 @@
     )
 where
 
+import           Control.Monad.Trans.Resource (runResourceT)
 import           Prelude hiding (FilePath)
 
 import           Data.ByteString (ByteString)
 import qualified Data.ByteString as BS
 import qualified Data.ByteString.Char8 as B8
 import           Data.Conduit (($$))
-import qualified Data.Conduit as C
-import qualified Data.Conduit.Filesystem as CF
+import qualified Data.Conduit.Binary as CB
 import qualified Data.Conduit.List as CL
 import qualified Data.Time as DT
-import           Data.Text ()
+import qualified Data.Text as T
 import qualified Data.Text.Encoding as TE
-import           Filesystem.Path ()
-import qualified Filesystem.Path.CurrentOS as FSC
-import qualified System.Locale as SL
+import           System.FilePath ()
 
 import           HaskDeep.Configuration
 import           HaskDeep.HashSet (HashSet)
@@ -44,18 +42,18 @@
 writeHashes :: HaskDeepConfiguration -- ^ Configuration
             -> HashSet               -- ^ @HashSet@ to write
             -> IO ()
-writeHashes conf hs = C.runResourceT $ CL.sourceList bs_known $$ CF.sinkFile (knownHashes conf)
+writeHashes conf hs = runResourceT $ CL.sourceList bs_known $$ CB.sinkFile (knownHashes conf)
     where
       newline          = "\n" :: ByteString
-      root             =  TE.encodeUtf8 $ either id id $ FSC.toText $ rootDirectory conf
+      root             =  TE.encodeUtf8 $ T.pack $ rootDirectory conf
       exclude_regex    = case excludeRegex conf of
                            (Just regex) -> TE.encodeUtf8 regex
                            Nothing      -> BS.empty
       include_mod_from = case includeModFrom conf of
-                           (Just modFrom) -> B8.pack $ DT.formatTime SL.defaultTimeLocale "%FT%TZ" modFrom
+                           (Just modFrom) -> B8.pack $ DT.formatTime DT.defaultTimeLocale "%FT%TZ" modFrom
                            Nothing        -> BS.empty
       include_mod_upto = case includeModUpTo conf of
-                           (Just modUpTo) -> B8.pack $ DT.formatTime SL.defaultTimeLocale "%FT%TZ" modUpTo
+                           (Just modUpTo) -> B8.pack $ DT.formatTime DT.defaultTimeLocale "%FT%TZ" modUpTo
                            Nothing        -> BS.empty
       files_count      = B8.pack $ show $ HS.filesCount hs
       size_sum         = B8.pack $ show $ HS.sizeSum hs
diff --git a/src/Options.hs b/src/Options.hs
--- a/src/Options.hs
+++ b/src/Options.hs
@@ -25,16 +25,13 @@
 import           Data.Text (Text)
 import qualified Data.Text as T
 import           Data.Time (UTCTime)
-import qualified Data.Time as DT
-import           Filesystem.Path.CurrentOS (FilePath)
-import qualified Filesystem.Path.CurrentOS as FSC
+import qualified Data.Time.Format as DTF
 import           Options.Applicative
-import qualified System.Locale as SL
 
 import           HaskDeep
 
 haskdeepVersion :: String
-haskdeepVersion = "haskdeep 0.2.0.0 - file hashing and audit"
+haskdeepVersion = "haskdeep 0.2.0.1 - file hashing and audit"
 
 data Options = Version
              | Options OptExecution OptCompMode HaskDeepConfiguration
@@ -55,42 +52,37 @@
 
 configurationP :: Parser HaskDeepConfiguration
 configurationP = HaskDeepConfiguration
-                 <$> nullOption
+                 <$> strOption
                          ( long "root"
                            <> short 'r'
                            <> metavar "DIRNAME"
                            <> help "Root directory - default current directory"
-                           <> reader fpReader
                            <> value (rootDirectory defaultHaskDeepConfiguration))
-                 <*> nullOption
+                 <*> strOption
                          ( long "known"
                            <> short 'k'
                            <> metavar "FILENAME"
                            <> help "Known hashes file - default known.haskdeep"
-                           <> reader fpReader
                            <> value (knownHashes defaultHaskDeepConfiguration))
-                 <*> nullOption
+                 <*> option (str >>= parseText)
                          ( long "excl-regex"
                            <> short 'e'
                            <> metavar "REGEX"
                            <> help "Exclude files or directories based on regex"
-                           <> reader regexReader
                            <> value (excludeRegex defaultHaskDeepConfiguration)
                            <> hidden )
-                 <*> nullOption
+                 <*> option (str >>= parseTime)
                          ( long "incl-mod-from"
                            <> short 'f'
                            <> metavar "DATE"
                            <> help "Include files modified from yyyy-mm-ddThh:mm:ssZ"
-                           <> reader timeReader
                            <> value (includeModFrom defaultHaskDeepConfiguration)
                            <> hidden )
-                 <*> nullOption
+                 <*> option (str >>= parseTime)
                          ( long "incl-mod-upto"
                            <> short 't'
                            <> metavar "DATE"
                            <> help "Include files modified up to yyyy-mm-ddThh:mm:ssZ"
-                           <> reader timeReader
                            <> value (includeModUpTo defaultHaskDeepConfiguration)
                            <> hidden )
 
@@ -108,31 +100,29 @@
                            <> command "audit"
                            (info (pure OptAudit)
                             (progDesc "Audit files comparing them to known hashes")))
-                 <*> nullOption
+                 <*> option (str >>= parseOptCompMode)
                          ( long "computation"
                            <> short 'c'
                            <> metavar "MODE"
                            <> help "md5 | sha1 | sha256 | skein512 - default md5"
-                           <> reader compReader
                            <> value OptMD5)
                  <*> configurationP )
 
-compReader :: String -> Either ParseError OptCompMode
-compReader "md5"      = Right OptMD5
-compReader "sha1"     = Right OptSHA1
-compReader "sha256"   = Right OptSHA256
-compReader "skein512" = Right OptSkein512
-compReader _          = Left ShowHelpText
 
-fpReader :: String -> Either ParseError FilePath
-fpReader fp = Right $ FSC.decodeString fp
+parseOptCompMode :: String -> ReadM OptCompMode
+parseOptCompMode "md5"      = return OptMD5
+parseOptCompMode "sha1"     = return OptSHA1
+parseOptCompMode "sha256"   = return OptSHA256
+parseOptCompMode "skein512" = return OptSkein512
+parseOptCompMode _          = readerAbort ShowHelpText
 
-regexReader :: String -> Either ParseError (Maybe Text)
-regexReader = Right . Just . T.pack
+parseText :: String -> ReadM (Maybe Text)
+parseText s = return $ Just $ T.pack s
 
-timeReader :: String -> Either ParseError (Maybe UTCTime)
-timeReader dt = case parsedTime of
-                  (Just _) -> Right parsedTime
-                  Nothing  -> Left ShowHelpText
+parseTime :: String -> ReadM (Maybe UTCTime)
+parseTime s = case parsedTime of
+                (Just _) -> return parsedTime
+                Nothing  -> readerAbort ShowHelpText
     where
-      parsedTime = DT.parseTime SL.defaultTimeLocale "%FT%TZ" dt
+      parsedTime = DTF.parseTimeM True DTF.defaultTimeLocale "%FT%TZ" s
+
