diff --git a/follow-file.cabal b/follow-file.cabal
--- a/follow-file.cabal
+++ b/follow-file.cabal
@@ -1,5 +1,5 @@
 Name:                   follow-file
-Version:                0.0.1.1
+Version:                0.0.1.2
 Author:                 Athan Clark <athan.clark@gmail.com>
 Maintainer:             Athan Clark <athan.clark@gmail.com>
 License:                BSD3
@@ -18,10 +18,13 @@
   GHC-Options:          -Wall
   Exposed-Modules:      System.File.Follow
   Build-Depends:        base >= 4.8 && < 5
+                      , attoparsec
+                      , attoparsec-path
                       , bytestring
                       , directory
                       , hinotify
                       , path
+                      , text
                       , unix
                       , utf8-string
                       , vector
diff --git a/src/System/File/Follow.hs b/src/System/File/Follow.hs
--- a/src/System/File/Follow.hs
+++ b/src/System/File/Follow.hs
@@ -11,6 +11,9 @@
 import qualified Data.ByteString.Internal as BS
 import qualified Data.ByteString.UTF8 as BS8
 import qualified Data.Vector as V
+import qualified Data.Text as T
+import Data.Attoparsec.Text (parseOnly, endOfInput)
+import Data.Attoparsec.Path (relFilePath)
 import Control.Monad (when)
 import Control.Exception (bracket)
 import Path (Path, Abs, File, filename, parent, toFilePath, parseRelFile)
@@ -55,12 +58,20 @@
       stop = do
         writeIORef positionRef 0
         f mempty
-  addWatch inotify [Modify, Create, Delete] (toFilePath $ parent file) $ \e -> case e of
-    Created {filePath} | parseRelFile filePath == Just (filename file) -> go
-                       | otherwise -> pure ()
-    Deleted {filePath} | parseRelFile filePath == Just (filename file) -> stop
-                       | otherwise -> pure ()
-    Modified {maybeFilePath} | ( maybeFilePath >>= parseRelFile
-                               ) == Just (filename file) -> go
-                             | otherwise -> pure ()
-    _ -> pure ()
+  addWatch inotify [Modify, Create, Delete] (toFilePath $ parent file) $ \e ->
+    let isFile filePath = parseOnly (relFilePath <* endOfInput) (T.pack filePath) == Right (filename file)
+    in  case e of
+          Created {filePath}  | isFile filePath -> go
+                              | otherwise -> pure ()
+          Deleted {filePath}  | isFile filePath -> stop
+                              | otherwise -> pure ()
+          Modified {maybeFilePath}  | (isFile <$> maybeFilePath) == Just True -> go
+                                    | otherwise -> pure ()
+          MovedIn {filePath}  | isFile filePath -> go
+                              | otherwise -> pure ()
+          MovedOut {filePath}   | isFile filePath -> go
+                                | otherwise -> pure ()
+          DeletedSelf -> error "containing folder deleted"
+          Unmounted -> error "containing folder unmounted"
+          QOverflow -> error "queue overflow"
+          _ -> pure ()
