diff --git a/COPYING b/COPYING
--- a/COPYING
+++ b/COPYING
@@ -1,7 +1,7 @@
                     GNU GENERAL PUBLIC LICENSE
                        Version 3, 29 June 2007
 
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
  Everyone is permitted to copy and distribute verbatim copies
  of this license document, but changing it is not allowed.
 
@@ -645,7 +645,7 @@
     GNU General Public License for more details.
 
     You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+    along with this program.  If not, see <https://www.gnu.org/licenses/>.
 
 Also add information on how to contact you by electronic and paper mail.
 
@@ -664,11 +664,11 @@
   You should also get your employer (if you work as a programmer) or school,
 if any, to sign a "copyright disclaimer" for the program, if necessary.
 For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
+<https://www.gnu.org/licenses/>.
 
   The GNU General Public License does not permit incorporating your program
 into proprietary programs.  If your program is a subroutine library, you
 may consider it more useful to permit linking proprietary applications with
 the library.  If this is what you want to do, use the GNU Lesser General
 Public License instead of this License.  But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
+<https://www.gnu.org/licenses/why-not-lgpl.html>.
diff --git a/ChangeLog b/ChangeLog
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,17 @@
+# 2.1.2 (2023-07-27)
+- PackageUtils checkForPkgCabalFile: check within BUILD dir
+- PackageUtils patchSpec: drop problem code for showing patch -.rej
+- Stackage: bump default to lts-21
+- allow Cabal-3.10
+- https for COPYING urls
+- spec: add %autopatch if Patch's and no %patch
+- spec: exclude missing deps from missing testsuite deps
+- spec: revert from %autosetup to %setup
+- spec: standalone should not use prof
+- update: --old-stream option for subpackages
+- update: invert gitBool check for local changes
+- update: use wasrevised to control revision of old reference spec
+
 # 2.1.1 (2023-03-27)
 - spec: use %autosetup
 - PackageUtils patchSpec: adding newline to stdin hangs patch
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -9,30 +9,20 @@
 cabal-rpm is a tool for RPM packaging of Haskell Cabal-based packages.
 Firstly it creates RPM spec files from the .cabal files of Haskell packages.
 It can also install build dependencies using dnf/yum, it prefers package
-versions from Stackage, and can build and install packages and their dependencies
-recursively as rpm packages. It can also update packages and refresh spec files.
+versions from Stackage, and can build and install packages and
+their dependencies recursively as rpm packages. It can also update packages
+and refresh spec files.
 
 Cabal-rpm was originally created by Bryan O'Sullivan (see README.orig)
-to create spec files, and was later updated by Jens Petersen to work with current
-Cabal and Fedora Packaging Guidelines replacing cabal2spec, and extended with
-many new features.  It is used by Fedora and earlier by OpenSuSE. It is licensed
-under the terms of the GPL version 3 (see the COPYING file).
+to create spec files, and was later updated by Jens Petersen to work with
+current Cabal and Fedora Packaging Guidelines replacing cabal2spec,
+and extended with many new features.
+It is used by Fedora and earlier by OpenSuSE.
+It is licensed under the terms of the GPL version 3 (see the COPYING file).
 
 ## Requirements
 cabal-rpm assumes you are using ghc-rpm-macros for Haskell RPM packaging.
-It currently needs Cabal 1.10 or later to build (ie ghc 7 or later).
 
-## Installation
-The package is on Hackage. If you have cabal-install (part of Haskell Platform)
-you can install simply with
-
-    $ cabal install cabal-rpm
-
-You can also install it with `stack install cabal-rpm`.
-
-You can also build and install it from source as normal by running
-`cabal install`.
-
 ## Usage
 To create a `.spec` file for a package:
 
@@ -78,9 +68,53 @@
 There are more commands: prep, builddep, depends, requires, missingdeps.
 See the manpage or help output for more details.
 
