diff --git a/Yesod/Fay.hs b/Yesod/Fay.hs
--- a/Yesod/Fay.hs
+++ b/Yesod/Fay.hs
@@ -84,7 +84,9 @@
 import qualified Data.ByteString.Lazy       as L
 import qualified Data.ByteString.Lazy.UTF8  as BSU
 import           Data.Data                  (Data)
+#if !MIN_VERSION_fay(0,20,0)
 import           Data.Default               (def)
+#endif
 import           Data.Digest.Pure.MD5       (md5)
 import           Data.List                  (isPrefixOf)
 import           Data.Maybe                 (isNothing)
@@ -98,15 +100,31 @@
 import           Data.Text.Lazy.Builder     (fromText, toLazyText, Builder)
 import           Filesystem                 (createTree, isFile, readTextFile)
 import           Filesystem.Path.CurrentOS  (directory, encodeString, decodeString)
-import           Fay                        (compileFileWithState, CompileState(..), getRuntime,
-                                             showCompileError)
+import           Fay                        (getRuntime, showCompileError)
 import           Fay.Convert                (showToFay)
+#if MIN_VERSION_fay(0,20,0)
+import           Fay                        (Config(..),
+                                             addConfigDirectoryIncludePaths,
+                                             addConfigPackages,
+                                             compileFileWithResult,
+                                             configDirectoryIncludes,
+                                             configTypecheck,
+                                             configExportRuntime,
+                                             configPrettyPrint,
+                                             defaultConfig,
+                                             CompileError)
+import           Fay.Types.CompileResult    (CompileResult (..))
+#else
+import           Fay                        (CompileState(..), compileFileWithState)
+import           Fay.Compiler.Config        (addConfigDirectoryIncludePaths,
+                                             addConfigPackages)
 import           Fay.Types                  (CompileConfig(..),
                                              configDirectoryIncludes,
                                              configTypecheck,
                                              configExportRuntime,
                                              configPrettyPrint,
                                              CompileError)
+#endif
 import           Language.Fay.Yesod         (Returns (Returns))
 import           Language.Haskell.TH.Syntax (Exp (LitE), Lit (StringL),
                                              Q,
@@ -278,7 +296,7 @@
 type FayFile = String -> Q Exp
 
 compileFayFile :: FilePath
-               -> CompileConfig
+               -> Config
                -> IO (Either CompileError String)
 compileFayFile fp conf = do
   result <- getFileCache fp
@@ -286,19 +304,25 @@
     Right cache -> return (Right cache)
     Left refreshTo -> do
       packageConf <- fmap (lookup "HASKELL_PACKAGE_SANDBOX") getEnvironment
-      result <- compileFileWithState conf {
-          configPackageConf = packageConf
-        } fp
+      let conf' = conf { configPackageConf = packageConf }
+#if MIN_VERSION_fay(0,20,0)
+      result <- compileFileWithResult conf' fp
+#else
+      result <- compileFileWithState conf' fp
+#endif
       case result of
         Left e -> return (Left e)
 --NOTE: technically this should be (0,18,0,1), but that's not possible.
+#if MIN_VERSION_fay(0,20,0)
+        Right (CompileResult { resOutput = source', resImported = files }) -> do
+#else
 #if MIN_VERSION_fay(0,18,0)
-        Right (source',_,state) -> do
+        Right (source',_,CompileState { stateImported = files }) -> do
 #else
-        Right (source',state) -> do
+        Right (source',CompileState { stateImported = files }) -> do
 #endif
-          let files = stateImported state
-              source = "\n(function(){\n" ++ source' ++ "\n})();\n"
+#endif
+          let source = "\n(function(){\n" ++ source' ++ "\n})();\n"
               (fp_hi,fp_o) = refreshTo
           writeFile fp_hi (unlines (filter ours (map snd files)))
           writeFile fp_o source
@@ -338,10 +362,9 @@
     let needJQuery = yfsRequireJQuery settings
     qAddDependentFile fp
     qRunIO writeYesodFay
-    eres <- qRunIO $ compileFayFile fp config
-        { configExportRuntime = exportRuntime
-        , configPackages = packages
-        }
+    eres <- qRunIO $ compileFayFile fp
+                   $ addConfigPackages packages
+                   $ config { configExportRuntime = exportRuntime }
     case eres of
         Left e -> throwFayError name e
         Right s -> do
@@ -372,13 +395,13 @@
     packages = yfsPackages settings
     fp = mkfp name
 
-config :: CompileConfig
-config = def {
-      configDirectoryIncludes
-        = (Nothing, "fay")
-        : (Nothing, "fay-shared")
-        : configDirectoryIncludes def
-    }
+config :: Config
+config = addConfigDirectoryIncludePaths ["fay", "fay-shared"]
+#if MIN_VERSION_fay(0,20,0)
+    defaultConfig
+#else
+    def
+#endif
 
 -- | Performs no type checking on the Fay code. Each time the widget is
 -- requested, the Fay code will be compiled from scratch to Javascript.
@@ -387,10 +410,11 @@
     let needJQuery = yfsRequireJQuery settings
     qRunIO writeYesodFay
     [|
-        liftIO (compileFayFile (mkfp name) config
+        liftIO (compileFayFile (mkfp name)
+          $ addConfigPackages packages
+          $ config
                 { configTypecheck = typecheckDevel
                 , configExportRuntime = exportRuntime
-                , configPackages = packages
 #if MIN_VERSION_fay(0, 19, 0)
                 , configSourceMap = True
 #endif
@@ -413,3 +437,7 @@
 throwFayError :: String -> CompileError -> error
 throwFayError name e =
   error $ "Unable to compile Fay module \"" ++ name ++ "\":\n\n" ++ showCompileError e
+
+#if !MIN_VERSION_fay(0,20,0)
+type Config = CompileConfig
+#endif
diff --git a/yesod-fay.cabal b/yesod-fay.cabal
--- a/yesod-fay.cabal
+++ b/yesod-fay.cabal
@@ -2,7 +2,7 @@
 -- documentation, see http://haskell.org/cabal/users-guide/
 
 name:                yesod-fay
-version:             0.5.1
+version:             0.5.2
 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
