diff --git a/Cabal.cabal b/Cabal.cabal
--- a/Cabal.cabal
+++ b/Cabal.cabal
@@ -1,6 +1,6 @@
 cabal-version: 3.0
 name:          Cabal
-version:       3.14.0.0
+version:       3.14.1.0
 copyright:     2003-2024, Cabal Development Team (see AUTHORS file)
 license:       BSD-3-Clause
 license-file:  LICENSE
diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,3 +1,6 @@
+# 3.14.1.0 [Hécate](mailto:hecate+github@glitchbra.in) November 2024
+* See https://github.com/haskell/cabal/blob/master/release-notes/Cabal-3.14.1.0.md
+
 # 3.14.0.0 [Hécate](mailto:hecate+github@glitchbra.in) September 2024
 * See https://github.com/haskell/cabal/blob/master/release-notes/Cabal-3.14.0.0.md
 
@@ -5,7 +8,6 @@
 * See https://github.com/haskell/cabal/blob/master/release-notes/Cabal-3.12.1.0.md
 
 # 3.12.0.0 [Francesco Ariis](mailto:fa-ml@ariis.it) May 2024
-# 3.12.0.0 [Francesco Ariis](mailto:fa-ml@ariis.it) March 2024
 * See https://github.com/haskell/cabal/blob/master/release-notes/Cabal-3.12.0.0.md
 
 # 3.10.3.0 [Hécate](mailto:hecate+github@glitchbra.in) January 2024
diff --git a/src/Distribution/Simple.hs b/src/Distribution/Simple.hs
--- a/src/Distribution/Simple.hs
+++ b/src/Distribution/Simple.hs
@@ -1094,6 +1094,7 @@
         defaultRegisterFlags
           { regInPlace = installInPlace flags
           , regPackageDB = installPackageDB flags
+          , registerCommonFlags = installCommonFlags flags
           }
   when (hasLibs pkg_descr) $
     register pkg_descr localbuildinfo registerFlags
diff --git a/src/Distribution/Simple/GHC/Build.hs b/src/Distribution/Simple/GHC/Build.hs
--- a/src/Distribution/Simple/GHC/Build.hs
+++ b/src/Distribution/Simple/GHC/Build.hs
@@ -12,7 +12,7 @@
 import Distribution.Simple.GHC.Build.ExtraSources
 import Distribution.Simple.GHC.Build.Link
 import Distribution.Simple.GHC.Build.Modules
-import Distribution.Simple.GHC.Build.Utils (isHaskell)
+import Distribution.Simple.GHC.Build.Utils (compilerBuildWay, isHaskell, withDynFLib)
 import Distribution.Simple.LocalBuildInfo
 import Distribution.Simple.Program.Builtin (ghcProgram)
 import Distribution.Simple.Program.Db (requireProgram)
@@ -73,6 +73,7 @@
     verbosity = buildVerbosity pbci
     isLib = buildIsLib pbci
     lbi = localBuildInfo pbci
+    bi = buildBI pbci
     clbi = buildCLBI pbci
     isIndef = componentIsIndefinite clbi
     mbWorkDir = mbWorkDirLBI lbi
@@ -111,9 +112,25 @@
 
   (ghcProg, _) <- liftIO $ requireProgram verbosity ghcProgram (withPrograms lbi)
 
-  let wantedWays@(wantedLibWays, _, wantedExeWay) = buildWays lbi
+  -- Ways which are wanted from configuration flags
+  let wantedWays@(wantedLibWays, wantedFLibWay, wantedExeWay) = buildWays lbi
 
-  liftIO $ info verbosity ("Wanted build ways(" ++ show isLib ++ "): " ++ show (if isLib then wantedLibWays isIndef else [wantedExeWay]))
+  -- Ways which are needed due to the compiler configuration
+  let doingTH = usesTemplateHaskellOrQQ bi
+      defaultGhcWay = compilerBuildWay (buildCompiler pbci)
+      wantedModBuildWays = case buildComponent pbci of
+        CLib _ -> wantedLibWays isIndef
+        CFLib fl -> [wantedFLibWay (withDynFLib fl)]
+        CExe _ -> [wantedExeWay]
+        CTest _ -> [wantedExeWay]
+        CBench _ -> [wantedExeWay]
+      finalModBuildWays =
+        wantedModBuildWays
+          ++ [defaultGhcWay | doingTH && defaultGhcWay `notElem` wantedModBuildWays]
+      compNameStr = showComponentName $ componentName $ buildComponent pbci
+
+  liftIO $ info verbosity ("Wanted module build ways(" ++ compNameStr ++ "): " ++ show wantedModBuildWays)
+  liftIO $ info verbosity ("Final module build ways(" ++ compNameStr ++ "): " ++ show finalModBuildWays)
   -- We need a separate build and link phase, and C sources must be compiled
   -- after Haskell modules, because C sources may depend on stub headers
   -- generated from compiling Haskell modules (#842, #3294).
@@ -127,7 +144,7 @@
             | otherwise ->
                 (Nothing, Just mainFile)
           Nothing -> (Nothing, Nothing)
-  buildOpts <- buildHaskellModules numJobs ghcProg hsMainFile inputModules buildTargetDir (wantedLibWays isIndef) pbci
+  buildOpts <- buildHaskellModules numJobs ghcProg hsMainFile inputModules buildTargetDir finalModBuildWays pbci
   extraSources <- buildAllExtraSources nonHsMainFile ghcProg buildTargetDir wantedWays pbci
   linkOrLoadComponent
     ghcProg
diff --git a/src/Distribution/Simple/GHC/Build/Link.hs b/src/Distribution/Simple/GHC/Build/Link.hs
--- a/src/Distribution/Simple/GHC/Build/Link.hs
+++ b/src/Distribution/Simple/GHC/Build/Link.hs
@@ -735,7 +735,9 @@
         Flag out_dir -> do
           let uid = componentUnitId clbi
               this_unit = prettyShow uid
-              reexported_modules = [mn | LibComponentLocalBuildInfo{} <- [clbi], IPI.ExposedModule mn (Just{}) <- componentExposedModules clbi]
+              reexported_modules =
+                [ mn | LibComponentLocalBuildInfo{componentExposedModules = exposed_mods} <- [clbi], IPI.ExposedModule mn (Just{}) <- exposed_mods
+                ]
               hidden_modules = otherModules bi
               extra_opts =
                 concat $
diff --git a/src/Distribution/Simple/Program/GHC.hs b/src/Distribution/Simple/Program/GHC.hs
--- a/src/Distribution/Simple/Program/GHC.hs
+++ b/src/Distribution/Simple/Program/GHC.hs
@@ -329,6 +329,7 @@
           ]
         , from [8, 2] ["-fmax-uncovered-patterns", "-fmax-errors"]
         , from [8, 4] $ to [8, 6] ["-fmax-valid-substitutions"]
+        , from [9, 12] ["-fmax-forced-spec-args", "-fwrite-if-compression"]
         ]
 
     dropIntFlag :: Bool -> String -> String -> Any
