diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,5 +1,11 @@
 # Changelog for ghc-lib-parser-ex
 
+## 8.10.0.5 released 2020-05-02
+- New modules
+  - `Language.Haskell.GhclibParserEx.GHC.Parser`, `Language.Haskell.GhcLibParserEx.GHC.Utils.Outputable` to replace `Language.Haskell.GhclibParserEx.Parse` and `Language.Haskell.GhclibParserEx.Outputable` (which remain for now but deprecated and will be removed in a future release)
+
+## 0.20200501 released 2020-05-01
+
 ## 8.10.0.4 released 2020-04-04
 - Add expression predicates `isWholeFrac`, `isFieldPunUpdate`, `isStrictMatch`, `isMultiIf`, `isProc`, `isTransStmt`;
 - Add pattern predicate `isPFieldPun`.
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:        8.10.0.4
+version:        8.10.0.5
 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
@@ -44,6 +44,9 @@
       Language.Haskell.GhclibParserEx.GHC.Hs.Types
       Language.Haskell.GhclibParserEx.GHC.Hs.Decls
       Language.Haskell.GhclibParserEx.GHC.Hs.ExtendInstances
+      Language.Haskell.GhclibParserEx.GHC.Parser
+      Language.Haskell.GhclibParserEx.GHC.Utils.Outputable
+      -- Deprecated and will be removed in a future release.
       Language.Haskell.GhclibParserEx.Parse
       Language.Haskell.GhclibParserEx.Outputable
   other-modules:
