diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,3 +1,9 @@
+# Changelog for yesod-fay
+
+## 0.9.0
+
+* Support for Yesod 1.6 [#20](https://github.com/fpco/yesod-fay/issues/20)
+
 ## 0.8.0
 
 * Drop system-filepath
diff --git a/Yesod/Fay.hs b/Yesod/Fay.hs
--- a/Yesod/Fay.hs
+++ b/Yesod/Fay.hs
@@ -2,6 +2,7 @@
 {-# LANGUAGE ViewPatterns #-}
 {-# LANGUAGE CPP #-}
 {-# LANGUAGE ScopedTypeVariables #-}
+{-# LANGUAGE AllowAmbiguousTypes #-}
 {-# LANGUAGE FlexibleContexts      #-}
 {-# LANGUAGE FlexibleInstances     #-}
 {-# LANGUAGE MultiParamTypeClasses #-}
@@ -86,6 +87,7 @@
 import           Control.Applicative
 import           Data.Aeson                 (decode)
 import qualified Data.ByteString.Lazy       as L
+import qualified Data.ByteString.Lazy.Char8 as LC
 import qualified Data.ByteString.Lazy.UTF8  as BSU
 import           Data.Data                  (Data)
 #if !MIN_VERSION_fay(0,20,0)
@@ -104,7 +106,7 @@
 import           Data.Text.Lazy.Builder     (fromText, toLazyText, Builder)
 import           System.Directory           (createDirectoryIfMissing, doesFileExist)
 import           System.FilePath            (takeDirectory)
-import           Fay                        (getRuntime, showCompileError)
+import           Fay                        (readConfigRuntime, defaultConfig, showCompileError)
 import           Fay.Convert                (showToFay)
 #if MIN_VERSION_fay(0,20,0)
 import           Fay                        (Config(..),
@@ -192,9 +194,9 @@
 -- and produces the expected result.
 type CommandHandler master
     = forall s.
-      (forall a. (Data a) => Returns a -> a -> HandlerT master IO s)
+      (forall a. (Data a) => Returns a -> a -> HandlerFor master s)
    -> Value
-   -> HandlerT master IO s
+   -> HandlerFor master s
 
 -- | A setttings data type for indicating whether the generated Javascript
 -- should contain a copy of the Fay runtime or not.
@@ -225,24 +227,29 @@
     , yfsTypecheckDevel = False
     }
 
+-- | Read runtime from default Fay config.
+getRuntime :: IO L.ByteString
+getRuntime = readConfigRuntime defaultConfig >>= return . LC.pack
+
 updateRuntime :: FilePath -> IO ()
-updateRuntime fp = getRuntime >>= \js -> createDirectoryIfMissing True (takeDirectory fp) >> copyFile js fp
+updateRuntime fp = getRuntime >>= \js ->
+  createDirectoryIfMissing True (takeDirectory fp) >> L.writeFile fp js
 
-instance YesodFay master => YesodSubDispatch FaySite (HandlerT master IO) where
+instance YesodFay master => YesodSubDispatch FaySite master where
     yesodSubDispatch = $(mkYesodSubDispatch resourcesFaySite)
 
 -- | To be used from your routing declarations.
 getFaySite :: a -> FaySite
 getFaySite _ = FaySite
 
-postFayCommandR :: forall master. YesodFay master => HandlerT FaySite (HandlerT master IO) Value
+postFayCommandR :: forall master. YesodFay master => SubHandlerFor FaySite master Value
 postFayCommandR =
-    lift $ runCommandHandler yesodFayCommand
+    liftHandler $ runCommandHandler yesodFayCommand
   where
     -- | Run a command handler. This provides server-side responses to Fay queries.
     runCommandHandler :: YesodFay master
                       => CommandHandler master
-                      -> HandlerT master IO Value
+                      -> HandlerFor master Value
     runCommandHandler f = do
         mtxt <- lookupPostParam "json"
         case mtxt of
@@ -272,10 +279,10 @@
         createDirectoryIfMissing True $ takeDirectory fp
         writeFile fp content
 
-maybeRequireJQuery :: YesodFay master => Bool -> WidgetT master IO ()
+maybeRequireJQuery :: YesodFay master => Bool -> WidgetFor master ()
 maybeRequireJQuery needJQuery = when needJQuery requireJQuery
 
-requireJQuery :: YesodFay master => WidgetT master IO ()
+requireJQuery :: YesodFay master => WidgetFor master ()
 requireJQuery = do
     master <- getYesod
     addScriptEither $ urlJqueryJs master
@@ -294,7 +301,7 @@
     case yfsSeparateRuntime settings of
         Nothing -> [| return () |]
         Just (_, exp') -> do
-            hash <- qRunIO $ getRuntime >>= fmap base64md5 . L.readFile
+            hash <- qRunIO $ getRuntime >>= return . base64md5
             [| addScript ($(return exp') (StaticRoute ["fay-runtime.js"] [(T.pack hash, "")])) |]
 
 -- | A function that takes a String giving the Fay module name, and returns an
diff --git a/yesod-fay.cabal b/yesod-fay.cabal
--- a/yesod-fay.cabal
+++ b/yesod-fay.cabal
@@ -1,5 +1,5 @@
 name:                yesod-fay
-version:             0.8.0
+version:             0.9.0
 synopsis:            Utilities for using the Fay Haskell-to-JS compiler with Yesod.
 description:         For initial discussion, see <http://www.yesodweb.com/blog/2012/10/yesod-fay-js>. This is a work-in-progress.
 homepage:            https://github.com/fpco/yesod-fay
@@ -28,9 +28,9 @@
                      , template-haskell
                      , process
                      , shakespeare
-                     , yesod-core >= 1.4
-                     , yesod-form >= 1.4
-                     , yesod-static >= 1.4
+                     , yesod-core >= 1.6
+                     , yesod-form >= 1.6
+                     , yesod-static >= 1.6
                      , pureMD5 >= 2.1.2.1
                      , utf8-string >= 0.3.7
                      , monad-loops >= 0.3.3.0
