diff --git a/snap-loader-dynamic.cabal b/snap-loader-dynamic.cabal
--- a/snap-loader-dynamic.cabal
+++ b/snap-loader-dynamic.cabal
@@ -1,5 +1,5 @@
 name:           snap-loader-dynamic
-version:        0.9.0.1
+version:        0.10
 synopsis:       Snap: A Haskell Web Framework: dynamic loader
 description:    Snap Framework dynamic loader
 license:        BSD3
@@ -29,19 +29,33 @@
     Snap.Loader.Dynamic.TreeWatcher
 
   build-depends:
-    hint              >= 0.3.3.1 && < 0.4,
-    old-time          >= 1.0     && < 1.2,
     base              >= 4       && < 5,
-    directory         >= 1.0     && < 1.2,
-    directory-tree    >= 0.10    && < 0.11,
+    directory-tree    >= 0.10    && < 0.12,
     mtl               >  2.0     && < 2.2,
-    snap-core         >= 0.9     && < 0.10,
+    snap-core         >= 0.9     && < 0.11,
     time              >= 1.1     && < 1.5,
-    template-haskell  >= 2.2     && < 2.8
+    template-haskell  >= 2.2     && < 2.9
 
+  if impl(ghc >= 7.2.0)
+    build-depends:
+      hint              >= 0.3.3.1 && < 0.4
+  else
+    build-depends:
+      hint              >= 0.3.3.1 && < 0.3.3.5
+
+  if impl(ghc >= 7.6.0)
+    build-depends:
+      directory         >= 1.2     && < 1.3
+  else
+    build-depends:
+      directory         >= 1.0     && < 1.3,
+      old-time          >= 1.0     && < 1.2
+
   if !os(windows)
     build-depends:
-      unix            >= 2.2.0.0 && < 2.6
+      unix            >= 2.2.0.0 && < 2.7
+
+  extensions: CPP
 
   if impl(ghc >= 6.12.0)
     ghc-options: -Wall -fwarn-tabs -funbox-strict-fields -O2
diff --git a/src/Snap/Loader/Dynamic.hs b/src/Snap/Loader/Dynamic.hs
--- a/src/Snap/Loader/Dynamic.hs
+++ b/src/Snap/Loader/Dynamic.hs
@@ -83,7 +83,7 @@
 getHintOpts args = removeBad opts
   where
     --------------------------------------------------------------------------
-    bad       = ["-threaded", "-O", "-main-is", "-o"]
+    bad       = ["-threaded", "-O", "-main-is", "-o", "--make"]
 
     --------------------------------------------------------------------------
     removeBad = filter (\x -> not $ any (`isPrefixOf` x) bad)
diff --git a/src/Snap/Loader/Dynamic/TreeWatcher.hs b/src/Snap/Loader/Dynamic/TreeWatcher.hs
--- a/src/Snap/Loader/Dynamic/TreeWatcher.hs
+++ b/src/Snap/Loader/Dynamic/TreeWatcher.hs
@@ -4,17 +4,30 @@
   , checkTreeStatus
   ) where
 
+#ifndef MIN_VERSION_directory
+#define MIN_VERSION_directory(x,y,z) 1
+#endif
+
 ------------------------------------------------------------------------------
 import Control.Applicative
 import System.Directory
 import System.Directory.Tree
+
+#if MIN_VERSION_directory(1,2,0)
+import Data.Time.Clock
+#else
 import System.Time
+#endif
 
 
 ------------------------------------------------------------------------------
 -- | An opaque representation of the contents and last modification
 -- times of a forest of directory trees.
+#if MIN_VERSION_directory(1,2,0)
+data TreeStatus = TS [FilePath] [AnchoredDirTree UTCTime]
+#else
 data TreeStatus = TS [FilePath] [AnchoredDirTree ClockTime]
+#endif
 
 
 ------------------------------------------------------------------------------
@@ -36,5 +49,9 @@
 -- | This is the core of the functions in this module.  It converts a
 -- list of filepaths into a list of 'AnchoredDirTree' annotated with
 -- the modification times of the files located in those paths.
+#if MIN_VERSION_directory(1,2,0)
+readModificationTimes :: [FilePath] -> IO [AnchoredDirTree UTCTime]
+#else
 readModificationTimes :: [FilePath] -> IO [AnchoredDirTree ClockTime]
+#endif
 readModificationTimes = mapM $ readDirectoryWith getModificationTime
