diff --git a/Command.cabal b/Command.cabal
--- a/Command.cabal
+++ b/Command.cabal
@@ -1,5 +1,5 @@
 Name:               Command
-Version:            0.0.6
+Version:            0.0.7
 License:            BSD3
 License-File:       LICENSE
 Author:             Tony Morris <ʇǝu˙sıɹɹoɯʇ@ןןǝʞsɐɥ>
@@ -22,7 +22,8 @@
 Library
   Build-Depends:
                     base < 5 && >= 4
-                    , process
+                    , process >= 1.0
+                    , directory >= 1.1
 
   GHC-Options:      
                     -Wall
diff --git a/src/System/Command.hs b/src/System/Command.hs
--- a/src/System/Command.hs
+++ b/src/System/Command.hs
@@ -42,10 +42,14 @@
 , waitForProcess
 , getProcessExitCode
 , P.terminateProcess
+  -- * Execution combinators
+, inDirectory
+, inDirectory'
 ) where
 
 import qualified System.Exit as E
 import qualified System.Process as P
+import System.Directory
 import Data.Data
 import Data.Monoid
 import Control.Arrow
@@ -317,6 +321,21 @@
 getProcessExitCode =
   (fmap . fmap) fromExitCode . P.getProcessExitCode
 
+inDirectory ::
+  FilePath
+  -> (FilePath -> IO a)
+  -> IO a
+inDirectory d k =
+  do c <- getCurrentDirectory
+     setCurrentDirectory d
+     k c `finally` setCurrentDirectory c
+
+inDirectory' ::
+  FilePath
+  -> IO a
+  -> IO a
+inDirectory' p =
+  inDirectory p . const
 -- not exported
 
 toExitCode ::
