diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,5 +1,26 @@
 # Changelog for ghc-lib-parser-ex
 
+## 0.20210228 released 2021-02-28
+- Update to `ghc-lib-0.20210228`
+
+## 9.0.0.3 released 2021-02-08
+- Cabal bugfix
+
+## 9.0.0.2 released 2021-02-08
+- Cabal bugfix
+
+## 8.10.0.19 released 2021-02-08
+- Cabal bugfix
+
+## 8.10.0.18 released 2021-02-06
+- Update to ghc-8.10.4.
+
+## 9.0.0.1 released 2021-02-05
+- Upgrade Cabal defaults flag to 9.0.1
+
+## 9.0.0.0 released 2021-02-05
+- Update to ghc-9.0.1
+
 ## 0.20210201 released 2021-02-01
 - Update to `ghc-lib-0.20210201`
 
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -1,5 +1,5 @@
 # ghc-lib-parser-ex [![License BSD3](https://img.shields.io/badge/license-BSD3-brightgreen.svg)](http://opensource.org/licenses/BSD-3-Clause) [![Hackage version](https://img.shields.io/hackage/v/ghc-lib-parser-ex.svg?label=Hackage)](https://hackage.haskell.org/package/ghc-lib-parser-ex) [![Stackage version](https://www.stackage.org/package/ghc-lib-parser-ex/badge/nightly?label=Stackage)](https://www.stackage.org/package/ghc-lib-parser-ex)  [![Build Status](https://shayne-fletcher.visualstudio.com/ghc-lib-parser-ex/_apis/build/status/shayne-fletcher.ghc-lib-parser-ex?branchName=master)](https://shayne-fletcher.visualstudio.com/ghc-lib-parser-ex/_build/latest?definitionId=1&branchName=master)