+## Help output
+```shellsession
+$ cabal-rpm --version
+2.1.2
+$ cabal-rpm --help
+Cabal-rpm tool
+
+Usage: cabal-rpm [--version] COMMAND
+
+  RPM package tool for Haskell Stackage/Hackage packages
+
+Available options:
+  -h,--help                Show this help text
+  --version                Show version
+
+Available commands:
+  spec                     Generate a spec file
+  srpm                     Generate an srpm
+  prep                     Unpack source
+  local                    Build rpm package locally
+  build                    Alias for 'local' - builds rpm locally
+  builddep                 Install build dependencies with dnf
+  install                  Build and install recursively
+  diff                     Diff with pristine generated spec file
+  depends                  List Haskell dependencies
+  requires                 List buildrequires for package
+  missingdeps              List dependencies not available
+  refresh                  Refresh spec file to latest packaging
+  update                   Update package to latest version
+```
+
+## Installation
+cabal-rpm is packaged in Fedora and EPEL.
+
+It currently needs at least ghc 8 or newer and Cabal 1.10 or later to build.
+
+The package is on Hackage. If you have cabal-install you can install simply with
+
+    $ cabal install cabal-rpm
+
+You can also install it with `stack install cabal-rpm`.
+
+You can also build and install it from source as normal by running
+`cabal install`.
+
 ## Development
 The latest source code is available from: https://github.com/juhp/cabal-rpm
 
-## Plans
 More features are planned and patches welcome.
 See the [TODO](TODO) file for more details.
diff --git a/TODO b/TODO
--- a/TODO
+++ b/TODO
@@ -2,6 +2,8 @@
 - 'install' in a source dir: "package not found for directory"
   - maybe just run "cabal install" for executable?
 
+- subpackage data files(?): eg criterion
+
 - cblrpm local: Running repoquery for haskell-gi-overloading
 Unavailable dependencies: haskell-gi-overloading
 
diff --git a/cabal-rpm.cabal b/cabal-rpm.cabal
--- a/cabal-rpm.cabal
+++ b/cabal-rpm.cabal
@@ -1,5 +1,6 @@
+Cabal-version:       1.18
 Name:                cabal-rpm
-Version:             2.1.1
+Version:             2.1.2
 Synopsis:            RPM packaging tool for Haskell Cabal-based packages
 Description:
     This package provides a RPM packaging tool for Haskell Cabal-based packages.
@@ -10,8 +11,8 @@
     missing dependencies. The diff command compares the current spec file with
     a freshly generated one, the update command updates the spec file to latest
     version from Stackage or Hackage, and the refresh command updates the spec
-    file to the current cabal-rpm packaging. It also handles Hackage revisions of
-    packages. Standalone packages can also be made, built with cabal-install.
+    file to the current cabal-rpm packaging. It also handles Hackage revisions
+    of packages. Standalone packages can also be made, built with cabal-install.
 Homepage:            https://github.com/juhp/cabal-rpm
 Bug-reports:         https://github.com/juhp/cabal-rpm/issues
 License:             GPL-3
@@ -25,10 +26,9 @@
 Build-type:          Simple
 Extra-doc-files:     ChangeLog README.md TODO
 Extra-source-files:  man/cabal-rpm.1.md
-Cabal-version:       1.18
 Tested-with:         GHC == 8.0.2, GHC == 8.2.2, GHC == 8.4.4,
                      GHC == 8.6.5, GHC == 8.8.4, GHC == 8.10.7,
-                     GHC == 9.0.2, GHC == 9.2.5
+                     GHC == 9.0.2, GHC == 9.2.8, GHC == 9.4.5
 
 source-repository head
   type:     git
@@ -45,7 +45,7 @@
 Executable cabal-rpm
     Main-is:            Main.hs
     Build-depends: base < 5,
-                   Cabal > 1.10 && < 3.9,
+                   Cabal > 1.10 && < 3.11,
                    directory,
                    extra,
                    filepath >= 1.4,
diff --git a/src/Commands/Diff.hs b/src/Commands/Diff.hs
--- a/src/Commands/Diff.hs
+++ b/src/Commands/Diff.hs
@@ -42,7 +42,7 @@
     Just spec -> do
       subpkg <- grep_ "%{subpkgs}" spec
       withTempDir $ \tmpdir -> do
-        speccblrpm <- createSpecFile False silent flags False False pkgtype (if subpkg then Just Nothing else Nothing) Nothing (Just tmpdir) mpvs
+        speccblrpm <- createSpecFile False silent flags False False False pkgtype (if subpkg then Just Nothing else Nothing) Nothing (Just tmpdir) mpvs
         currel <- getSpecField "Release" spec
         let suffix = "%{?dist}"
         editSpecField "Release" (currel ++ suffix) speccblrpm
