diff --git a/Options.hs b/Options.hs
--- a/Options.hs
+++ b/Options.hs
@@ -7,6 +7,8 @@
 import           Control.Applicative
 import qualified Control.Exception         as E
 import           Control.Monad
+import           Control.Monad.Trans.Except
+import           Control.Monad.Trans.Reader
 import           Data.Char                 (isAlphaNum, isSpace, toLower)
 import           Data.List                 (foldl')
 import           Data.List.Split           (splitOn)
@@ -62,8 +64,6 @@
 --   the map contains the paths with the value that's passed into the reader if the
 --   command line parser gives no result
 injectDefaultP :: M.Map [String] String -> [String] -> Parser a -> Parser a
-injectDefaultP _ _ = id
-{- FIXME Disabled due to changes in optparse-applicative 0.11
 injectDefaultP _env _path n@(NilP{})   = n
 injectDefaultP env path p@(OptP o)
   | (Option (CmdReader cmds f) props) <- o  =
@@ -73,20 +73,21 @@
            in  parseri { infoParser = injectDefaultP env (path ++ [normalizeName cmd]) (infoParser parseri) }
      in  OptP (Option (CmdReader cmds (`M.lookup` cmdMap)) props)
   | (Option (OptReader names (CReader _ rdr) _) _) <- o =
-     p <|> either' (const empty) pure (msum $ map (rdr <=< (maybe (left $ ErrorMsg "Missing environment variable") right . getEnvValue env path)) names)
+     p <|> either (const empty)
+                  pure
+                  (runExcept . msum $
+                    map (maybe (throwE $ ErrorMsg "Missing environment variable")
+                               (runReaderT (unReadM rdr))
+                          . getEnvValue env path)
+                        names)
   | (Option (FlagReader names a) _) <- o =
      p <|> if any ((==Just "1") . getEnvValue env path) names then pure a else empty
   | otherwise = p
-  where
-    right= ReadM . Right
-    left = ReadM . Left
-    either' f g (ReadM x) = either f g x
 injectDefaultP env path (MultP p1 p2) =
    MultP (injectDefaultP env path p1) (injectDefaultP env path p2)
 injectDefaultP env path (AltP p1 p2) =
    AltP (injectDefaultP env path p1) (injectDefaultP env path p2)
 injectDefaultP _env _path b@(BindP {}) = b
--}
 
 getEnvValue :: M.Map [String] String -> [String] -> OptName -> Maybe String
 getEnvValue env path (OptLong l) = M.lookup (path ++ [normalizeName l]) env
diff --git a/hsfiles/mongo.hsfiles b/hsfiles/mongo.hsfiles
--- a/hsfiles/mongo.hsfiles
+++ b/hsfiles/mongo.hsfiles
@@ -279,7 +279,6 @@
 -- https://github.com/yesodweb/yesod/wiki/Sending-email
 
 {-# START_FILE Handler/Home.hs #-}
-{-# LANGUAGE TupleSections, OverloadedStrings #-}
 module Handler.Home where
 
 import Import
@@ -415,6 +414,7 @@
                 NoMonomorphismRestriction
                 DeriveDataTypeable
                 ViewPatterns
+                TupleSections
 
     build-depends: base                          >= 4          && < 5
                  , yesod                         >= 1.4.0      && < 1.5
@@ -461,10 +461,26 @@
 
 test-suite test
     type:              exitcode-stdio-1.0
-    main-is:           main.hs
+    main-is:           Spec.hs
     hs-source-dirs:    test
     ghc-options:       -Wall
 
+    extensions: TemplateHaskell
+                QuasiQuotes
+                OverloadedStrings
+                NoImplicitPrelude
+                CPP
+                MultiParamTypeClasses
+                TypeFamilies
+                GADTs
+                GeneralizedNewtypeDeriving
+                FlexibleContexts
+                EmptyDataDecls
+                NoMonomorphismRestriction
+                DeriveDataTypeable
+                ViewPatterns
+                TupleSections
+
     build-depends: base
                  , PROJECTNAME
                  , yesod-test >= 1.4 && < 1.5
@@ -9002,7 +9018,7 @@
     <form method=post action=@{HomeR}#form enctype=#{formEnctype}>
       ^{formWidget}
       <button .btn .btn-primary type="submit">
-         Send it! <span class="glyphicon glyphicon-upload">
+         Send it! <span class="glyphicon glyphicon-upload"></span>
 
   <li> And last but not least, Testing. In <em>tests/main.hs</em> you will find a #
     test suite that performs tests on this page. #
@@ -9019,17 +9035,16 @@
     color: #990
 }
 
-{-# START_FILE test/HomeTest.hs #-}
-{-# LANGUAGE OverloadedStrings #-}
-module HomeTest
-    ( homeSpecs
+{-# START_FILE test/Handler/HomeSpec.hs #-}
+module Handler.HomeSpec
+    ( spec
     ) where
 
 import TestImport
 import qualified Data.List as L
 
-homeSpecs :: Spec
-homeSpecs =
+spec :: Spec
+spec =
     ydescribe "These are some example tests" $ do
 
         yit "loads the index and checks it looks right" $ do
@@ -9041,11 +9056,11 @@
                 setMethod "POST"
                 setUrl HomeR
                 addNonce
-                fileByLabel "Choose a file" "test/main.hs" "text/plain" -- talk about self-reference
+                fileByLabel "Choose a file" "test/Spec.hs" "text/plain" -- talk about self-reference
                 byLabel "What's on the file?" "Some Content"
 
             statusIs 200
-            printBody
+            -- more debugging printBody
             htmlCount ".message" 1
             htmlAllContain ".message" "Some Content"
             htmlAllContain ".message" "text/plain"
@@ -9059,13 +9074,34 @@
             users <- runDB $ selectList ([] :: [Filter User]) []
             assertEqual "user table empty" 0 $ L.length users
 
+{-# START_FILE test/Spec.hs #-}
+module Main where
+
+import Import
+import Yesod.Default.Config
+import Yesod.Test
+import Test.Hspec (hspec)
+import Application (makeFoundation)
+
+import qualified Handler.HomeSpec
+
+main :: IO ()
+main = do
+    conf <- Yesod.Default.Config.loadConfig $ (configSettings Testing)
+                { csParseExtra = parseExtra
+                }
+    foundation <- makeFoundation conf
+    hspec $ do
+        yesodSpec foundation $ do
+            Handler.HomeSpec.spec
+
 {-# START_FILE test/TestImport.hs #-}
-{-# LANGUAGE OverloadedStrings #-}
 module TestImport
     ( module Yesod.Test
     , module Model
     , module Foundation
     , module Database.Persist
+    , module Prelude
     , runDB
     , Spec
     , Example
@@ -9077,6 +9113,7 @@
 import Control.Monad.Trans.Resource (ResourceT, runResourceT)
 import Control.Monad.Logger (NoLoggingT, runNoLoggingT)
 import Control.Monad.IO.Class (liftIO)
+import Prelude
 
 import Foundation
 import Model
@@ -9088,29 +9125,4 @@
 runDB query = do
     pool <- fmap connPool getTestYesod
     liftIO $ runResourceT $ runNoLoggingT $ runMongoDBPoolDef query pool
-
-{-# START_FILE test/main.hs #-}
-{-# LANGUAGE OverloadedStrings #-}
-{-# LANGUAGE NoMonomorphismRestriction #-}
-{-# OPTIONS_GHC -fno-warn-orphans #-}
-
-module Main where
-
-import Import
-import Yesod.Default.Config
-import Yesod.Test
-import Test.Hspec (hspec)
-import Application (makeFoundation)
-
-import HomeTest
-
-main :: IO ()
-main = do
-    conf <- Yesod.Default.Config.loadConfig $ (configSettings Testing)
-                { csParseExtra = parseExtra
-                }
-    foundation <- makeFoundation conf
-    hspec $ do
-        yesodSpec foundation $ do
-            homeSpecs
 
diff --git a/hsfiles/mysql.hsfiles b/hsfiles/mysql.hsfiles
--- a/hsfiles/mysql.hsfiles
+++ b/hsfiles/mysql.hsfiles
@@ -292,7 +292,6 @@
 -- https://github.com/yesodweb/yesod/wiki/Sending-email
 
 {-# START_FILE Handler/Home.hs #-}
-{-# LANGUAGE TupleSections, OverloadedStrings #-}
 module Handler.Home where
 
 import Import
@@ -425,6 +424,7 @@
                 NoMonomorphismRestriction
                 DeriveDataTypeable
                 ViewPatterns
+                TupleSections
 
     build-depends: base                          >= 4          && < 5
                  , yesod                         >= 1.4.0      && < 1.5
@@ -471,10 +471,26 @@
 
 test-suite test
     type:              exitcode-stdio-1.0
-    main-is:           main.hs
+    main-is:           Spec.hs
     hs-source-dirs:    test
     ghc-options:       -Wall
 
+    extensions: TemplateHaskell
+                QuasiQuotes
+                OverloadedStrings
+                NoImplicitPrelude
+                CPP
+                MultiParamTypeClasses
+                TypeFamilies
+                GADTs
+                GeneralizedNewtypeDeriving
+                FlexibleContexts
+                EmptyDataDecls
+                NoMonomorphismRestriction
+                DeriveDataTypeable
+                ViewPatterns
+                TupleSections
+
     build-depends: base
                  , PROJECTNAME
                  , yesod-test >= 1.4 && < 1.5
@@ -9021,7 +9037,7 @@
     <form method=post action=@{HomeR}#form enctype=#{formEnctype}>
       ^{formWidget}
       <button .btn .btn-primary type="submit">
-         Send it! <span class="glyphicon glyphicon-upload">
+         Send it! <span class="glyphicon glyphicon-upload"></span>
 
   <li> And last but not least, Testing. In <em>tests/main.hs</em> you will find a #
     test suite that performs tests on this page. #
@@ -9038,17 +9054,16 @@
     color: #990
 }
 
-{-# START_FILE test/HomeTest.hs #-}
-{-# LANGUAGE OverloadedStrings #-}
-module HomeTest
-    ( homeSpecs
+{-# START_FILE test/Handler/HomeSpec.hs #-}
+module Handler.HomeSpec
+    ( spec
     ) where
 
 import TestImport
 import qualified Data.List as L
 
-homeSpecs :: Spec
-homeSpecs =
+spec :: Spec
+spec =
     ydescribe "These are some example tests" $ do
 
         yit "loads the index and checks it looks right" $ do
@@ -9060,11 +9075,11 @@
                 setMethod "POST"
                 setUrl HomeR
                 addNonce
-                fileByLabel "Choose a file" "test/main.hs" "text/plain" -- talk about self-reference
+                fileByLabel "Choose a file" "test/Spec.hs" "text/plain" -- talk about self-reference
                 byLabel "What's on the file?" "Some Content"
 
             statusIs 200
-            printBody
+            -- more debugging printBody
             htmlCount ".message" 1
             htmlAllContain ".message" "Some Content"
             htmlAllContain ".message" "text/plain"
@@ -9078,13 +9093,34 @@
             users <- runDB $ selectList ([] :: [Filter User]) []
             assertEqual "user table empty" 0 $ L.length users
 
+{-# START_FILE test/Spec.hs #-}
+module Main where
+
+import Import
+import Yesod.Default.Config
+import Yesod.Test
+import Test.Hspec (hspec)
+import Application (makeFoundation)
+
+import qualified Handler.HomeSpec
+
+main :: IO ()
+main = do
+    conf <- Yesod.Default.Config.loadConfig $ (configSettings Testing)
+                { csParseExtra = parseExtra
+                }
+    foundation <- makeFoundation conf
+    hspec $ do
+        yesodSpec foundation $ do
+            Handler.HomeSpec.spec
+
 {-# START_FILE test/TestImport.hs #-}
-{-# LANGUAGE OverloadedStrings #-}
 module TestImport
     ( module Yesod.Test
     , module Model
     , module Foundation
     , module Database.Persist
+    , module Prelude
     , runDB
     , Spec
     , Example
@@ -9094,6 +9130,7 @@
 import Database.Persist hiding (get)
 import Database.Persist.Sql (SqlPersistM, runSqlPersistMPool)
 import Control.Monad.IO.Class (liftIO)
+import Prelude
 
 import Foundation
 import Model
@@ -9105,29 +9142,4 @@
 runDB query = do
     pool <- fmap connPool getTestYesod
     liftIO $ runSqlPersistMPool query pool
-
-{-# START_FILE test/main.hs #-}
-{-# LANGUAGE OverloadedStrings #-}
-{-# LANGUAGE NoMonomorphismRestriction #-}
-{-# OPTIONS_GHC -fno-warn-orphans #-}
-
-module Main where
-
-import Import
-import Yesod.Default.Config
-import Yesod.Test
-import Test.Hspec (hspec)
-import Application (makeFoundation)
-
-import HomeTest
-
-main :: IO ()
-main = do
-    conf <- Yesod.Default.Config.loadConfig $ (configSettings Testing)
-                { csParseExtra = parseExtra
-                }
-    foundation <- makeFoundation conf
-    hspec $ do
-        yesodSpec foundation $ do
-            homeSpecs
 
diff --git a/hsfiles/postgres-fay.hsfiles b/hsfiles/postgres-fay.hsfiles
--- a/hsfiles/postgres-fay.hsfiles
+++ b/hsfiles/postgres-fay.hsfiles
@@ -322,7 +322,6 @@
       Nothing               -> invalidArgs ["Invalid command"]
 
 {-# START_FILE Handler/Home.hs #-}
-{-# LANGUAGE TupleSections, OverloadedStrings #-}
 module Handler.Home where
 
 import Import
@@ -462,6 +461,7 @@
                 RankNTypes
                 DeriveDataTypeable
                 ViewPatterns
+                TupleSections
 
     build-depends: base                          >= 4          && < 5
                  , yesod                         >= 1.4.0      && < 1.5
@@ -509,10 +509,26 @@
 
 test-suite test
     type:              exitcode-stdio-1.0
-    main-is:           main.hs
+    main-is:           Spec.hs
     hs-source-dirs:    test
     ghc-options:       -Wall
 
+    extensions: TemplateHaskell
+                QuasiQuotes
+                OverloadedStrings
+                NoImplicitPrelude
+                CPP
+                MultiParamTypeClasses
+                TypeFamilies
+                GADTs
+                GeneralizedNewtypeDeriving
+                FlexibleContexts
+                EmptyDataDecls
+                NoMonomorphismRestriction
+                DeriveDataTypeable
+                ViewPatterns
+                TupleSections
+
     build-depends: base
                  , PROJECTNAME
                  , yesod-test >= 1.4 && < 1.5
@@ -9129,7 +9145,7 @@
     <form method=post action=@{HomeR}#form enctype=#{formEnctype}>
       ^{formWidget}
       <button .btn .btn-primary type="submit">
-         Send it! <span class="glyphicon glyphicon-upload">
+         Send it! <span class="glyphicon glyphicon-upload"></span>
 
   <li> And last but not least, Testing. In <em>tests/main.hs</em> you will find a #
     test suite that performs tests on this page. #
@@ -9151,17 +9167,16 @@
     color: #990
 }
 
-{-# START_FILE test/HomeTest.hs #-}
-{-# LANGUAGE OverloadedStrings #-}
-module HomeTest
-    ( homeSpecs
+{-# START_FILE test/Handler/HomeSpec.hs #-}
+module Handler.HomeSpec
+    ( spec
     ) where
 
 import TestImport
 import qualified Data.List as L
 
-homeSpecs :: Spec
-homeSpecs =
+spec :: Spec
+spec =
     ydescribe "These are some example tests" $ do
 
         yit "loads the index and checks it looks right" $ do
@@ -9173,11 +9188,11 @@
                 setMethod "POST"
                 setUrl HomeR
                 addNonce
-                fileByLabel "Choose a file" "test/main.hs" "text/plain" -- talk about self-reference
+                fileByLabel "Choose a file" "test/Spec.hs" "text/plain" -- talk about self-reference
                 byLabel "What's on the file?" "Some Content"
 
             statusIs 200
-            printBody
+            -- more debugging printBody
             htmlCount ".message" 1
             htmlAllContain ".message" "Some Content"
             htmlAllContain ".message" "text/plain"
@@ -9191,13 +9206,34 @@
             users <- runDB $ selectList ([] :: [Filter User]) []
             assertEqual "user table empty" 0 $ L.length users
 
+{-# START_FILE test/Spec.hs #-}
+module Main where
+
+import Import
+import Yesod.Default.Config
+import Yesod.Test
+import Test.Hspec (hspec)
+import Application (makeFoundation)
+
+import qualified Handler.HomeSpec
+
+main :: IO ()
+main = do
+    conf <- Yesod.Default.Config.loadConfig $ (configSettings Testing)
+                { csParseExtra = parseExtra
+                }
+    foundation <- makeFoundation conf
+    hspec $ do
+        yesodSpec foundation $ do
+            Handler.HomeSpec.spec
+
 {-# START_FILE test/TestImport.hs #-}
-{-# LANGUAGE OverloadedStrings #-}
 module TestImport
     ( module Yesod.Test
     , module Model
     , module Foundation
     , module Database.Persist
+    , module Prelude
     , runDB
     , Spec
     , Example
@@ -9207,6 +9243,7 @@
 import Database.Persist hiding (get)
 import Database.Persist.Sql (SqlPersistM, runSqlPersistMPool)
 import Control.Monad.IO.Class (liftIO)
+import Prelude
 
 import Foundation
 import Model
@@ -9218,29 +9255,4 @@
 runDB query = do
     pool <- fmap connPool getTestYesod
     liftIO $ runSqlPersistMPool query pool
-
-{-# START_FILE test/main.hs #-}
-{-# LANGUAGE OverloadedStrings #-}
-{-# LANGUAGE NoMonomorphismRestriction #-}
-{-# OPTIONS_GHC -fno-warn-orphans #-}
-
-module Main where
-
-import Import
-import Yesod.Default.Config
-import Yesod.Test
-import Test.Hspec (hspec)
-import Application (makeFoundation)
-
-import HomeTest
-
-main :: IO ()
-main = do
-    conf <- Yesod.Default.Config.loadConfig $ (configSettings Testing)
-                { csParseExtra = parseExtra
-                }
-    foundation <- makeFoundation conf
-    hspec $ do
-        yesodSpec foundation $ do
-            homeSpecs
 
diff --git a/hsfiles/postgres.hsfiles b/hsfiles/postgres.hsfiles
--- a/hsfiles/postgres.hsfiles
+++ b/hsfiles/postgres.hsfiles
@@ -292,7 +292,6 @@
 -- https://github.com/yesodweb/yesod/wiki/Sending-email
 
 {-# START_FILE Handler/Home.hs #-}
-{-# LANGUAGE TupleSections, OverloadedStrings #-}
 module Handler.Home where
 
 import Import
@@ -425,6 +424,7 @@
                 NoMonomorphismRestriction
                 DeriveDataTypeable
                 ViewPatterns
+                TupleSections
 
     build-depends: base                          >= 4          && < 5
                  , yesod                         >= 1.4.0      && < 1.5
@@ -471,10 +471,26 @@
 
 test-suite test
     type:              exitcode-stdio-1.0
-    main-is:           main.hs
+    main-is:           Spec.hs
     hs-source-dirs:    test
     ghc-options:       -Wall
 
+    extensions: TemplateHaskell
+                QuasiQuotes
+                OverloadedStrings
+                NoImplicitPrelude
+                CPP
+                MultiParamTypeClasses
+                TypeFamilies
+                GADTs
+                GeneralizedNewtypeDeriving
+                FlexibleContexts
+                EmptyDataDecls
+                NoMonomorphismRestriction
+                DeriveDataTypeable
+                ViewPatterns
+                TupleSections
+
     build-depends: base
                  , PROJECTNAME
                  , yesod-test >= 1.4 && < 1.5
@@ -9021,7 +9037,7 @@
     <form method=post action=@{HomeR}#form enctype=#{formEnctype}>
       ^{formWidget}
       <button .btn .btn-primary type="submit">
-         Send it! <span class="glyphicon glyphicon-upload">
+         Send it! <span class="glyphicon glyphicon-upload"></span>
 
   <li> And last but not least, Testing. In <em>tests/main.hs</em> you will find a #
     test suite that performs tests on this page. #
@@ -9038,17 +9054,16 @@
     color: #990
 }
 
-{-# START_FILE test/HomeTest.hs #-}
-{-# LANGUAGE OverloadedStrings #-}
-module HomeTest
-    ( homeSpecs
+{-# START_FILE test/Handler/HomeSpec.hs #-}
+module Handler.HomeSpec
+    ( spec
     ) where
 
 import TestImport
 import qualified Data.List as L
 
-homeSpecs :: Spec
-homeSpecs =
+spec :: Spec
+spec =
     ydescribe "These are some example tests" $ do
 
         yit "loads the index and checks it looks right" $ do
@@ -9060,11 +9075,11 @@
                 setMethod "POST"
                 setUrl HomeR
                 addNonce
-                fileByLabel "Choose a file" "test/main.hs" "text/plain" -- talk about self-reference
+                fileByLabel "Choose a file" "test/Spec.hs" "text/plain" -- talk about self-reference
                 byLabel "What's on the file?" "Some Content"
 
             statusIs 200
-            printBody
+            -- more debugging printBody
             htmlCount ".message" 1
             htmlAllContain ".message" "Some Content"
             htmlAllContain ".message" "text/plain"
@@ -9078,13 +9093,34 @@
             users <- runDB $ selectList ([] :: [Filter User]) []
             assertEqual "user table empty" 0 $ L.length users
 
+{-# START_FILE test/Spec.hs #-}
+module Main where
+
+import Import
+import Yesod.Default.Config
+import Yesod.Test
+import Test.Hspec (hspec)
+import Application (makeFoundation)
+
+import qualified Handler.HomeSpec
+
+main :: IO ()
+main = do
+    conf <- Yesod.Default.Config.loadConfig $ (configSettings Testing)
+                { csParseExtra = parseExtra
+                }
+    foundation <- makeFoundation conf
+    hspec $ do
+        yesodSpec foundation $ do
+            Handler.HomeSpec.spec
+
 {-# START_FILE test/TestImport.hs #-}
-{-# LANGUAGE OverloadedStrings #-}
 module TestImport
     ( module Yesod.Test
     , module Model
     , module Foundation
     , module Database.Persist
+    , module Prelude
     , runDB
     , Spec
     , Example
@@ -9094,6 +9130,7 @@
 import Database.Persist hiding (get)
 import Database.Persist.Sql (SqlPersistM, runSqlPersistMPool)
 import Control.Monad.IO.Class (liftIO)
+import Prelude
 
 import Foundation
 import Model
@@ -9105,29 +9142,4 @@
 runDB query = do
     pool <- fmap connPool getTestYesod
     liftIO $ runSqlPersistMPool query pool
-
-{-# START_FILE test/main.hs #-}
-{-# LANGUAGE OverloadedStrings #-}
-{-# LANGUAGE NoMonomorphismRestriction #-}
-{-# OPTIONS_GHC -fno-warn-orphans #-}
-
-module Main where
-
-import Import
-import Yesod.Default.Config
-import Yesod.Test
-import Test.Hspec (hspec)
-import Application (makeFoundation)
-
-import HomeTest
-
-main :: IO ()
-main = do
-    conf <- Yesod.Default.Config.loadConfig $ (configSettings Testing)
-                { csParseExtra = parseExtra
-                }
-    foundation <- makeFoundation conf
-    hspec $ do
-        yesodSpec foundation $ do
-            homeSpecs
 
diff --git a/hsfiles/simple.hsfiles b/hsfiles/simple.hsfiles
--- a/hsfiles/simple.hsfiles
+++ b/hsfiles/simple.hsfiles
@@ -229,7 +229,6 @@
 -- https://github.com/yesodweb/yesod/wiki/Sending-email
 
 {-# START_FILE Handler/Home.hs #-}
-{-# LANGUAGE TupleSections, OverloadedStrings #-}
 module Handler.Home where
 
 import Import
@@ -344,6 +343,7 @@
                 NoMonomorphismRestriction
                 DeriveDataTypeable
                 ViewPatterns
+                TupleSections
 
     build-depends: base                          >= 4          && < 5
                  , yesod                         >= 1.4.0      && < 1.5
@@ -387,10 +387,26 @@
 
 test-suite test
     type:              exitcode-stdio-1.0
-    main-is:           main.hs
+    main-is:           Spec.hs
     hs-source-dirs:    test
     ghc-options:       -Wall
 
+    extensions: TemplateHaskell
+                QuasiQuotes
+                OverloadedStrings
+                NoImplicitPrelude
+                CPP
+                MultiParamTypeClasses
+                TypeFamilies
+                GADTs
+                GeneralizedNewtypeDeriving
+                FlexibleContexts
+                EmptyDataDecls
+                NoMonomorphismRestriction
+                DeriveDataTypeable
+                ViewPatterns
+                TupleSections
+
     build-depends: base
                  , PROJECTNAME
                  , yesod-test >= 1.4 && < 1.5
@@ -8878,7 +8894,7 @@
     <form method=post action=@{HomeR}#form enctype=#{formEnctype}>
       ^{formWidget}
       <button .btn .btn-primary type="submit">
-         Send it! <span class="glyphicon glyphicon-upload">
+         Send it! <span class="glyphicon glyphicon-upload"></span>
 
   <li> And last but not least, Testing. In <em>tests/main.hs</em> you will find a #
     test suite that performs tests on this page. #
@@ -8895,16 +8911,15 @@
     color: #990
 }
 
-{-# START_FILE test/HomeTest.hs #-}
-{-# LANGUAGE OverloadedStrings #-}
-module HomeTest
-    ( homeSpecs
+{-# START_FILE test/Handler/HomeSpec.hs #-}
+module Handler.HomeSpec
+    ( spec
     ) where
 
 import TestImport
 
-homeSpecs :: Spec
-homeSpecs =
+spec :: Spec
+spec =
     ydescribe "These are some example tests" $ do
 
         yit "loads the index and checks it looks right" $ do
@@ -8916,35 +8931,16 @@
                 setMethod "POST"
                 setUrl HomeR
                 addNonce
-                fileByLabel "Choose a file" "test/main.hs" "text/plain" -- talk about self-reference
+                fileByLabel "Choose a file" "test/Spec.hs" "text/plain" -- talk about self-reference
                 byLabel "What's on the file?" "Some Content"
 
             statusIs 200
-            printBody
+            -- more debugging printBody
             htmlCount ".message" 1
             htmlAllContain ".message" "Some Content"
             htmlAllContain ".message" "text/plain"
 
-{-# START_FILE test/TestImport.hs #-}
-{-# LANGUAGE OverloadedStrings #-}
-module TestImport
-    ( module Yesod.Test
-    , module Foundation
-    , Spec
-    , Example
-    ) where
-
-import Yesod.Test
-import Foundation
-
-type Spec = YesodSpec App
-type Example = YesodExample App
-
-{-# START_FILE test/main.hs #-}
-{-# LANGUAGE OverloadedStrings #-}
-{-# LANGUAGE NoMonomorphismRestriction #-}
-{-# OPTIONS_GHC -fno-warn-orphans #-}
-
+{-# START_FILE test/Spec.hs #-}
 module Main where
 
 import Import
@@ -8953,7 +8949,7 @@
 import Test.Hspec (hspec)
 import Application (makeFoundation)
 
-import HomeTest
+import qualified Handler.HomeSpec
 
 main :: IO ()
 main = do
@@ -8963,5 +8959,21 @@
     foundation <- makeFoundation conf
     hspec $ do
         yesodSpec foundation $ do
-            homeSpecs
+            Handler.HomeSpec.spec
+
+{-# START_FILE test/TestImport.hs #-}
+module TestImport
+    ( module Yesod.Test
+    , module Foundation
+    , module Prelude
+    , Spec
+    , Example
+    ) where
+
+import Yesod.Test
+import Prelude
+import Foundation
+
+type Spec = YesodSpec App
+type Example = YesodExample App
 
diff --git a/hsfiles/sqlite.hsfiles b/hsfiles/sqlite.hsfiles
--- a/hsfiles/sqlite.hsfiles
+++ b/hsfiles/sqlite.hsfiles
@@ -292,7 +292,6 @@
 -- https://github.com/yesodweb/yesod/wiki/Sending-email
 
 {-# START_FILE Handler/Home.hs #-}
-{-# LANGUAGE TupleSections, OverloadedStrings #-}
 module Handler.Home where
 
 import Import
@@ -425,6 +424,7 @@
                 NoMonomorphismRestriction
                 DeriveDataTypeable
                 ViewPatterns
+                TupleSections
 
     build-depends: base                          >= 4          && < 5
                  , yesod                         >= 1.4.0      && < 1.5
@@ -471,10 +471,26 @@
 
 test-suite test
     type:              exitcode-stdio-1.0
-    main-is:           main.hs
+    main-is:           Spec.hs
     hs-source-dirs:    test
     ghc-options:       -Wall
 
+    extensions: TemplateHaskell
+                QuasiQuotes
+                OverloadedStrings
+                NoImplicitPrelude
+                CPP
+                MultiParamTypeClasses
+                TypeFamilies
+                GADTs
+                GeneralizedNewtypeDeriving
+                FlexibleContexts
+                EmptyDataDecls
+                NoMonomorphismRestriction
+                DeriveDataTypeable
+                ViewPatterns
+                TupleSections
+
     build-depends: base
                  , PROJECTNAME
                  , yesod-test >= 1.4 && < 1.5
@@ -9008,7 +9024,7 @@
     <form method=post action=@{HomeR}#form enctype=#{formEnctype}>
       ^{formWidget}
       <button .btn .btn-primary type="submit">
-         Send it! <span class="glyphicon glyphicon-upload">
+         Send it! <span class="glyphicon glyphicon-upload"></span>
 
   <li> And last but not least, Testing. In <em>tests/main.hs</em> you will find a #
     test suite that performs tests on this page. #
@@ -9025,17 +9041,16 @@
     color: #990
 }
 
-{-# START_FILE test/HomeTest.hs #-}
-{-# LANGUAGE OverloadedStrings #-}
-module HomeTest
-    ( homeSpecs
+{-# START_FILE test/Handler/HomeSpec.hs #-}
+module Handler.HomeSpec
+    ( spec
     ) where
 
 import TestImport
 import qualified Data.List as L
 
-homeSpecs :: Spec
-homeSpecs =
+spec :: Spec
+spec =
     ydescribe "These are some example tests" $ do
 
         yit "loads the index and checks it looks right" $ do
@@ -9047,11 +9062,11 @@
                 setMethod "POST"
                 setUrl HomeR
                 addNonce
-                fileByLabel "Choose a file" "test/main.hs" "text/plain" -- talk about self-reference
+                fileByLabel "Choose a file" "test/Spec.hs" "text/plain" -- talk about self-reference
                 byLabel "What's on the file?" "Some Content"
 
             statusIs 200
-            printBody
+            -- more debugging printBody
             htmlCount ".message" 1
             htmlAllContain ".message" "Some Content"
             htmlAllContain ".message" "text/plain"
@@ -9065,13 +9080,34 @@
             users <- runDB $ selectList ([] :: [Filter User]) []
             assertEqual "user table empty" 0 $ L.length users
 
+{-# START_FILE test/Spec.hs #-}
+module Main where
+
+import Import
+import Yesod.Default.Config
+import Yesod.Test
+import Test.Hspec (hspec)
+import Application (makeFoundation)
+
+import qualified Handler.HomeSpec
+
+main :: IO ()
+main = do
+    conf <- Yesod.Default.Config.loadConfig $ (configSettings Testing)
+                { csParseExtra = parseExtra
+                }
+    foundation <- makeFoundation conf
+    hspec $ do
+        yesodSpec foundation $ do
+            Handler.HomeSpec.spec
+
 {-# START_FILE test/TestImport.hs #-}
-{-# LANGUAGE OverloadedStrings #-}
 module TestImport
     ( module Yesod.Test
     , module Model
     , module Foundation
     , module Database.Persist
+    , module Prelude
     , runDB
     , Spec
     , Example
@@ -9081,6 +9117,7 @@
 import Database.Persist hiding (get)
 import Database.Persist.Sql (SqlPersistM, runSqlPersistMPool)
 import Control.Monad.IO.Class (liftIO)
+import Prelude
 
 import Foundation
 import Model
@@ -9092,29 +9129,4 @@
 runDB query = do
     pool <- fmap connPool getTestYesod
     liftIO $ runSqlPersistMPool query pool
-
-{-# START_FILE test/main.hs #-}
-{-# LANGUAGE OverloadedStrings #-}
-{-# LANGUAGE NoMonomorphismRestriction #-}
-{-# OPTIONS_GHC -fno-warn-orphans #-}
-
-module Main where
-
-import Import
-import Yesod.Default.Config
-import Yesod.Test
-import Test.Hspec (hspec)
-import Application (makeFoundation)
-
-import HomeTest
-
-main :: IO ()
-main = do
-    conf <- Yesod.Default.Config.loadConfig $ (configSettings Testing)
-                { csParseExtra = parseExtra
-                }
-    foundation <- makeFoundation conf
-    hspec $ do
-        yesodSpec foundation $ do
-            homeSpecs
 
diff --git a/yesod-bin.cabal b/yesod-bin.cabal
--- a/yesod-bin.cabal
+++ b/yesod-bin.cabal
@@ -1,5 +1,5 @@
 name:            yesod-bin
-version:         1.4.0.5
+version:         1.4.0.6
 license:         MIT
 license-file:    LICENSE
 author:          Michael Snoyman <michael@snoyman.com>
@@ -84,6 +84,7 @@
                      , http-conduit       >= 2.1.4
                      , project-template   >= 0.1.1
                      , transformers
+                     , transformers-compat
                      , warp               >= 1.3.7.5
                      , wai                >= 1.4
                      , wai-extra
