diff --git a/fswatcher.cabal b/fswatcher.cabal
--- a/fswatcher.cabal
+++ b/fswatcher.cabal
@@ -1,8 +1,8 @@
 name:               fswatcher
 category:           Tools
 build-type:         Simple
-version:            0.1
-synopsis:           Watch a file/directory and run a command it is modified
+version:            0.1.2
+synopsis:           Watch a file/directory and run a command when it's modified
 description:        A simple program that watches a file or a directory and
                     runs a given command whenever the file or a file within the
                     directory is changed.
@@ -20,7 +20,7 @@
     build-depends:   base            >= 4 && < 5
                    , unix            >= 2.5
                    , process         >= 1.1
-                   , fsnotify        >= 0.0.4
+                   , fsnotify        >= 0.1
                    , system-filepath >= 0.4
                    , directory       >= 1.2
     ghc-options:     -Wall
diff --git a/fswatcher.hs b/fswatcher.hs
--- a/fswatcher.hs
+++ b/fswatcher.hs
@@ -1,10 +1,11 @@
 import System.IO (hPutStrLn, stderr)
 import System.Posix.Files (getFileStatus, isDirectory)
 import System.Environment (getArgs, getProgName)
-import System.Directory (canonicalizePath)
-import Filesystem.Path (directory)
+import System.Directory (canonicalizePath, getCurrentDirectory)
+import Filesystem.Path ((</>), directory)
 import Data.String (fromString)
-import System.FSNotify (Event (..), WatchManager, startManager, stopManager, watchTree, watchDir)
+import System.FSNotify (Event (..), StopListening, WatchManager, startManager,
+       stopManager, watchTree, watchDir)
 import System.Exit (ExitCode (..), exitSuccess, exitFailure)
 import System.Process (createProcess, proc, waitForProcess)
 import Control.Monad (void, when)
@@ -14,11 +15,11 @@
 
 data FileType = File | Directory deriving Eq
 
--- watches a file or directory and whenever a “modified” event is registered
--- puts a () in the “run” trigger. `tryPutMVar` is used to avoid re-running the
--- command many times if the file/dir is changed > 1 time while the command is
--- running.
-watch :: FileType -> WatchManager -> String -> MVar () -> IO ()
+-- Watches a file or directory and whenever a “modified” event is registered we
+-- put () in the MVar that acts as a run trigger. `tryPutMVar` is used to avoid
+-- re-running the command many times if the file/dir is changed more than once
+-- while the command is already running.
+watch :: FileType -> WatchManager -> String -> MVar () -> IO StopListening
 watch filetype m path trigger =
   let watchFun = case filetype of
                    Directory -> watchTree m (fromString path) (const True)
@@ -36,7 +37,7 @@
   exitCode <- waitForProcess ph
   hPutStrLn stderr $ case exitCode of
                        ExitSuccess   -> "Process completed successfully"
-                       ExitFailure n -> "Process completed with exitcode " ++ show n
+                       ExitFailure n -> "Process returned " ++ show n
   runCmd cmd args trigger
 
 main :: IO ()
@@ -57,18 +58,27 @@
 
   canonicalPath <- canonicalizePath path
 
-  -- check if path is a file or directory
+  -- Check if path is a file or directory.
   s <- getFileStatus canonicalPath
   let filetype = if isDirectory s then Directory else File
 
   runTrigger <- newEmptyMVar
   runThread <- forkIO $ runCmd cmd args runTrigger
-  watch filetype m canonicalPath runTrigger
+  stopWatcher <- watch filetype m canonicalPath runTrigger
+
+  -- Calculate the full path in order to print the "real" file when watching a
+  -- path with one or more symlinks.
+  currDir <- getCurrentDirectory
+  let fullPath = fromString currDir </> fromString path
   putStr $ "Started to watch " ++ path
-  putStrLn $ if canonicalPath == path then "" else " [→ " ++ canonicalPath ++ "]"
+  putStrLn $ if fromString canonicalPath == fullPath
+                then ""
+                else " (→ " ++ canonicalPath ++ ")"
+  putStrLn "Press ^C to stop."
 
   _ <- readMVar interrupted
   putStrLn "\nStopping."
+  stopWatcher
   stopManager m
   killThread runThread
   exitSuccess
