diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-# ghc-hs-meta
+# ghc-meta
 
 Generate Template Haskell expressions from Haskell source code using the GHC parser.
 This package runs on GHC versions 8.10.7, 9.0.2, and 9.2.1.
@@ -18,7 +18,7 @@
 
 ## Thank you, PyF
 
-This code originated from the excellent parser included in the [`PyF`](https://github.com/guibou/PyF) package.
+This code originated from the excellent parser included in the [`PyF`](https://github.com/guibou/PyF) package. 
 I extracted the relevant code and refactored/renamed things to be usable in a more general context.
 Without PyF, this could wouldn't have been possible. Thank you!
 
diff --git a/ghc-hs-meta.cabal b/ghc-hs-meta.cabal
--- a/ghc-hs-meta.cabal
+++ b/ghc-hs-meta.cabal
@@ -1,7 +1,7 @@
 cabal-version:  2.4
 
 name:           ghc-hs-meta
-version:        0.1.0.0
+version:        0.1.1.0
 build-type:     Simple
 author:         Zachary Wood
 maintainer:     zac.wood@hey.com
@@ -10,7 +10,7 @@
 synopsis:       Translate Haskell source to Template Haskell expression
 description:    Translate from Haskell source code to Template Haskell expressions using the GHC parser
 category:       ghc,template-haskell
-tested-with:    GHC == 8.10.7, GHC == 9.0.2, GHC == 9.2.1
+tested-with:    GHC == 8.10.7, GHC == 9.0.2, GHC == 9.2.4, GHC == 9.4.1
 
 extra-source-files: CHANGELOG.md README.md
 
@@ -26,10 +26,10 @@
       LambdaCase
   ghc-options: -Wall
   build-depends:
-      base >= 4.14 && <4.17
-    , ghc >= 8.10.7 && < 9.3
-    , ghc-boot >= 8.10.7 && < 9.3
-    , template-haskell >= 2.16.0 && < 2.19
+      base >= 4.14 && <4.18
+    , ghc >= 8.10.7 && < 9.5
+    , ghc-boot >= 8.10.7 && < 9.5
+    , template-haskell >= 2.16.0 && < 2.20
     , bytestring >= 0.10 && < 0.12
   default-language: Haskell2010
 
diff --git a/src/Language/Haskell/Meta/Parse.hs b/src/Language/Haskell/Meta/Parse.hs
--- a/src/Language/Haskell/Meta/Parse.hs
+++ b/src/Language/Haskell/Meta/Parse.hs
@@ -4,12 +4,21 @@
 -- | This module is here to parse Haskell expression using the GHC Api
 module Language.Haskell.Meta.Parse (parseExp, parseExpWithExts, parseExpWithFlags, parseHsExpr) where
 
-#if MIN_VERSION_ghc(9,2,0)
+#if MIN_VERSION_ghc(9,4,0)
+import GHC.Parser.Errors.Ppr ()
+import GHC.Parser.Annotation (LocatedA)
+import GHC.Utils.Outputable
+#elif MIN_VERSION_ghc(9,2,0)
 import qualified GHC.Parser.Errors.Ppr as ParserErrorPpr
-import GHC.Driver.Config (initParserOpts)
 import GHC.Parser.Annotation (LocatedA)
 #endif
 
+#if MIN_VERSION_ghc(9,4,0)
+import GHC.Driver.Config.Parser (initParserOpts)
+#elif MIN_VERSION_ghc(9,2,0)
+import GHC.Driver.Config (initParserOpts)
+#endif
+
 #if MIN_VERSION_ghc(9,0,0)
 import GHC.Parser.PostProcess
 import qualified GHC.Types.SrcLoc as SrcLoc
@@ -64,6 +73,7 @@
 #else
 parseExp = parseExpWithExts
     [ TypeApplications
+    , OverloadedLabels
     ]
 #endif
 
@@ -89,8 +99,14 @@
             expr
 
 {- ORMOLU_DISABLE #-}
-#if MIN_VERSION_ghc(9,2,0)
-    -- TODO messages?
+#if MIN_VERSION_ghc(9,4,0)
+    PFailed PState{loc=SrcLoc.psRealLoc -> srcLoc, errors=errorMessages} ->
+            let
+                err = renderWithContext defaultSDocContext (ppr errorMessages)
+                line = SrcLoc.srcLocLine srcLoc
+                col = SrcLoc.srcLocCol srcLoc
+            in Left (line, col, err)
+#elif MIN_VERSION_ghc(9,2,0)
     PFailed PState{loc=SrcLoc.psRealLoc -> srcLoc, errors=errorMessages} ->
             let
                 psErrToString e = show $ ParserErrorPpr.pprError e
diff --git a/src/Language/Haskell/Meta/Settings.hs b/src/Language/Haskell/Meta/Settings.hs
--- a/src/Language/Haskell/Meta/Settings.hs
+++ b/src/Language/Haskell/Meta/Settings.hs
@@ -156,6 +156,10 @@
         platformWordSize=8
       , platformOS=OSUnknown
 #endif
+
+#if MIN_VERSION_ghc(9, 4, 0)
+      , platformHasLibm = False
+#endif
       , platformUnregisterised=True
       }
 #if MIN_VERSION_ghc(9, 2, 0)
diff --git a/src/Language/Haskell/Meta/Translate.hs b/src/Language/Haskell/Meta/Translate.hs
--- a/src/Language/Haskell/Meta/Translate.hs
+++ b/src/Language/Haskell/Meta/Translate.hs
@@ -41,9 +41,9 @@
 import GHC.Utils.Outputable (ppr)
 import GHC.Types.Basic (Boxity(..))
 import GHC.Types.SourceText (il_value, rationalFromFractionalLit)
-import GHC.Driver.Ppr (showSDocDebug)
+import GHC.Driver.Ppr (showSDoc)
 #else
-import GHC.Utils.Outputable (ppr, showSDocDebug)
+import GHC.Utils.Outputable (ppr, showSDoc)
 import GHC.Types.Basic (il_value, fl_value, Boxity(..))
 #endif
 import GHC.Driver.Session (DynFlags, xopt_set, defaultDynFlags)
@@ -53,7 +53,7 @@
 import Name
 import RdrName
 import FastString
-import Outputable (ppr, showSDocDebug)
+import Outputable (ppr, showSDoc)
 import BasicTypes (il_value, fl_value, Boxity(..))
 import DynFlags (DynFlags, xopt_set, defaultDynFlags)
 import qualified Module
@@ -104,7 +104,7 @@
    in if isRdrTyVar n'
         then TH.VarT (toName n')
         else TH.ConT (toName n')
-toType t = todo "toType" (showSDocDebug (Settings.baseDynFlags []) . ppr $ t)
+toType t = todo "toType" (showSDoc(Settings.baseDynFlags []) . ppr $ t)
 
 toName :: RdrName -> TH.Name
 toName n = case n of
@@ -118,7 +118,7 @@
 
 toPat :: DynFlags -> Pat.Pat GhcPs -> TH.Pat
 toPat _dynFlags (Pat.VarPat _ (unLoc -> name)) = TH.VarP (toName name)
-toPat dynFlags p = todo "toPat" (showSDocDebug dynFlags . ppr $ p)
+toPat dynFlags p = todo "toPat" (showSDoc dynFlags . ppr $ p)
 
 toExp :: DynFlags -> Expr.HsExpr GhcPs -> TH.Exp
 toExp _ (Expr.HsVar _ n) =
@@ -201,7 +201,11 @@
 #endif
 
 -- toExp (Expr.List _ xs)                        = TH.ListE (fmap toExp xs)
+#if MIN_VERSION_ghc(9, 4, 0)
+toExp d (Expr.HsPar _ _ e _)
+#else
 toExp d (Expr.HsPar _ e)
+#endif
   = TH.ParensE (toExp d . unLoc $ e)
 
 toExp d (Expr.SectionL _ (unLoc -> a) (unLoc -> b))
@@ -233,9 +237,23 @@
     (FromTo a b) -> TH.FromToR (toExp d $ unLoc a) (toExp d $ unLoc b)
     (FromThenTo a b c) -> TH.FromThenToR (toExp d $ unLoc a) (toExp d $ unLoc b) (toExp d $ unLoc c)
 
-#if MIN_VERSION_ghc(9, 2, 0)
+#if MIN_VERSION_ghc(9, 4, 0)
 toExp _ (Expr.HsProjection _ locatedFields) =
   let
+    extractFieldLabel (DotFieldOcc _ locatedStr) = locatedStr
+    extractFieldLabel _ = error "Don't know how to handle XHsFieldLabel constructor..."
+  in
+    TH.ProjectionE (NonEmpty.map (unpackFS . unLoc . extractFieldLabel . unLoc) locatedFields)
+
+toExp d (Expr.HsGetField _ expr locatedField) =
+  let
+    extractFieldLabel (DotFieldOcc _ locatedStr) = locatedStr
+    extractFieldLabel _ = error "Don't know how to handle XHsFieldLabel constructor..."
+  in
+    TH.GetFieldE (toExp d (unLoc expr)) (unpackFS . unLoc . extractFieldLabel . unLoc $ locatedField)
+#elif MIN_VERSION_ghc(9, 2, 0)
+toExp _ (Expr.HsProjection _ locatedFields) =
+  let
     extractFieldLabel (HsFieldLabel _ locatedStr) = locatedStr
     extractFieldLabel _ = error "Don't know how to handle XHsFieldLabel constructor..."
   in
@@ -247,11 +265,16 @@
     extractFieldLabel _ = error "Don't know how to handle XHsFieldLabel constructor..."
   in
     TH.GetFieldE (toExp d (unLoc expr)) (unpackFS . unLoc . extractFieldLabel . unLoc $ locatedField)
+#endif
 
+
+#if MIN_VERSION_ghc(9, 2, 0)
 toExp _ (Expr.HsOverLabel _ fastString) = TH.LabelE (unpackFS fastString)
+#else
+toExp _ (Expr.HsOverLabel _ _ fastString) = TH.LabelE (unpackFS fastString)
 #endif
 
-toExp dynFlags e = todo "toExp" (showSDocDebug dynFlags . ppr $ e)
+toExp dynFlags e = todo "toExp" (showSDoc dynFlags . ppr $ e)
 
 todo :: (HasCallStack, Show e) => String -> e -> a
 todo fun thing = error . concat $ [moduleName, ".", fun, ": not implemented: ", show thing]
diff --git a/test/Main.hs b/test/Main.hs
--- a/test/Main.hs
+++ b/test/Main.hs
@@ -23,12 +23,12 @@
       let Right exp = parseExp "(.b.c.d)"
       let Just list = nonEmpty ["b", "c", "d"]
       exp `shouldBe` TH.ProjectionE list
+#endif
 
   describe "Overloaded labels" $ do
     it "parses labels" $ do
       let Right exp = parseExp "#name"
       exp `shouldBe` TH.LabelE "name"
-#endif
 
   describe "Type application" $ do
     it "parses application" $ do
