diff --git a/Angel/PidFile.hs b/Angel/PidFile.hs
new file mode 100644
--- /dev/null
+++ b/Angel/PidFile.hs
@@ -0,0 +1,52 @@
+module Angel.PidFile ( startMaybeWithPidFile
+                     , startWithPidFile
+                     , clearPIDFile) where
+
+import Control.Applicative ( (<$>)
+                           , (<*>) )
+import Control.Exception.Base ( catch
+                              , finally
+                              , SomeException)
+import Control.Monad (when)
+import System.Process ( CreateProcess
+                      , createProcess
+                      , ProcessHandle )
+
+-- Wish I didn't have to do this :(
+import System.Process.Internals ( PHANDLE
+                                , ProcessHandle__(..)
+                                , withProcessHandle
+                                )
+import System.Posix.Files ( removeLink
+                          , fileExist)
+
+startMaybeWithPidFile :: CreateProcess -> Maybe FilePath -> (ProcessHandle -> IO a) -> IO a
+startMaybeWithPidFile procSpec (Just pidFile) = startWithPidFile procSpec pidFile
+startMaybeWithPidFile procSpec Nothing        = withPHandle procSpec
+
+startWithPidFile :: CreateProcess -> FilePath -> (ProcessHandle -> IO a) -> IO a
+startWithPidFile procSpec pidFile action = do
+  withPHandle procSpec $ \pHandle -> do
+    mPid               <-  getPID pHandle
+    maybe (return ()) write mPid
+    action pHandle `finally` clearPIDFile pidFile
+  where write = writePID pidFile
+
+withPHandle :: CreateProcess -> (ProcessHandle -> IO a) -> IO a
+withPHandle procSpec action = do
+  (_, _, _, pHandle) <- createProcess procSpec
+  action pHandle
+
+writePID :: FilePath -> PHANDLE -> IO ()
+writePID pidFile = writeFile pidFile . show
+
+clearPIDFile :: FilePath -> IO ()
+clearPIDFile pidFile = do ex <- fileExist pidFile
+                          when ex rm
+  where exists = fileExist pidFile
+        rm     = removeLink pidFile
+
+getPID :: ProcessHandle -> IO (Maybe PHANDLE)
+getPID pHandle = withProcessHandle pHandle getPID'
+  where getPID' h @ (OpenHandle t) = return (h, Just t)
+        getPID' h @ (ClosedHandle t) = return (h, Nothing)
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -260,6 +260,10 @@
 
 CHANGELOG
 ---------
+### 0.4.3
+
+* Fix install failure from pidfile module not being accounted for.
+
 ### 0.4.2
 
 * Add `pidfile` option to program spec to specify a pidfile location.
diff --git a/angel.cabal b/angel.cabal
--- a/angel.cabal
+++ b/angel.cabal
@@ -7,7 +7,7 @@
 -- The package version. See the Haskell package versioning policy
 -- (http://www.haskell.org/haskellwiki/Package_versioning_policy) for
 -- standards guiding when and how versions should be incremented.
-Version:             0.4.2
+Version:             0.4.3
 
 -- A short (one-line) description of the package.
 -- Synopsis:            
@@ -89,6 +89,7 @@
                  Angel.Job,
                  Angel.Log,
                  Angel.Util
+                 Angel.PidFile
   
   -- Extra tools (e.g. alex, hsc2hs, ...) needed to build the source.
   -- Build-tools:         
@@ -103,5 +104,16 @@
   Hs-Source-Dirs: ., test
   Build-Depends:  base
   Build-Depends:  hspec
-  Build-depends:  time
+  Build-depends: base >= 4.0 && < 5
+  Build-depends: process >= 1.0 && < 2.0
+  Build-depends: mtl
+  Build-depends: MissingH
+  Build-depends: configurator >= 0.1
+  Build-depends: stm >= 2.0
+  Build-depends: containers >= 0.3
+  Build-depends: unordered-containers >= 0.1.4
+  Build-depends: unix >= 2.4
+  Build-depends: time
+  Build-depends: old-locale
+  Build-depends: text>=0.11
   Extensions: OverloadedStrings,ScopedTypeVariables,BangPatterns,ViewPatterns
