diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,3 +1,7 @@
+## 1.4.3
+
+* Update fsnotify dependency version and remove system-filepath.
+
 ## 1.4.2.1
 
 Bug fix: Change default connection time bound from 5 sec to 5 minutes [#107](https://github.com/snoyberg/keter/pull/107)
diff --git a/Keter/Main.hs b/Keter/Main.hs
--- a/Keter/Main.hs
+++ b/Keter/Main.hs
@@ -37,17 +37,20 @@
 import qualified Data.Text.Read
 import           Data.Time                 (getCurrentTime)
 import           Data.Yaml.FilePath
-import           System.Directory          (createDirectoryIfMissing, doesFileExist, createDirectoryIfMissing, getDirectoryContents, doesDirectoryExist)
-import           System.FilePath           (takeExtension, (</>))
 import qualified Network.HTTP.Conduit      as HTTP (conduitManagerSettings,
                                                     newManager)
 import           Prelude                   hiding (FilePath, log)
+import           System.Directory          (createDirectoryIfMissing,
+                                            createDirectoryIfMissing,
+                                            doesDirectoryExist, doesFileExist,
+                                            getDirectoryContents)
+import           System.FilePath           (takeExtension, (</>))
 import qualified System.FSNotify           as FSN
 import           System.Posix.User         (getUserEntryForID,
                                             getUserEntryForName, userGroupID,
                                             userID, userName)
-import Filesystem.Path.CurrentOS (encodeString) -- needed for fsnotify
 
+
 keter :: FilePath -- ^ root directory or config file
       -> [FilePath -> IO Plugin]
       -> IO ()
@@ -149,18 +152,17 @@
     -- File system watching
     wm <- FSN.startManager
     _ <- FSN.watchTree wm (fromString incoming) (const True) $ \e -> do
-        e' <- do
-            let toString = encodeString
+        e' <-
             case e of
                 FSN.Removed fp _ -> do
-                    log $ WatchedFile "removed" $ toString fp
-                    return $ Left $ toString fp
+                    log $ WatchedFile "removed" fp
+                    return $ Left fp
                 FSN.Added fp _ -> do
-                    log $ WatchedFile "added" $ toString fp
-                    return $ Right $ toString fp
+                    log $ WatchedFile "added" fp
+                    return $ Right fp
                 FSN.Modified fp _ -> do
-                    log $ WatchedFile "modified" $ toString fp
-                    return $ Right $ toString fp
+                    log $ WatchedFile "modified" fp
+                    return $ Right fp
         case e' of
             Left fp -> when (isKeter fp) $ AppMan.terminateApp appMan $ getAppname fp
             Right fp -> when (isKeter fp) $ AppMan.addApp appMan $ incoming </> fp
diff --git a/Keter/Types/Common.hs b/Keter/Types/Common.hs
--- a/Keter/Types/Common.hs
+++ b/Keter/Types/Common.hs
@@ -117,7 +117,7 @@
         ]
     show SanityChecksPassed = "Sanity checks passed"
     show (ReservingHosts app hosts) = "Reserving hosts for app " ++ show app ++ ": " ++ unwords (map (unpack . original) $ Set.toList hosts)
-    show (ForgetingReservations app hosts) = "Forgeting host reservations for app " ++ show app ++ ": " ++ unwords (map (unpack . original) $ Set.toList hosts)
+    show (ForgetingReservations app hosts) = "Forgetting host reservations for app " ++ show app ++ ": " ++ unwords (map (unpack . original) $ Set.toList hosts)
     show (ActivatingApp app hosts) = "Activating app " ++ show app ++ " with hosts: " ++ unwords (map (unpack . original) $ Set.toList hosts)
     show (DeactivatingApp app hosts) = "Deactivating app " ++ show app ++ " with hosts: " ++ unwords (map (unpack . original) $ Set.toList hosts)
     show (ReactivatingApp app old new) = concat
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -90,7 +90,9 @@
 stop on runlevel [016]
 respawn
 
-console none
+# NB: keter writes logs to /opt/keter/log, but some exceptions occasionally
+# escape to standard error. This ensures they show up in system logs.
+console output
 
 exec /opt/keter/bin/keter /opt/keter/etc/keter-config.yaml
 ```
diff --git a/keter.cabal b/keter.cabal
--- a/keter.cabal
+++ b/keter.cabal
@@ -1,5 +1,5 @@
 Name:                keter
-Version:             1.4.2.1
+Version:             1.4.3
 Synopsis:            Web application deployment manager, focusing on Haskell web frameworks
 Description:         Hackage documentation generation is not reliable. For up to date documentation, please see: <http://www.stackage.org/package/keter>.
 Homepage:            http://www.yesodweb.com/
@@ -34,7 +34,7 @@
                      , blaze-builder             >= 0.3           && < 0.5
                      , yaml                      >= 0.8.4         && < 0.9
                      , unix-compat               >= 0.3           && < 0.5
-                     , fsnotify                  >= 0.0.11
+                     , fsnotify                  >= 0.2.0.2
                      , conduit                   >= 1.1
                      , conduit-extra             >= 1.1
                      , http-reverse-proxy        >= 0.4.2         && < 0.5
@@ -58,7 +58,6 @@
                      , stm                       >= 2.4
                      , async
                      , lifted-base
-                     , system-filepath
   if impl(ghc < 7.6)
     build-depends:
                     ghc-prim