diff --git a/src/Commands/Refresh.hs b/src/Commands/Refresh.hs
--- a/src/Commands/Refresh.hs
+++ b/src/Commands/Refresh.hs
@@ -60,7 +60,7 @@
                   _ -> pkgtype
           subpkg <- grep_ "%{subpkgs}" spec
           oldspec <- createOldSpec subpkg cblrpmver spec
-          newspec <- createSpecFile False silent [] False False spectype (if subpkg then Just Nothing else Nothing) Nothing Nothing mpvs
+          newspec <- createSpecFile False silent [] False False False spectype (if subpkg then Just Nothing else Nothing) Nothing Nothing mpvs
           patchSpec dryrun Nothing oldspec newspec
 --          setCurrentDirectory cwd
 --          when rwGit $
diff --git a/src/Commands/RpmBuild.hs b/src/Commands/RpmBuild.hs
--- a/src/Commands/RpmBuild.hs
+++ b/src/Commands/RpmBuild.hs
@@ -41,7 +41,7 @@
     void $ pkgInstallMissing' pkgdata
   let pkgDesc = packageDesc pkgdata
       mspec = specFilename pkgdata
-  specFile <- maybe (createSpecFile False normal flags False False pkgtype (if subpackage then Just Nothing else Nothing) Nothing Nothing mpvs)
+  specFile <- maybe (createSpecFile False normal flags False False False pkgtype (if subpackage then Just Nothing else Nothing) Nothing Nothing mpvs)
               (\ s -> putStrLn ("Using existing" +-+ s) >> return s)
               mspec
   let pkgid = package pkgDesc
diff --git a/src/Commands/Spec.hs b/src/Commands/Spec.hs
--- a/src/Commands/Spec.hs
+++ b/src/Commands/Spec.hs
@@ -32,7 +32,7 @@
                     , showVersion
 #endif
                    )
-import SimpleCmd ((+-+), cmd, cmdMaybe, grep, grep_, removePrefix)
+import SimpleCmd ((+-+), cmd, cmdLines, cmdMaybe, grep, grep_, removePrefix)
 import Stackage (defaultLTS)
 import Types
 
@@ -93,11 +93,11 @@
 #endif
 
 -- FIXME use datatype for options
-createSpecFile :: Bool -> Verbosity -> Flags -> Bool -> Bool
+createSpecFile :: Bool -> Verbosity -> Flags -> Bool -> Bool -> Bool
                -> PackageType -> Maybe (Maybe Stream) -> Maybe V.Version
                -> Maybe FilePath -> Maybe PackageVersionSpecifier
                -> IO FilePath
-createSpecFile ignoreMissing verbose flags testsuite force pkgtype subpkgStream mwithghc mdest mpvs = do
+createSpecFile ignoreMissing verbose flags norevision testsuite force pkgtype subpkgStream mwithghc mdest mpvs = do
   pkgdata <- prepare flags mpvs
   let mspec = case pkgtype of
                 SpecFile f -> Just f
@@ -142,6 +142,14 @@
   autochangelog <-
     ifJust mspecExists $
     grep_ "^%autochangelog"
+  autopatch <-
+    ifJust mspecExists $ \sf -> do
+    patches <- not . null <$> cmdLines "spectool" ["-P", sf]
+    if patches
+      then do
+      ppatch <- grep_ "^%patch" sf
+      return $ not ppatch
+      else return False
 
   let hasExec = hasExes pkgDesc
       hasLib = hasLibs pkgDesc
@@ -214,8 +222,7 @@
         ST.fromShortText $
 #endif
         synopsis pkgDesc
-  when (null syn) $
-    warn verbose "this package has no synopsis."
+  when (null syn) $ warn verbose "this package has no synopsis."
   let initialCapital (c:cs) = toUpper c:cs
       initialCapital [] = []
       syn' = if null syn
@@ -230,22 +237,24 @@
         ST.fromShortText $
 #endif
         description pkgDesc
