diff --git a/resources/devel.cfg b/resources/devel.cfg
--- a/resources/devel.cfg
+++ b/resources/devel.cfg
@@ -18,3 +18,8 @@
 # snaplets/fay/src will always be checked for imports.
 # Default is "" meaning no additional directories will be checked.
 includeDirs = ""
+# A comma separated list of Fay package names.
+# This gives the same result as using includeDirs,
+# except Fay figures out the paths for you.
+# Default is "" meaning no other Fay packages will be used.
+packages = ""
diff --git a/snaplet-fay.cabal b/snaplet-fay.cabal
--- a/snaplet-fay.cabal
+++ b/snaplet-fay.cabal
@@ -5,7 +5,7 @@
 -- PVP summary:      +-+------- breaking API changes
 --                   | | +----- non-breaking API additions
 --                   | | | +--- code changes with no API change
-version:             0.3.0.1
+version:             0.3.1.0
 synopsis:            Fay integration for Snap with request- and pre-compilation.
 description:         Fay integration for Snap with request based compilation during development and precompilation in production.
                      For more information, please see <https://github.com/faylang/snaplet-fay>.
@@ -39,15 +39,15 @@
     Snap.Snaplet.Fay.Internal, Paths_snaplet_fay
 
   build-depends:
-    aeson        == 0.6.*,
-    base         == 4.5.*,
-    bytestring   == 0.9.*,
-    configurator == 0.2.*,
-    data-default >= 0.4,
-    directory    == 1.1.*,
-    fay          >= 0.11,
-    filepath     == 1.3.*,
-    mtl          == 2.1.*,
-    snap         >= 0.9 && < 0.11,
-    snap-core    == 0.9.*,
-    transformers == 0.3.*
+      base         == 4.*
+    , aeson        >= 0.6
+    , bytestring   >= 0.9
+    , configurator >= 0.2
+    , data-default >= 0.5
+    , directory    >= 1.1
+    , fay          >= 0.14.1
+    , filepath     >= 1.3
+    , mtl          >= 2.1
+    , snap         >= 0.11.1
+    , snap-core    >= 0.9.3.1
+    , transformers >= 0.3
diff --git a/src/Snap/Snaplet/Fay.hs b/src/Snap/Snaplet/Fay.hs
--- a/src/Snap/Snaplet/Fay.hs
+++ b/src/Snap/Snaplet/Fay.hs
@@ -25,7 +25,7 @@
 import           Data.List
 import           Data.Maybe
 import           Data.String
-import           Language.Fay.Convert
+import           Fay.Convert
 import           Snap.Core
 import           Snap.Snaplet
 import           Snap.Util.FileServe
@@ -51,11 +51,20 @@
     includeDirs      <- logErr "Must specify includeDirs" $ C.lookup config "includeDirs"
     let inc = maybe [] (split ',') includeDirs
     inc' <- liftIO $ mapM canonicalizePath inc
-    return (verbose, compileMode, prettyPrint, inc')
+    packages         <- logErr "Must specify packages" $ C.lookup config "packages"
+    let packs = maybe [] (split ',') packages
+    return (verbose, compileMode, prettyPrint, inc', packs)
 
   let fay = case opts of
-              (Just verbose, Just compileMode, Just prettyPrint, includeDirs) ->
-                Fay fp verbose compileMode prettyPrint (fp : includeDirs)
+              (Just verbose, Just compileMode, Just prettyPrint, includeDirs, packages) ->
+                Fay
+                  { snapletFilePath = fp
+                  , verbose         = verbose
+                  , compileMode     = compileMode
+                  , prettyPrint     = prettyPrint
+                  , _includeDirs    = fp : includeDirs
+                  , packages        = packages
+                  }
               _ -> error $ intercalate "\n" errs
 
   -- Make sure snaplet/fay, snaplet/fay/src, snaplet/fay/js are present.
diff --git a/src/Snap/Snaplet/Fay/Internal.hs b/src/Snap/Snaplet/Fay/Internal.hs
--- a/src/Snap/Snaplet/Fay/Internal.hs
+++ b/src/Snap/Snaplet/Fay/Internal.hs
@@ -4,8 +4,11 @@
 
 import           Control.Applicative
 import           Control.Monad
+import qualified Data.Aeson as A
+import qualified Data.ByteString.Lazy.Char8 as C
 import           Data.Default
-import qualified Language.Fay        as F
+import qualified Fay as F
+import qualified Fay.Compiler.Config as F
 import           System.Directory
 import           System.FilePath
 
@@ -13,11 +16,12 @@
 -- | Configuration
 data Fay = Fay {
     snapletFilePath :: FilePath
-  , verbose :: Bool
-  , compileMode :: CompileMode
-  , prettyPrint :: Bool
-  , _includeDirs :: [FilePath]
-  }
+  , verbose         :: Bool
+  , compileMode     :: CompileMode
+  , prettyPrint     :: Bool
+  , _includeDirs    :: [FilePath]
+  , packages        :: [String]
+  } deriving (Show)
 
 -- | Location of .hs files
 srcDir :: Fay -> FilePath
@@ -33,7 +37,7 @@
 
 -- | Compile on every request or when Snap starts.
 data CompileMode = Development | Production
-                 deriving Eq
+  deriving (Eq, Show)
 
 -- | Used by callers of compileFile to get the status of compilation.
 data CompileResult = Success String | NotFound | Error String
@@ -48,8 +52,19 @@
       putStrLn $ "snaplet-fay: Could not find: " ++ hsRelativePath f
       return NotFound
     else do
-      res <- F.compileFile (F.addConfigDirectoryIncludes (includeDirs config) 
-                            def { F.configPrettyPrint = prettyPrint config }) f
+      print config
+      putStrLn ""
+      let cfg' = F.addConfigPackages (packages config) $ F.addConfigDirectoryIncludePaths (includeDirs config) $ def { F.configPrettyPrint = prettyPrint config }
+      print cfg'
+      putStrLn ""
+      f' <- canonicalizePath f
+      print f'
+      putStrLn ""
+      res <- flip F.compileFile f' $ F.addConfigPackages (packages config) $
+                                      F.addConfigDirectoryIncludePaths (includeDirs config) $
+                                        def { F.configPrettyPrint = prettyPrint config
+                                            , F.configFilePath = Just f'
+                                            }
       case res of
         Right out -> do
           verbosePut config $ "Compiled " ++ hsRelativePath f
@@ -58,7 +73,9 @@
         Left err -> do
           let errString = "snaplet-fay: Error compiling " ++ hsRelativePath f ++ ":\n" ++ show err
           putStrLn errString
-          return $ Error errString
+          -- return Success so the browser will treat this as a normal JavaScript file.
+          -- As of writing this, this means that Error is not used.
+          return $ Success $ "console.error('" ++ (C.unpack . A.encode) errString ++ "');"
 
 -- | Checks the specified source folder and compiles all new and modified scripts.
 -- Also removes any js files whose Fay source has been deleted.
@@ -77,9 +94,6 @@
   forM_ oldFiles $ \f -> do
     removeFile f
     verbosePut config $ "Removed orphaned " ++ jsRelativePath f
-
-  where
-    -- Convert back and forth between the filepaths of hs and js files.
 
 
 -- | Helpers
