diff --git a/System/Unix/Chroot.hs b/System/Unix/Chroot.hs
--- a/System/Unix/Chroot.hs
+++ b/System/Unix/Chroot.hs
@@ -75,17 +75,16 @@
       copySSH Nothing = return ()
       copySSH (Just home) =
           -- Do NOT preserve ownership, files must be owned by root.
+          createDirectoryIfMissing True (rootPath ++ "/root") >>
           run "/usr/bin/rsync" ["-rlptgDHxS", "--delete", home ++ "/.ssh/", rootPath ++ "/root/.ssh"]
       withSock Nothing action = action
       withSock (Just sockPath) action =
           withMountBind dir (rootPath ++ dir) action
           where dir = dropTrailingPathSeparator (dropFileName sockPath)
       withMountBind toMount mountPoint action =
-          do createDirectoryIfMissing True mountPoint
-             run "/bin/mount" ["--bind", escapePathForMount toMount, escapePathForMount mountPoint]
-             result <- action
-             run "/bin/umount" [escapePathForMount mountPoint]
-             return result
+          (do createDirectoryIfMissing True mountPoint
+              run "/bin/mount" ["--bind", escapePathForMount toMount, escapePathForMount mountPoint]
+              action) `finally` (run "/bin/umount" [escapePathForMount mountPoint])
       escapePathForMount = id	-- FIXME - Path arguments should be escaped
 
       run cmd args =
diff --git a/System/Unix/Directory.hs b/System/Unix/Directory.hs
--- a/System/Unix/Directory.hs
+++ b/System/Unix/Directory.hs
@@ -12,7 +12,7 @@
 
 import Control.Exception
 import Data.List (isSuffixOf)
-import System.Cmd
+import System.Process
 import System.Directory
 import System.Exit
 import System.FilePath
@@ -84,7 +84,7 @@
 --	when you are inside a chroot.
 removeRecursiveSafely :: FilePath -> IO ()
 removeRecursiveSafely path =
-    traverse path removeFile removeDirectory umount
+    System.Unix.Directory.traverse path removeFile removeDirectory umount
     where
       umount path =
           do
@@ -102,7 +102,7 @@
 -- unmounts anything it finds mounted.  Note that this can be much
 -- slower than Mount.umountBelow, use that instead.
 unmountRecursiveSafely path =
-    traverse path noOp noOp umount
+    System.Unix.Directory.traverse path noOp noOp umount
     where
       noOp _ = return ()
       umount path =
diff --git a/System/Unix/Misc.hs b/System/Unix/Misc.hs
--- a/System/Unix/Misc.hs
+++ b/System/Unix/Misc.hs
@@ -11,7 +11,7 @@
 import Data.ByteString.Lazy.Char8 (empty, readFile, writeFile)
 import Data.Digest.Pure.MD5 (md5)
 import Data.Maybe
-import System.Cmd
+import System.Process
 import System.Directory
 import System.Exit
 import System.IO
diff --git a/Unixutils.cabal b/Unixutils.cabal
--- a/Unixutils.cabal
+++ b/Unixutils.cabal
@@ -1,9 +1,9 @@
 Name:           Unixutils
-Version:        1.52
+Version:        1.52.4
 License:        BSD3
 License-File:	COPYING
 Author:         Jeremy Shaw, David Fox
-Homepage:       http://src.seereason.com/haskell-unixutils
+Homepage:       https://github.com/seereason/haskell-unixutils.git
 Category:	System
 Synopsis:       A crude interface between Haskell and Unix-like operating systems
 Maintainer:     jeremy@n-heptane.com