-  when (null descr) $
-    warn verbose "this package has no description."
+  when (null descr) $ warn verbose "this package has no description."
   let descLines = (formatParagraphs . initialCapital . filterSymbols . finalPeriod . paragraphPeriods) $ if null descr then syn' else descr
       paragraphPeriods =
         unlines . map (\l -> if l == "." then "" else l) . lines
-      finalPeriod cs = case last cs of
-                         '.' -> cs
-                         '\n' -> finalPeriod $ init cs
-                         _ -> cs ++ "."
-      filterSymbols (c:cs) =
-        if c `notElem` "@\\" then c: filterSymbols cs
-        else case c of
-          '@' -> '\'': filterSymbols cs
-          '\\' -> head cs: filterSymbols (tail cs)
-          _ -> c: filterSymbols cs
+      finalPeriod cs =
+        case last cs of
+          '.' -> cs
+          '\n' -> finalPeriod $ init cs
+          _ -> cs ++ "."
       filterSymbols [] = []
+      filterSymbols (c:cs) =
+        if c `notElem` "@\\"
+        then c: filterSymbols cs
+        else
+          case c of
+            '@' -> '\'': filterSymbols cs
+            '\\' -> head cs: filterSymbols (tail cs)
+            _ -> c: filterSymbols cs
 
   when standalone $ do
     global "ghc_without_dynamic" "1"
@@ -280,7 +289,8 @@
     putNewline
 
   let (testsuiteDeps,testsuiteTools) = testsuiteDependencies' pkgDesc
-  missTestDeps <- filterM (notSrcOrInst . RpmHsLib Devel) testsuiteDeps
+  unpkgedTestDeps <- filterM (notSrcOrInst . RpmHsLib Devel) testsuiteDeps
+  let missTestDeps = unpkgedTestDeps \\ missingLibs
   let testable = notNull testsuiteDeps && not standalone && (null missTestDeps || testsuite) && isNothing mwithghc
   if testable then do
     put "%bcond_without tests"
@@ -291,6 +301,9 @@
   let version = display $ pkgVersion pkgid
       release = "1"
   revised <-
+    if norevision
+    then return False
+    else
     if isJust $ lookup "x-revision" (customFieldsPD pkgDesc)
     then return True
     else do
@@ -325,7 +338,7 @@
   when revisedDOS $ putHdr "BuildRequires" "dos2unix"
   when (mkPackageName "Cabal" `notElem` buildDeps pkgdeps || not hasLib || notNull (setupDeps pkgdeps)) $ do
 --    put "# Setup"
-    when (mkPackageName "Cabal" `notElem` buildDeps pkgdeps) $
+    unless (mkPackageName "Cabal" `elem` buildDeps pkgdeps) $
       putHdr "BuildRequires" $ ghc_name ++ "-Cabal-devel"
     mapM_ (\ d -> (if d `elem` missingLibs then putHdrComment else putHdr) "BuildRequires" (showRpm (RpmHsLib Devel d))) $ setupDeps pkgdeps
   putHdr "BuildRequires" $ "ghc-rpm-macros" ++ (if hasSubpkgs then "-extra" else "")
@@ -338,7 +351,7 @@
       putHdr "BuildRequires" $ "%{ghc_name}" ++ "-prof"
       put "%else"
 
-    let metaPackages = map mkPackageName ["haskell-gi-overloading"]
+    let metaPackages = [mkPackageName "haskell-gi-overloading"]
     mapM_ (\ d -> (if d `elem` missingLibs then putHdrComment else putHdr) "BuildRequires" (showRpm (RpmHsLib Devel d))) $ sort $ buildDeps pkgdeps
     when hasLibPkg $ do
       put "%if %{with ghc_prof}"
@@ -377,9 +390,10 @@
           put $ "# for missing dep '" ++ display pkg ++ "':"
           missingMore <- filterM (notSrcOrInst . RpmHsLib Devel) moredeps
           mapM_ (\ d -> (if d `elem` missingMore then putHdrComment else putHdr) "BuildRequires" (showRpm (RpmHsLib Devel d))) moredeps
-          put "%if %{with ghc_prof}"
-          mapM_ (\ d -> (if d `elem` missingMore then putHdrComment else putHdr) "BuildRequires" (showRpm (RpmHsLib Prof d))) moredeps
-          put "%endif"
+          unless standalone $ do
+            put "%if %{with ghc_prof}"
+            mapM_ (\ d -> (if d `elem` missingMore then putHdrComment else putHdr) "BuildRequires" (showRpm (RpmHsLib Prof d))) moredeps
+            put "%endif"
       when (isJust mwithghc) $
         put "%endif"
   put "# End cabal-rpm deps"
