diff --git a/Yesod/Core/Handler.hs b/Yesod/Core/Handler.hs
--- a/Yesod/Core/Handler.hs
+++ b/Yesod/Core/Handler.hs
@@ -694,7 +694,7 @@
 -- is never (realistically) expired.
 neverExpires :: MonadHandler m => m ()
 neverExpires = do
-    setHeader "Expires" "Thu, 31 Dec 2037 23:55:55 GMT"
+    askHandlerEnv >>= liftIO . rheGetMaxExpires >>= setHeader "Expires"
     cacheSeconds oneYear
   where
     oneYear :: Int
diff --git a/Yesod/Core/Internal/Run.hs b/Yesod/Core/Internal/Run.hs
--- a/Yesod/Core/Internal/Run.hs
+++ b/Yesod/Core/Internal/Run.hs
@@ -31,6 +31,7 @@
 import           Data.Text.Encoding           (encodeUtf8)
 import           Data.Text.Encoding           (decodeUtf8With)
 import           Data.Text.Encoding.Error     (lenientDecode)
+import           Data.Time                    (getCurrentTime, addUTCTime)
 import           Language.Haskell.TH.Syntax   (Loc, qLocation)
 import qualified Network.HTTP.Types           as H
 import           Network.Wai
@@ -45,9 +46,11 @@
 import           Yesod.Core.Types
 import           Yesod.Core.Internal.Request  (parseWaiRequest,
                                                tooLargeResponse)
+import           Yesod.Core.Internal.Util     (formatRFC1123)
 import           Yesod.Routes.Class           (Route, renderRoute)
 import Control.DeepSeq (($!!), NFData)
 import Control.Monad (liftM)
+import Control.AutoUpdate (mkAutoUpdate, defaultUpdateSettings, updateAction, updateFreq)
 
 returnDeepSessionMap :: Monad m => SessionMap -> m SessionMap
 #if MIN_VERSION_bytestring(0, 10, 0)
@@ -194,6 +197,7 @@
                -> m (Either ErrorResponse a)
 runFakeHandler fakeSessionMap logger site handler = liftIO $ do
   ret <- I.newIORef (Left $ InternalError "runFakeHandler: no result")
+  getMaxExpires <- getGetMaxExpires
   let handler' = do liftIO . I.writeIORef ret . Right =<< handler
                     return ()
   let yapp = runHandler
@@ -204,6 +208,7 @@
             , rheUpload = fileUpload site
             , rheLog = messageLoggerSource site $ logger site
             , rheOnError = errHandler
+            , rheGetMaxExpires = getMaxExpires
             }
         handler'
       errHandler err req = do
@@ -255,6 +260,7 @@
     let dontSaveSession _ = return []
     (session, saveSession) <- liftIO $ do
         maybe (return (Map.empty, dontSaveSession)) (\sb -> sbLoadSession sb req) yreSessionBackend
+    getMaxExpires <- getGetMaxExpires
     let mkYesodReq = parseWaiRequest req session (isJust yreSessionBackend) mmaxLen
     let yreq =
             case mkYesodReq of
@@ -273,6 +279,7 @@
             , rheUpload = fileUpload yreSite
             , rheLog = log'
             , rheOnError = safeEh log'
+            , rheGetMaxExpires = getMaxExpires
             }
         rhe = rheSafe
             { rheOnError = runHandler rheSafe . errorHandler
@@ -285,6 +292,12 @@
   where
     mmaxLen = maximumContentLength yreSite route
     handler = yesodMiddleware handler'
+
+getGetMaxExpires :: MonadIO m => m (IO Text)
+getGetMaxExpires = liftIO $ mkAutoUpdate defaultUpdateSettings
+  { updateAction = liftM (formatRFC1123 . addUTCTime (60*60*24*365)) getCurrentTime
+  , updateFreq = 60 * 60 * 1000000 -- ^ Update once per hour
+  }
 
 yesodRender :: Yesod y
             => y
diff --git a/Yesod/Core/Types.hs b/Yesod/Core/Types.hs
--- a/Yesod/Core/Types.hs
+++ b/Yesod/Core/Types.hs
@@ -177,6 +177,7 @@
     , rheUpload   :: !(RequestBodyLength -> FileUpload)
     , rheLog      :: !(Loc -> LogSource -> LogLevel -> LogStr -> IO ())
     , rheOnError  :: !(ErrorResponse -> YesodApp)
+    , rheGetMaxExpires :: IO Text
       -- ^ How to respond when an error is thrown internally.
       --
       -- Since 1.2.0
diff --git a/changelog.md b/changelog.md
--- a/changelog.md
+++ b/changelog.md
@@ -1,3 +1,5 @@
+__1.4.4.2__ `neverExpires` uses dates one year in the future (instead of in 2037).
+
 __1.4.4.1__ Improvements to etag/if-none-match support #868 #869
 
 __1.4.4__ Add the `notModified` and `setEtag` functions.
diff --git a/yesod-core.cabal b/yesod-core.cabal
--- a/yesod-core.cabal
+++ b/yesod-core.cabal
@@ -1,5 +1,5 @@
 name:            yesod-core
-version:         1.4.4.1
+version:         1.4.4.2
 license:         MIT
 license-file:    LICENSE
 author:          Michael Snoyman <michael@snoyman.com>
@@ -69,6 +69,7 @@
                    , mwc-random
                    , primitive
                    , word8
+                   , auto-update
 
     exposed-modules: Yesod.Core
                      Yesod.Core.Content