diff --git a/src/Language/Haskell/GhclibParserEx/Config.hs b/src/Language/Haskell/GhclibParserEx/Config.hs
--- a/src/Language/Haskell/GhclibParserEx/Config.hs
+++ b/src/Language/Haskell/GhclibParserEx/Config.hs
@@ -4,25 +4,26 @@
 {-# OPTIONS_GHC -Wno-missing-fields #-}
 {-# LANGUAGE CPP #-}
 #include "ghclib_api.h"
-
 module Language.Haskell.GhclibParserEx.Config(
     fakeSettings
   , fakeLlvmConfig
   )
-  where
+where
 
 import Config
 #if defined (GHCLIB_API_811)
 import GHC.Driver.Session
-#else
+import GHC.Utils.Fingerprint
+import GHC.Platform
+import GHC.Settings
+#elif defined (GHCLIB_API_810)
 import DynFlags
-#endif
 import Fingerprint
-
-#if defined (GHCLIB_API_811) || defined (GHCLIB_API_810)
 import GHC.Platform
 import ToolSettings
 #else
+import DynFlags
+import Fingerprint
 import Platform
 #endif
 
diff --git a/src/Language/Haskell/GhclibParserEx/Fixity.hs b/src/Language/Haskell/GhclibParserEx/Fixity.hs
--- a/src/Language/Haskell/GhclibParserEx/Fixity.hs
+++ b/src/Language/Haskell/GhclibParserEx/Fixity.hs
@@ -16,28 +16,22 @@
   ) where
 
 #if defined (GHCLIB_API_811)
+import GHC.Hs
 import GHC.Types.Basic
-#else
-import BasicTypes
-#endif
-#if defined (GHCLIB_API_811) || defined (GHCLIB_API_810)
+import GHC.Types.Name.Reader
+import GHC.Types.Name
+import GHC.Types.SrcLoc
+#elif defined (GHCLIB_API_810)
 import GHC.Hs
+import BasicTypes
+import RdrName
+import OccName
+import SrcLoc
 #else
 import HsSyn
-#endif
-#if defined (GHCLIB_API_811)
-import GHC.Types.Name.Reader
-#else
+import BasicTypes
 import RdrName
-#endif
-#if defined (GHCLIB_API_811)
-import GHC.Types.Name
-#else
 import OccName
-#endif
-#if defined (GHCLIB_API_811)
-import GHC.Types.SrcLoc
-#else
 import SrcLoc
 #endif
 import Data.Maybe
@@ -64,7 +58,10 @@
 -- LPat and Pat have gone through a lot of churn. See
 -- https://gitlab.haskell.org/ghc/ghc/merge_requests/1925 for details.
 patFix :: [(String, Fixity)] -> LPat GhcPs -> LPat GhcPs
-#if defined (GHCLIB_API_811) || defined (GHCLIB_API_810)
+#if defined (GHCLIB_API_811)
+patFix fixities (L loc (ConPat _ op (InfixCon pat1 pat2))) =
+  L loc (mkConOpPat (getFixities fixities) op (findFixity' (getFixities fixities) op) pat1 pat2)
+#elif defined (GHCLIB_API_810)
 patFix fixities (L loc (ConPatIn op (InfixCon pat1 pat2))) =
   L loc (mkConOpPat (getFixities fixities) op (findFixity' (getFixities fixities) op) pat1 pat2)
 #else
@@ -78,22 +75,38 @@
   -> Located RdrName -> Fixity
   -> LPat GhcPs -> LPat GhcPs
   -> Pat GhcPs
-#if defined (GHCLIB_API_811) || defined (GHCLIB_API_810)
+#if defined (GHCLIB_API_811)
+mkConOpPat fs op2 fix2 p1@(L loc (ConPat _ op1 (InfixCon p11 p12))) p2
+#elif defined (GHCLIB_API_810)
 mkConOpPat fs op2 fix2 p1@(L loc (ConPatIn op1 (InfixCon p11 p12))) p2
 #else
 mkConOpPat fs op2 fix2 p1@(dL->L loc (ConPatIn op1 (InfixCon p11 p12))) p2
 #endif
+#if defined (GHCLIB_API_811)
+  | nofix_error = ConPat noExtField op2 (InfixCon p1 p2)
+#else
   | nofix_error = ConPatIn op2 (InfixCon p1 p2)
-#if defined (GHCLIB_API_811) || defined (GHCLIB_API_810)
+#endif
+#if defined (GHCLIB_API_811)
+  | associate_right = ConPat noExtField op1 (InfixCon p11 (L loc (mkConOpPat fs op2 fix2 p12 p2)))
+#elif defined (GHCLIB_API_810)
   | associate_right = ConPatIn op1 (InfixCon p11 (L loc (mkConOpPat fs op2 fix2 p12 p2)))
 #else
   | associate_right = ConPatIn op1 (InfixCon p11 (cL loc (mkConOpPat fs op2 fix2 p12 p2)))
 #endif
+#if defined (GHCLIB_API_811)
+  | otherwise = ConPat noExtField op2 (InfixCon p1 p2)
+#else
   | otherwise = ConPatIn op2 (InfixCon p1 p2)
+#endif
   where
     fix1 = findFixity' fs op1
     (nofix_error, associate_right) = compareFixity fix1 fix2
+#if defined (GHCLIB_API_811)
+mkConOpPat _ op _ p1 p2 = ConPat noExtField op (InfixCon p1 p2)
+#else
 mkConOpPat _ op _ p1 p2 = ConPatIn op (InfixCon p1 p2)
+#endif
 
 mkOpApp ::
   [(String, Fixity)]
diff --git a/src/Language/Haskell/GhclibParserEx/GHC/Driver/Session.hs b/src/Language/Haskell/GhclibParserEx/GHC/Driver/Session.hs
--- a/src/Language/Haskell/GhclibParserEx/GHC/Driver/Session.hs
+++ b/src/Language/Haskell/GhclibParserEx/GHC/Driver/Session.hs
@@ -4,7 +4,6 @@
 {-# LANGUAGE CPP #-}
 {-# OPTIONS_GHC -Wno-orphans #-}
 #include "ghclib_api.h"
-
 module Language.Haskell.GhclibParserEx.GHC.Driver.Session(
       readExtension
     , extensionImplications
@@ -16,26 +15,32 @@
   ) where
 
 import qualified GHC.LanguageExtensions as LangExt
-import Panic
-import HeaderInfo
-import StringBuffer
-#if defined(GHCLIB_API_811)
+#if defined (GHCLIB_API_811)
+import GHC.Utils.Panic
+import GHC.Parser.Header
+import GHC.Data.StringBuffer
 import GHC.Driver.Session
 import GHC.Driver.Types
 #else
+import Panic
+import HeaderInfo
+import StringBuffer
 import DynFlags
 import HscTypes
 #endif
 import GHC.LanguageExtensions.Type
 import Data.List
 import Data.Maybe
-import Data.Function
 import qualified Data.Map as Map
-
+#if !defined(GHCLIB_API_811)
+import Data.Function -- For `compareOn`.
 -- Oprhan instance until
 -- https://gitlab.haskell.org/ghc/ghc/merge_requests/2707 lands.
 instance Ord Extension where
   compare = compare `on` fromEnum
+#else
+-- Update : It's landed.
+#endif
 
 -- | Parse a GHC extension.
 readExtension :: String -> Maybe Extension
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
@@ -5,7 +5,6 @@
 {-# LANGUAGE CPP #-}
 {-# LANGUAGE LambdaCase #-}
 #include "ghclib_api.h"
-
 module Language.Haskell.GhclibParserEx.GHC.Hs.Expr(
   isTag, isDol, isDot, isReturn, isSection, isRecConstr, isRecUpdate,
   isVar, isPar, isApp, isOpApp, isAnyApp, isLexeme, isLambda, isQuasiQuote,
@@ -22,28 +21,20 @@
 #else
 import HsSyn
 #endif
-#if defined (GHCLIB_API_811)
+#if defined(GHCLIB_API_811)
 import GHC.Types.SrcLoc
-#else
-import SrcLoc
-#endif
-#if defined (GHCLIB_API_811)
 import GHC.Types.Name.Reader
-#else
-import RdrName
-#endif
-#if defined (GHCLIB_API_811)
 import GHC.Types.Name
+import GHC.Types.Basic
+import GHC.Builtin.Types
 #else
+import SrcLoc
+import RdrName
 import OccName
 import Name
-#endif
-#if defined (GHCLIB_API_811)
-import GHC.Types.Basic
-#else
 import BasicTypes
-#endif
 import TysWiredIn
+#endif
 import Data.Ratio
 
 -- 'True' if the provided expression is a variable with name 'tag'.
diff --git a/src/Language/Haskell/GhclibParserEx/GHC/Hs/ExtendInstances.hs b/src/Language/Haskell/GhclibParserEx/GHC/Hs/ExtendInstances.hs
--- a/src/Language/Haskell/GhclibParserEx/GHC/Hs/ExtendInstances.hs
+++ b/src/Language/Haskell/GhclibParserEx/GHC/Hs/ExtendInstances.hs
@@ -2,6 +2,8 @@
 -- SPDX-License-Identifier: BSD-3-Clause.
 
 {-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE CPP #-}
+#include "ghclib_api.h"
 
 module Language.Haskell.GhclibParserEx.GHC.Hs.ExtendInstances (
     HsExtendInstances(..), extendInstances, astEq, astListEq)
@@ -16,10 +18,13 @@
 -- representations rather than the terms themselves, leads to
 -- identical results.
 
+#if defined (GHCLIB_API_811)
+import GHC.Utils.Outputable
+#else
 import Outputable
+#endif
 import Data.Data
 import Data.Function
-
 import Language.Haskell.GhclibParserEx.Dump
 
 newtype HsExtendInstances a =
@@ -34,7 +39,7 @@
 -- string representations.
 toStr :: Data a => HsExtendInstances a -> String
 toStr (HsExtendInstances e) =
-  Outputable.showSDocUnsafe $ showAstData BlankSrcSpan e
+  showSDocUnsafe $ showAstData BlankSrcSpan e
 
 instance Data a => Eq (HsExtendInstances a) where (==) a b = toStr a == toStr b
 instance Data a => Ord (HsExtendInstances a) where compare = compare `on` toStr
@@ -47,4 +52,4 @@
 
 -- Use 'ppr' for 'Show'.
 instance Outputable a => Show (HsExtendInstances a) where
-  show (HsExtendInstances e) =  Outputable.showSDocUnsafe $ Outputable.ppr e
+  show (HsExtendInstances e) =  showSDocUnsafe $ ppr e
diff --git a/src/Language/Haskell/GhclibParserEx/GHC/Hs/Pat.hs b/src/Language/Haskell/GhclibParserEx/GHC/Hs/Pat.hs
--- a/src/Language/Haskell/GhclibParserEx/GHC/Hs/Pat.hs
+++ b/src/Language/Haskell/GhclibParserEx/GHC/Hs/Pat.hs
@@ -18,21 +18,25 @@
 #endif
 #if defined (GHCLIB_API_811)
 import GHC.Types.SrcLoc
-#else
-import SrcLoc
-#endif
-import TysWiredIn
-#if defined (GHCLIB_API_811)
+import GHC.Builtin.Types
 import GHC.Types.Name.Reader
 import GHC.Types.Name
+import GHC.Data.FastString
 #else
+import SrcLoc
+import TysWiredIn
 import RdrName
 import OccName
-#endif
 import FastString
+#endif
 
 patToStr :: LPat GhcPs -> String
-#if defined (GHCLIB_API_811) || defined (GHCLIB_API_810)
+#if defined (GHCLIB_API_811)
+patToStr (L _ (ConPat _ (L _ x) (PrefixCon []))) | occNameString (rdrNameOcc x) == "True" = "True"
+patToStr (L _ (ConPat _ (L _ x) (PrefixCon []))) | occNameString (rdrNameOcc x) == "False" = "False"
+patToStr (L _ (ConPat _ (L _ x) (PrefixCon []))) | occNameString (rdrNameOcc x) == "[]" = "[]"
+patToStr _ = ""
+#elif defined (GHCLIB_API_810)
 patToStr (L _ (ConPatIn (L _ x) (PrefixCon []))) | occNameString (rdrNameOcc x) == "True" = "True"
 patToStr (L _ (ConPatIn (L _ x) (PrefixCon []))) | occNameString (rdrNameOcc x) == "False" = "False"
 patToStr (L _ (ConPatIn (L _ x) (PrefixCon []))) | occNameString (rdrNameOcc x) == "[]" = "[]"
@@ -50,17 +54,29 @@
 #if defined (GHCLIB_API_811) || defined (GHCLIB_API_810)
   noLoc $
 #endif
+#if defined (GHCLIB_API_811)
+    ConPat noExtField (noLoc true_RDR) (PrefixCon [])
+#else
     ConPatIn (noLoc true_RDR) (PrefixCon [])
+#endif
   | z == "False" =
 #if defined (GHCLIB_API_811) || defined (GHCLIB_API_810)
   noLoc $
 #endif
+#if defined (GHCLIB_API_811)
+    ConPat noExtField (noLoc false_RDR) (PrefixCon [])
+#else
     ConPatIn (noLoc false_RDR) (PrefixCon [])
+#endif
   | z == "[]"    =
 #if defined (GHCLIB_API_811) || defined (GHCLIB_API_810)
   noLoc $
 #endif
+#if defined (GHCLIB_API_811)
+    ConPat noExtField (noLoc $ nameRdrName nilDataConName) (PrefixCon [])
+#else
     ConPatIn (noLoc $ nameRdrName nilDataConName) (PrefixCon [])
+#endif
   | otherwise =
 #if defined (GHCLIB_API_811) || defined (GHCLIB_API_810)
       noLoc $ VarPat noExtField (noLoc $ mkVarUnqual (fsLit z))
diff --git a/src/Language/Haskell/GhclibParserEx/GHC/Parser.hs b/src/Language/Haskell/GhclibParserEx/GHC/Parser.hs
new file mode 100644
--- /dev/null
+++ b/src/Language/Haskell/GhclibParserEx/GHC/Parser.hs
@@ -0,0 +1,139 @@
+-- Copyright (c) 2020, Shayne Fletcher. All rights reserved.
+-- SPDX-License-Identifier: BSD-3-Clause.
+
+{-# LANGUAGE CPP #-}
+#include "ghclib_api.h"
+module Language.Haskell.GhclibParserEx.GHC.Parser(
+    parseFile
+  , parseModule
+  , parseSignature
+  , parseImport
+  , parseStatement
+  , parseBackpack
+  , parseDeclaration
+  , parseExpression
+  , parsePattern
+  , parseTypeSignature
+  , parseStmt
+  , parseIdentifier
+  , parseType
+  , parseHeader
+  , parse
+  )
+  where
+
+#if defined (GHCLIB_API_811) || defined (GHCLIB_API_810)
+import GHC.Hs
+#else
+import HsSyn
+#endif
+#if defined (GHCLIB_API_811)
+import GHC.Parser.PostProcess
+import GHC.Driver.Session
+import GHC.Data.StringBuffer
+import GHC.Parser.Lexer
+import qualified GHC.Parser.Lexer as Lexer
+import qualified GHC.Parser as Parser
+import GHC.Data.FastString
+import GHC.Types.SrcLoc
+import GHC.Driver.Backpack.Syntax
+import GHC.Unit.Info
+import GHC.Types.Name.Reader
+#else
+import DynFlags
+import StringBuffer
+import Lexer
+import qualified Parser
+import FastString
+import SrcLoc
+import BkpSyn
+import PackageConfig
+import RdrName
+#endif
+#if defined (GHCLIB_API_810)
+import RdrHsSyn
+#endif
+
+parse :: P a -> String -> DynFlags -> ParseResult a
+parse p str flags =
+  Lexer.unP p parseState
+  where
+    location = mkRealSrcLoc (mkFastString "<string>") 1 1
+    buffer = stringToStringBuffer str
+    parseState = mkPState flags buffer location
+
+#if defined (GHCLIB_API_811)
+parseModule :: String -> DynFlags -> ParseResult (Located HsModule)
+#else
+parseModule :: String -> DynFlags -> ParseResult (Located (HsModule GhcPs))
+#endif
+parseModule = parse Parser.parseModule
+
+#if defined (GHCLIB_API_811)
+parseSignature :: String -> DynFlags -> ParseResult (Located HsModule)
+#else
+parseSignature :: String -> DynFlags -> ParseResult (Located (HsModule GhcPs))
+#endif
+parseSignature = parse Parser.parseSignature
+
+parseImport :: String -> DynFlags -> ParseResult (LImportDecl GhcPs)
+parseImport = parse Parser.parseImport
+
+parseStatement :: String -> DynFlags -> ParseResult (LStmt GhcPs (LHsExpr GhcPs))
+parseStatement = parse Parser.parseStatement
+
+parseBackpack :: String -> DynFlags -> ParseResult [LHsUnit PackageName]
+parseBackpack = parse Parser.parseBackpack
+
+parseDeclaration :: String -> DynFlags -> ParseResult (LHsDecl GhcPs)
+parseDeclaration = parse Parser.parseDeclaration
+
+parseExpression :: String -> DynFlags -> ParseResult (LHsExpr GhcPs)
+#if defined (GHCLIB_API_811) || defined (GHCLIB_API_810)
+parseExpression s flags =
+  case parse Parser.parseExpression s flags of
+    POk s e -> unP (runECP_P e) s
+    PFailed ps -> PFailed ps
+#else
+parseExpression = parse Parser.parseExpression
+#endif
+
+parsePattern :: String -> DynFlags -> ParseResult (LPat GhcPs)
+parsePattern = parse Parser.parsePattern
+
+parseTypeSignature :: String -> DynFlags -> ParseResult (LHsDecl GhcPs)
+parseTypeSignature = parse Parser.parseTypeSignature
+
+parseStmt :: String -> DynFlags -> ParseResult (Maybe (LStmt GhcPs (LHsExpr GhcPs)))
+parseStmt = parse Parser.parseStmt
+
+parseIdentifier :: String -> DynFlags -> ParseResult (Located RdrName)
+parseIdentifier = parse Parser.parseIdentifier
+
+parseType :: String -> DynFlags -> ParseResult (LHsType GhcPs)
+parseType = parse Parser.parseType
+
+#if defined(GHCLIB_API_811)
+parseHeader :: String -> DynFlags -> ParseResult (Located HsModule)
+#else
+parseHeader :: String -> DynFlags -> ParseResult (Located (HsModule GhcPs))
+#endif
+parseHeader = parse Parser.parseHeader
+
+#if defined (GHCLIB_API_811)
+parseFile :: String
+          -> DynFlags
+          -> String
+          -> ParseResult (Located HsModule)
+#else
+parseFile :: String
+          -> DynFlags
+          -> String
+          -> ParseResult (Located (HsModule GhcPs))
+#endif
+parseFile filename flags str =
+  unP Parser.parseModule parseState
+  where
+    location = mkRealSrcLoc (mkFastString filename) 1 1
+    buffer = stringToStringBuffer str
+    parseState = mkPState flags buffer location
diff --git a/src/Language/Haskell/GhclibParserEx/GHC/Utils/Outputable.hs b/src/Language/Haskell/GhclibParserEx/GHC/Utils/Outputable.hs
new file mode 100644
--- /dev/null
+++ b/src/Language/Haskell/GhclibParserEx/GHC/Utils/Outputable.hs
@@ -0,0 +1,18 @@
+-- Copyright (c) 2020, Shayne Fletcher. All rights reserved.
+-- SPDX-License-Identifier: BSD-3-Clause.
+
+{-# LANGUAGE CPP #-}
+#include "ghclib_api.h"
+module Language.Haskell.GhclibParserEx.GHC.Utils.Outputable (
+    unsafePrettyPrint
+)
+where
+
+#if defined (GHCLIB_API_811)
+import GHC.Utils.Outputable
+#else
+import Outputable
+#endif
+
+unsafePrettyPrint :: Outputable a => a -> String
+unsafePrettyPrint = showSDocUnsafe . ppr
diff --git a/src/Language/Haskell/GhclibParserEx/Outputable.hs b/src/Language/Haskell/GhclibParserEx/Outputable.hs
--- a/src/Language/Haskell/GhclibParserEx/Outputable.hs
+++ b/src/Language/Haskell/GhclibParserEx/Outputable.hs
@@ -1,9 +1,9 @@
 -- Copyright (c) 2020, Shayne Fletcher. All rights reserved.
 -- SPDX-License-Identifier: BSD-3-Clause.
 
-module Language.Haskell.GhclibParserEx.Outputable (unsafePrettyPrint) where
-
-import Outputable
-
-unsafePrettyPrint :: (Outputable.Outputable a) => a -> String
-unsafePrettyPrint = Outputable.showSDocUnsafe . Outputable.ppr
+module Language.Haskell.GhclibParserEx.Outputable
+  {-# DEPRECATED "Use Language.Haskell.GhclibParserEx.GHC.Utils.Outputable instead" #-} (
+  module Language.Haskell.GhclibParserEx.GHC.Utils.Outputable
+  )
+  where
+import Language.Haskell.GhclibParserEx.GHC.Utils.Outputable
diff --git a/src/Language/Haskell/GhclibParserEx/Parse.hs b/src/Language/Haskell/GhclibParserEx/Parse.hs
--- a/src/Language/Haskell/GhclibParserEx/Parse.hs
+++ b/src/Language/Haskell/GhclibParserEx/Parse.hs
@@ -1,146 +1,9 @@
 -- Copyright (c) 2020, Shayne Fletcher. All rights reserved.
 -- SPDX-License-Identifier: BSD-3-Clause.
 
-{-# OPTIONS_GHC -Wno-missing-fields #-}
-{-# LANGUAGE CPP #-}
-#include "ghclib_api.h"
-
-module Language.Haskell.GhclibParserEx.Parse(
-    parseFile
-  , parseModule
-  , parseSignature
-  , parseImport
-  , parseStatement
-  , parseBackpack
-  , parseDeclaration
-  , parseExpression
-  , parsePattern
-  , parseTypeSignature
-  , parseStmt
-  , parseIdentifier
-  , parseType
-  , parseHeader
-  , parse
+module Language.Haskell.GhclibParserEx.Parse
+  {-# DEPRECATED "Use Language.Haskell.GhclibParserEx.GHC.Parser instead" #-} (
+  module Language.Haskell.GhclibParserEx.GHC.Parser
   )
   where
-
-#if defined (GHCLIB_API_811) || defined (GHCLIB_API_810)
-import GHC.Hs
-import RdrHsSyn
-#else
-import HsSyn
-#endif
-#if defined (GHCLIB_API_811)
-import GHC.Driver.Session
-#else
-import DynFlags
-#endif
-import StringBuffer
-import Lexer
-import qualified Parser
-import FastString
-#if defined (GHCLIB_API_811)
-import GHC.Types.SrcLoc
-#else
-import SrcLoc
-#endif
-#if defined (GHCLIB_API_811)
-import GHC.Driver.Backpack.Syntax
-#else
-import BkpSyn
-#endif
-#if defined (GHCLIB_API_811)
-import UnitInfo
-#else
-import PackageConfig
-#endif
-#if defined (GHCLIB_API_811)
-import GHC.Types.Name.Reader
-#else
-import RdrName
-#endif
-
-parse :: P a -> String -> DynFlags -> ParseResult a
-parse p str flags =
-  Lexer.unP p parseState
-  where
-    location = mkRealSrcLoc (mkFastString "<string>") 1 1
-    buffer = stringToStringBuffer str
-    parseState = mkPState flags buffer location
-
-#if defined (GHCLIB_API_811)
-parseModule :: String -> DynFlags -> ParseResult (Located HsModule)
-#else
-parseModule :: String -> DynFlags -> ParseResult (Located (HsModule GhcPs))
-#endif
-parseModule = parse Parser.parseModule
-
-#if defined (GHCLIB_API_811)
-parseSignature :: String -> DynFlags -> ParseResult (Located HsModule)
-#else
-parseSignature :: String -> DynFlags -> ParseResult (Located (HsModule GhcPs))
-#endif
-parseSignature = parse Parser.parseSignature
-
-parseImport :: String -> DynFlags -> ParseResult (LImportDecl GhcPs)
-parseImport = parse Parser.parseImport
-
-parseStatement :: String -> DynFlags -> ParseResult (LStmt GhcPs (LHsExpr GhcPs))
-parseStatement = parse Parser.parseStatement
-
-parseBackpack :: String -> DynFlags -> ParseResult [LHsUnit PackageName]
-parseBackpack = parse Parser.parseBackpack
-
-parseDeclaration :: String -> DynFlags -> ParseResult (LHsDecl GhcPs)
-parseDeclaration = parse Parser.parseDeclaration
-
-parseExpression :: String -> DynFlags -> ParseResult (LHsExpr GhcPs)
-parseExpression s flags =
-#if defined (GHCLIB_API_811) || defined (GHCLIB_API_810)
-  case parse Parser.parseExpression s flags of
-    POk s e ->
-       unP (runECP_P e >>= return) s :: ParseResult (LHsExpr GhcPs)
-    PFailed ps -> PFailed ps
-#else
-  parse Parser.parseExpression s flags
-#endif
-
-parsePattern :: String -> DynFlags -> ParseResult (LPat GhcPs)
-parsePattern = parse Parser.parsePattern
-
-parseTypeSignature :: String -> DynFlags -> ParseResult (LHsDecl GhcPs)
-parseTypeSignature = parse Parser.parseTypeSignature
-
-parseStmt :: String -> DynFlags -> ParseResult (Maybe (LStmt GhcPs (LHsExpr GhcPs)))
-parseStmt = parse Parser.parseStmt
-
-parseIdentifier :: String -> DynFlags -> ParseResult (Located RdrName)
-parseIdentifier = parse Parser.parseIdentifier
-
-parseType :: String -> DynFlags -> ParseResult (LHsType GhcPs)
-parseType = parse Parser.parseType
-
-#if defined(GHCLIB_API_811)
-parseHeader :: String -> DynFlags -> ParseResult (Located HsModule)
-#else
-parseHeader :: String -> DynFlags -> ParseResult (Located (HsModule GhcPs))
-#endif
-parseHeader = parse Parser.parseHeader
-
-#if defined (GHCLIB_API_811)
-parseFile :: String
-          -> DynFlags
-          -> String
-          -> ParseResult (Located HsModule)
-#else
-parseFile :: String
-          -> DynFlags
-          -> String
-          -> ParseResult (Located (HsModule GhcPs))
-#endif
-parseFile filename flags str =
-  unP Parser.parseModule parseState
-  where
-    location = mkRealSrcLoc (mkFastString filename) 1 1
-    buffer = stringToStringBuffer str
-    parseState = mkPState flags buffer location
+import Language.Haskell.GhclibParserEx.GHC.Parser
diff --git a/test/Test.hs b/test/Test.hs
--- a/test/Test.hs
+++ b/test/Test.hs
@@ -18,9 +18,9 @@
 import Data.Maybe
 
 import Language.Haskell.GhclibParserEx.Config
-import Language.Haskell.GhclibParserEx.Parse
 import Language.Haskell.GhclibParserEx.Dump
 import Language.Haskell.GhclibParserEx.Fixity
+import Language.Haskell.GhclibParserEx.GHC.Parser
 import Language.Haskell.GhclibParserEx.GHC.Hs.ExtendInstances
 import Language.Haskell.GhclibParserEx.GHC.Hs.Expr
 import Language.Haskell.GhclibParserEx.GHC.Hs.Pat
@@ -34,17 +34,17 @@
 #endif
 #if defined (GHCLIB_API_811)
 import GHC.Types.SrcLoc
-#else
-import SrcLoc
-#endif
-#if defined (GHCLIB_API_811)
 import GHC.Driver.Session
+import GHC.Parser.Lexer
+import GHC.Utils.Outputable
+import GHC.Utils.Error
 #else
+import SrcLoc
 import DynFlags
-#endif
 import Lexer
 import Outputable
 import ErrUtils
+#endif
 import GHC.LanguageExtensions.Type
 #if defined (GHCLIB_API_808)
 import Bag