@@ -471,12 +485,14 @@
 
   put "%prep"
   put "# Begin cabal-rpm setup:"
-  put $ "%autosetup -p1" ++ (if pkgname /= name then " -n" +-+ pkgver else "") +-+
+  put $ "%setup -q" ++ (if pkgname /= name then " -n" +-+ pkgver else "") +-+
     (if hasSubpkgs then unwords (map (("-a" ++) . fst) $ number subpkgs) else  "")
   when revised $
     put $ (if revisedDOS
            then "dos2unix -k -n" else "cp -bp")
           +-+ "%{SOURCE" ++ show (1 + length subpkgs) ++ "}" +-+ pkg_name <.> "cabal"
+  when autopatch $
+    put "%autopatch -p1"
   put "# End cabal-rpm setup"
   sectionNewline
 
@@ -631,11 +647,12 @@
                 -> Maybe (Maybe Stream) -> Maybe V.Version
                 -> Maybe PackageVersionSpecifier -> IO ()
 createSpecFile_ ignoreMissing verbose flags testsuite force pkgtype subpkgStream mwithghc mpvs =
-  void (createSpecFile ignoreMissing verbose flags testsuite force pkgtype subpkgStream mwithghc Nothing mpvs)
+  void (createSpecFile ignoreMissing verbose flags False testsuite force pkgtype subpkgStream mwithghc Nothing mpvs)
 
 isBuildable :: Executable -> Bool
 isBuildable exe = buildable $ buildInfo exe
 
+-- FIXME convert strings to SPDX or drop?
 #if !MIN_VERSION_Cabal(2,2,0)
 prettyShow :: License -> String
 prettyShow (GPL Nothing) = "GPL+"
diff --git a/src/Commands/Update.hs b/src/Commands/Update.hs
--- a/src/Commands/Update.hs
+++ b/src/Commands/Update.hs
@@ -44,8 +44,8 @@
 
 -- FIXME --dryrun
 -- FIXME check kerberos before new-sources
-update :: Maybe PackageVersionSpecifier -> IO ()
-update mpvs = do
+update :: Maybe Stream -> Maybe PackageVersionSpecifier -> IO ()
+update moldstream mpvs = do
   pkgdata <- pkgSpecPkgData [] (pvsPackage =<< mpvs)
   case specFilename pkgdata of
     Nothing -> error' "No (unique) .spec file in directory."
@@ -94,7 +94,8 @@
         when (newrev || updated) $ do
           putStrLn $ display oldPkgId +-+ "current"
           subpkg <- grep_ "%{subpkgs}" spec
-          curspec <- createSpecVersion oldPkgId spec wasrevised (if subpkg then Just Nothing else Nothing)
+          -- FIXME should not update subpackage versions
+          curspec <- createSpecVersion oldPkgId spec wasrevised (if subpkg then Just moldstream else Nothing)
           newspec <- createSpecVersion newPkgId spec True (if subpkg then Just mstream else Nothing)
           currel <- getSpecField "Release" spec
           let suffix = "%{?dist}"
@@ -142,7 +143,7 @@
                           else "update to" +-+ showVersion newver]
               else
               when newrev $
-              whenM (gitBool "diff-index" ["--quiet", "HEAD"]) $
+              unlessM (gitBool "diff-index" ["--quiet", "HEAD"]) $
               cmd_ "git" ["commit", "-a", "-m", "revised .cabal file"]
           rpmbuild True Prep spec
   where
@@ -153,7 +154,7 @@
       direxists <- doesDirectoryExist dir
       when direxists $ removeDirectoryRecursive dir
       createDirectoryIfMissing True dir
-      createSpecFile False silent [] False False (SpecFile spec) subpkgStream Nothing (Just dir) (streamPkgToPVS Nothing (Just pkgid))
+      createSpecFile False silent [] (not revise) False False (SpecFile spec) subpkgStream Nothing (Just dir) (streamPkgToPVS Nothing (Just pkgid))
 
 krbTicket :: IO ()
 krbTicket = do