-Copyright © 2020, Shayne Fletcher. All rights reserved.
+Copyright © 2020-2021 Shayne Fletcher. All rights reserved.
 SPDX-License-Identifier: BSD-3-Clause
 
 The `ghc-lib-parser-ex` package contains GHC API parse tree utilities. It works with or without [`ghc-lib-parser`](https://github.com/digital-asset/ghc-lib).
diff --git a/cbits/ghclib_api.h b/cbits/ghclib_api.h
--- a/cbits/ghclib_api.h
+++ b/cbits/ghclib_api.h
@@ -20,7 +20,7 @@
 #         error Unsupported GHC API version
 #      endif
 #    else
-#      if __GLASGOW_HASKELL__   == 811
+#      if __GLASGOW_HASKELL__   == 901
 #        define GHCLIB_API_HEAD
 #      elif __GLASGOW_HASKELL__ == 900
 #        define GHCLIB_API_900
diff --git a/ghc-lib-parser-ex.cabal b/ghc-lib-parser-ex.cabal
--- a/ghc-lib-parser-ex.cabal
+++ b/ghc-lib-parser-ex.cabal
@@ -1,6 +1,6 @@
 cabal-version: >= 1.18
 name:           ghc-lib-parser-ex
-version:        0.20210201
+version:        0.20210228
 description:    Please see the README on GitHub at <https://github.com/shayne-fletcher/ghc-lib-parser-ex#readme>
 homepage:       https://github.com/shayne-fletcher/ghc-lib-parser-ex#readme
 bug-reports:    https://github.com/shayne-fletcher/ghc-lib-parser-ex/issues
@@ -63,15 +63,15 @@
       uniplate >= 1.5,
       bytestring >= 0.10.8.2,
       containers >= 0.5.8.1
-  if flag(auto) && impl(ghc >= 8.10.0) && impl(ghc < 8.11.0)
+  if flag(auto) && impl(ghc >= 9.0.0) && impl(ghc < 9.1.0)
     build-depends:
-      ghc == 8.10.*,
+      ghc == 9.0.*,
       ghc-boot-th,
       ghc-boot
   else
     if flag(auto)
       build-depends:
-        ghc-lib-parser == 8.10.*
+        ghc-lib-parser == 9.0.*
     else
       if flag(no-ghc-lib)
         build-depends:
@@ -107,15 +107,15 @@
     , extra >=1.6
     , uniplate >= 1.6.12
     , ghc-lib-parser-ex
-  if flag(auto) && impl(ghc >= 8.10.0) && impl(ghc < 8.11.0)
+  if flag(auto) && impl(ghc >= 9.0.0) && impl(ghc < 9.1.0)
     build-depends:
-      ghc == 8.10.*,
+      ghc == 9.0.*,
       ghc-boot-th,
       ghc-boot
   else
     if flag(auto)
       build-depends:
-        ghc-lib-parser == 8.10.*
+        ghc-lib-parser == 9.0.*
     else
       if flag(no-ghc-lib)
         build-depends:
diff --git a/src/Language/Haskell/GhclibParserEx/Dump.hs b/src/Language/Haskell/GhclibParserEx/Dump.hs
--- a/src/Language/Haskell/GhclibParserEx/Dump.hs
+++ b/src/Language/Haskell/GhclibParserEx/Dump.hs
@@ -17,7 +17,7 @@
 
 #if !defined(MIN_VERSION_ghc_lib_parser)
 -- Using native ghc.
-#  if defined (GHCLIB_API_HEAD) || defined (GHCLIB_API_810)
+#  if defined (GHCLIB_API_HEAD) || defined(GHCLIB_API_900) || defined (GHCLIB_API_810)
 import GHC.Hs.Dump
 #  else
 import HsDumpAst
diff --git a/src/Language/Haskell/GhclibParserEx/GHC/Hs/Expr.hs b/src/Language/Haskell/GhclibParserEx/GHC/Hs/Expr.hs
--- a/src/Language/Haskell/GhclibParserEx/GHC/Hs/Expr.hs
+++ b/src/Language/Haskell/GhclibParserEx/GHC/Hs/Expr.hs
@@ -159,8 +159,13 @@
 isUnboxed = \case Unboxed -> True; _ -> False
 
 isWholeFrac :: HsExpr GhcPs -> Bool
+#if defined (GHCLIB_API_HEAD)
+isWholeFrac (HsLit _ (HsRat _ fl@FL{} _)) = denominator (rationalFromFractionalLit fl) == 1
+isWholeFrac (HsOverLit _ (OverLit _ (HsFractional fl@FL {}) _)) = denominator (rationalFromFractionalLit fl) == 1
+#else
 isWholeFrac (HsLit _ (HsRat _ (FL _ _ v) _)) = denominator v == 1
 isWholeFrac (HsOverLit _ (OverLit _ (HsFractional (FL _ _ v)) _)) = denominator v == 1
+#endif
 isWholeFrac _ = False
 
 varToStr :: LHsExpr GhcPs -> String
diff --git a/src/Language/Haskell/GhclibParserEx/GHC/Parser.hs b/src/Language/Haskell/GhclibParserEx/GHC/Parser.hs
--- a/src/Language/Haskell/GhclibParserEx/GHC/Parser.hs
+++ b/src/Language/Haskell/GhclibParserEx/GHC/Parser.hs
@@ -98,8 +98,14 @@
 parseExpression :: String -> DynFlags -> ParseResult (LHsExpr GhcPs)
 #if defined (GHCLIB_API_HEAD)
 parseExpression s flags =
+  -- The need for annotations here came about first manifested with
+  -- ghc-9.0.1
   case parse Parser.parseExpression s flags of
-    POk s e -> unP (runPV . unECP $ e) s
+    POk state e ->
+      let e' = e :: ECP
+          parser_validator = unECP e' :: PV (LHsExpr GhcPs)
+          parser = runPV parser_validator :: P (LHsExpr GhcPs)
+      in unP parser state :: ParseResult (LHsExpr GhcPs)
     PFailed ps -> PFailed ps
 #elif defined (GHCLIB_API_810) || defined (GHCLIB_API_900)
 parseExpression s flags =
diff --git a/test/Test.hs b/test/Test.hs
--- a/test/Test.hs
+++ b/test/Test.hs
@@ -177,7 +177,11 @@
   ]
   where
     flags = defaultDynFlags fakeSettings fakeLlvmConfig
+#if defined (GHCLIB_API_HEAD)
+    report flags msgs = concat [ showSDoc flags msg | msg <- pprMsgEnvelopeBagWithLoc msgs ]
+#else
     report flags msgs = concat [ showSDoc flags msg | msg <- pprErrMsgBagWithLoc msgs ]
+#endif
 
 #if defined (GHCLIB_API_HEAD) || defined (GHCLIB_API_900)
 moduleTest :: String -> DynFlags -> (Located HsModule -> IO ()) -> IO ()
@@ -382,8 +386,11 @@
   ]
   where
     flags = defaultDynFlags fakeSettings fakeLlvmConfig
+#if defined(GHCLIB_API_HEAD)
+    report flags msgs = concat [ showSDoc flags msg | msg <- pprMsgEnvelopeBagWithLoc msgs ]
+#else
     report flags msgs = concat [ showSDoc flags msg | msg <- pprErrMsgBagWithLoc msgs ]
-
+#endif
 nameTests :: TestTree
 nameTests = testGroup "Name tests"
   [ testCase "modName (1)" $
