diff --git a/changelog b/changelog
--- a/changelog
+++ b/changelog
@@ -1,10 +1,14 @@
+0.1.4
+
+* Additional process libraries.
+
 0.1.3
 
-* Improved haddock
+* Improved haddock.
 
 0.1.2
 
-* Fix haddock
+* Fix haddock.
 
 0.1.1
 
diff --git a/src/Sys/CreateProcess.hs b/src/Sys/CreateProcess.hs
--- a/src/Sys/CreateProcess.hs
+++ b/src/Sys/CreateProcess.hs
@@ -28,6 +28,9 @@
 import System.FilePath(FilePath)
 import qualified System.Process as Process
 
+-- | Data type representing a process.
+--
+-- /see 'System.Process.CreateProcess'/.
 data CreateProcess =
   CreateProcess
     CmdSpec
diff --git a/src/Sys/Exit.hs b/src/Sys/Exit.hs
--- a/src/Sys/Exit.hs
+++ b/src/Sys/Exit.hs
@@ -6,9 +6,19 @@
 , exitWithFailure
 , exitWithFailure1
 , exitWithSuccess
+, ExitCodeM
+, exitCodeM
+, createWaitProcessM
+, createMakeWaitProcessM
+, createWaitProcesses
+, createMakeWaitProcesses
+, exit
+, createWaitProcessesExit
+, createMakeWaitProcessesExit
 ) where
 
 import Data.NotZero
+import Data.NotZeroOr
 import qualified System.Exit as Exit
 import Sys.ExitCode
 import Sys.Process as Process
@@ -77,3 +87,60 @@
   IO a
 exitWithSuccess =
   exitWith exitSuccess
+
+type ExitCodeM f =
+  NumberM Int f
+
+exitCodeM ::
+  f (Number Int) 
+  -> ExitCodeM f
+exitCodeM =
+  NotZeroOrT
+
+createWaitProcessM ::
+  CreateProcess 
+  -> ExitCodeM IO
+createWaitProcessM =
+  exitCodeM . createWaitProcess
+
+createMakeWaitProcessM ::
+  CreateProcess 
+  -> ExitCodeM IO
+createMakeWaitProcessM =
+  exitCodeM . createMakeWaitProcess
+
+createWaitProcesses ::
+  Foldable t =>
+  t CreateProcess
+  -> ExitCodeM IO
+createWaitProcesses =
+  mapM_ createWaitProcessM
+
+createMakeWaitProcesses ::
+  Foldable t =>
+  t CreateProcess
+  -> ExitCodeM IO
+createMakeWaitProcesses =
+  mapM_ createMakeWaitProcessM
+
+exit ::
+  ExitCodeM IO
+  -> IO ()
+exit e =
+  let NotZeroOrT x = e
+  in x >>= exitWith
+
+createWaitProcessesExit ::
+  Foldable t =>
+  t CreateProcess
+  -> IO ()
+createWaitProcessesExit =
+  exit . createWaitProcesses
+
+createMakeWaitProcessesExit ::
+  Foldable t =>
+  t CreateProcess
+  -> IO ()
+createMakeWaitProcessesExit =
+  exit . createMakeWaitProcesses
+
diff --git a/src/Sys/Process.hs b/src/Sys/Process.hs
--- a/src/Sys/Process.hs
+++ b/src/Sys/Process.hs
@@ -6,8 +6,12 @@
 -- * Running sub-processes
 , createProcess
 , createProcess_
+, createProcessHandle
+, createWaitProcess
+, createMakeWaitProcess
 , shell
 , proc
+, procIn
 -- ** Simpler functions for common tasks
 , callProcess
 , callCommand
@@ -31,14 +35,17 @@
 ) where
 
 import Control.Category(Category((.)))
-import Control.Lens((#), (%~), (^.), _1)
+import Control.Monad((>=>), mapM_)
+import Control.Lens((#), (%~), (^.), (.~), _1, _4, view)
+import Data.Bool(Bool(True))
 import Data.Functor(Functor(fmap))
-import Data.Maybe(Maybe)
+import Data.Maybe(Maybe(Just))
 import Data.String(String)
 import Sys.CmdSpec as CmdSpec
 import Sys.CreateProcess as CreateProcess
 import Sys.StdStream as StdStream
 import Sys.ExitCode(ExitCode, unExitCode)
+import System.Directory(createDirectoryIfMissing)
 import System.FilePath(FilePath)
 import System.IO(Handle, IO)
 import qualified System.Process as Process
@@ -113,6 +120,25 @@
 createProcess_ s =
   Process.createProcess_ s . (_CreateProcess #)
 
+createProcessHandle ::
+  CreateProcess
+  -> IO Process.ProcessHandle
+createProcessHandle =
+  fmap (view _4) . createProcess
+
+createWaitProcess ::
+  CreateProcess
+  -> IO ExitCode
+createWaitProcess =
+  createProcessHandle >=> waitForProcess
+
+createMakeWaitProcess ::
+  CreateProcess
+  -> IO ExitCode
+createMakeWaitProcess p =
+  do mapM_ (createDirectoryIfMissing True) (p ^. _WorkingDirectory)
+     createWaitProcess p
+
 -- | Construct a 'CreateProcess' record for passing to 'createProcess',
 -- representing a command to be passed to the shell.
 --
@@ -135,6 +161,14 @@
   -> CreateProcess
 proc p s =
   Process.proc p s ^. _CreateProcess
+
+procIn ::
+  FilePath -- ^ the working directory
+  -> FilePath
+  -> [String]
+  -> CreateProcess
+procIn dir p s =
+  (_WorkingDirectory .~ Just dir) (proc p s)
 
 -- | Creates a new process to run the specified command with the given
 -- arguments, and wait for it to finish.  If the command returns a non-zero
diff --git a/sys-process.cabal b/sys-process.cabal
--- a/sys-process.cabal
+++ b/sys-process.cabal
@@ -1,5 +1,5 @@
 name:               sys-process
-version:            0.1.3
+version:            0.1.4
 license:            BSD3
 license-file:       LICENSE
 author:             Tony Morris <ʇǝu˙sıɹɹoɯʇ@ןןǝʞsɐɥ> <dibblego>
@@ -37,8 +37,9 @@
                     , lens          >= 4.0 && < 5
                     , transformers  >= 0.3 && < 0.5
                     , process       >= 1.2.3 && < 1.3
-                    , notzero       >= 0.0.8 && <= 0.1
+                    , notzero       >= 0.0.10 && <= 0.1
                     , filepath      >= 1.4 && < 2.0
+                    , directory     >= 1.2 && < 2.0
 
   ghc-options:
                     -Wall