diff --git a/src/Main.hs b/src/Main.hs
--- a/src/Main.hs
+++ b/src/Main.hs
@@ -130,15 +130,13 @@
       <*> pkgVerSpecifier
     , Subcommand "update" "Update package to latest version" $
       update
-      <$> pkgVerSpecifier
+      <$> optional (optionWith auto 'o' "old-stream" "OLDSTREAM" "Current subpackage stream")
+      <*> pkgVerSpecifier
     ]
   where
     pkgId :: Parser (Maybe PackageIdentifier)
     pkgId = optional (argumentWith (maybeReader simpleParse) "PKG[VER]")
 
-    stream :: Parser (Maybe Stream)
-    stream = optional (optionWith auto 's' "stream" "STREAM" "Stackage stream or Hackage")
-
     flags :: Parser Flags
     flags = optionalWith auto 'f' "flag" "[(String,Bool)]" "Set or disable Cabal flags" []
 
@@ -167,7 +165,9 @@
     subpackage = switchWith 'S' "subpackage" "Subpackage missing Haskell dependencies"
 
     pkgVerSpecifier :: Parser (Maybe PackageVersionSpecifier)
-    pkgVerSpecifier = streamPkgToPVS <$> stream <*> pkgId
+    pkgVerSpecifier = streamPkgToPVS
+      <$> optional (optionWith auto 's' "stream" "STREAM" "Stackage stream or Hackage")
+      <*> pkgId
 
     toSubpkgStream :: Bool -> Maybe (Maybe Stream)
     toSubpkgStream False = Nothing
diff --git a/src/PackageUtils.hs b/src/PackageUtils.hs
--- a/src/PackageUtils.hs
+++ b/src/PackageUtils.hs
@@ -42,7 +42,7 @@
                     tryFindPackageDesc)
 import SimpleCmd (cmd, cmd_, cmdBool, cmdIgnoreErr, cmdLines,
                   cmdStderrToStdoutIn,
-                  error', grep_, removePrefix, shell_, sudo, sudo_, (+-+))
+                  error', grep_, removePrefix, sudo, sudo_, (+-+))
 import SimpleCmd.Git (isGitDir, grepGitConfig)
 import SimpleCmd.Rpm (rpmspec)
 import SysCmd (optionalProgram, requireProgram, rpmEval)
@@ -185,7 +185,7 @@
     if not dl
       then return False
       else do
-      revised <- grep_ "x-revision" file
+      revised <- grep_ "^x-revision:" file
       when revised $
         -- renameFile can fail across fs devices
         copyFile file $ dir </> display pkgid <.> "cabal"
@@ -338,9 +338,11 @@
   if pkgcabal
     then return $ Just cabalfile
     else do
-    exists <- doesDirectoryExist $ display pkgid
+    builddir <- getBuildDir
+    let dir = builddir </> display pkgid
+    exists <- doesDirectoryExist dir
     if exists
-      then fileWithExtension (display pkgid) ".cabal"
+      then fileWithExtension dir ".cabal"
       else return Nothing
 
 pkgSpecPkgData :: Flags -> Maybe PackageName -> IO PackageData
@@ -468,10 +470,8 @@
     putStrLn diff
     unless dryrun $ do
       putStrLn ""
-      (ok,out) <- cmdStderrToStdoutIn "patch" opts diff
+      out <- cmdIgnoreErr "patch" opts diff
       putStrLn out
-      unless ok $
-        shell_ "echo *.rej; cat *.rej"
   where
     opts = ["--fuzz=1"] ++ ["-p" ++ show n | let n = count '/' (removePrefix ".Cblrpm/" newspec)] ++ maybe [] (\ d -> ["-d", d]) mdir
 
diff --git a/src/Stackage.hs b/src/Stackage.hs
--- a/src/Stackage.hs
+++ b/src/Stackage.hs
@@ -40,10 +40,10 @@
 import Types
 
 defaultLTS :: Stream
-defaultLTS = LTS 20
+defaultLTS = LTS 21
 
 latestLTS :: Stream
-latestLTS = LTS 20
+latestLTS = LTS 21
 
 stackageList :: Stream -> PackageName -> IO (Maybe PackageIdentifier)
 stackageList stream pkg = do
