diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -7,3 +7,8 @@
 ## 0.1.0.1 -- 2021-06-11
 
 * Support for GHC 9.0 in place.
+
+## 1.0.0.0 -- 2021-06-12
+
+* Switched to support `parsley-core` as the base
+* Introduced the `Parsley.Internal.Bridge` module to provide functions for the plugin to latch onto
diff --git a/parsley-garnish.cabal b/parsley-garnish.cabal
--- a/parsley-garnish.cabal
+++ b/parsley-garnish.cabal
@@ -1,5 +1,5 @@
 name:               parsley-garnish
-version:            0.1.0.1
+version:            1.0.0.0
 synopsis:           A collection of GHC plugins to work with parsley
 description:        This package contains a collection (for now one) to help
                     remove boilerplate when writing parsers using @parsley@.
@@ -16,6 +16,10 @@
 extra-doc-files:    ChangeLog.md
                     README.md
 cabal-version:      1.18
+tested-with:        GHC == 8.6.5,
+                    GHC == 8.8.4,
+                    GHC == 8.10.5,
+                    GHC == 9.0.1
 
 library
   exposed-modules:  
@@ -23,6 +27,7 @@
 --                    Parsley.LiftPlugin
 --                    Parsley.OverloadedSyntaxPlugin
                     Parsley.OverloadedQuotesPlugin
+                    Parsley.Internal.Bridge
   other-modules:    Parsley.PluginUtils
 --                    -- Lift Plugin
 --                    Parsley.LiftPlugin.Plugin
@@ -36,7 +41,7 @@
                     Parsley.OverloadedQuotesPlugin.Plugin
 
   build-depends:    base                >= 4.10    && < 5,
-                    parsley             >= 0.1     && < 0.2,
+                    parsley-core        >= 1       && < 2,
                     template-haskell    >= 2.14    && < 3,
                     ghc-tcplugins-extra >= 0.3     && < 0.5,
                     ghc                 >= 8.6     && < 9.2,
diff --git a/src/Parsley/Internal/Bridge.hs b/src/Parsley/Internal/Bridge.hs
new file mode 100644
--- /dev/null
+++ b/src/Parsley/Internal/Bridge.hs
@@ -0,0 +1,45 @@
+{-|
+Module      : Parsley.Internal.Bridge
+Description : Stable and package independent names for portions of the @parsley-core@ API
+License     : BSD-3-CLAUSE
+Maintainer  : Jamie Willis
+Stability   : stable
+
+The plugins in this package depend on internals defined in @parsley-core@. This
+is fine, but we'd prefer our users to not have to explicitly depend on @parsley-core@
+to use the plugins. This module is used to provide stable names for the plugins
+to latch onto. It should not be imported by users of the plugins!
+-}
+module Parsley.Internal.Bridge (_code, _val, makeQ, mkVal, mkCode) where
+
+import qualified Parsley.Internal (Quapplicative(..), Code)
+
+{-|
+Re-export of `Parsley.Internal._code`
+-}
+_code :: Parsley.Internal.Quapplicative q => q a -> Parsley.Internal.Code a
+_code = Parsley.Internal._code
+
+{-|
+Re-export of `Parsley.Internal._val`
+-}
+_val :: Parsley.Internal.Quapplicative q => q a -> a
+_val  = Parsley.Internal._val
+
+{-|
+Re-export of `Parsley.Internal.makeQ`
+-}
+makeQ :: Parsley.Internal.Quapplicative q => a -> Parsley.Internal.Code a -> q a
+makeQ = Parsley.Internal.makeQ
+
+{-|
+Produces `Parsley.Internal.Quapplicative` values without code (unsafe!)
+-}
+mkVal :: Parsley.Internal.Quapplicative q => a -> q a
+mkVal x = Parsley.Internal.makeQ x undefined
+
+{-|
+Produces `Parsley.Internal.Quapplicative` values without values (unsafe!)
+-}
+mkCode :: Parsley.Internal.Quapplicative q => Parsley.Internal.Code a -> q a
+mkCode qx = Parsley.Internal.makeQ undefined qx
diff --git a/src/Parsley/OverloadedQuotesPlugin/Plugin.hs b/src/Parsley/OverloadedQuotesPlugin/Plugin.hs
--- a/src/Parsley/OverloadedQuotesPlugin/Plugin.hs
+++ b/src/Parsley/OverloadedQuotesPlugin/Plugin.hs
@@ -12,7 +12,7 @@
 import Data.Generics (GenericT, GenericQ, mkT, mkQ, everywhere, gmapT)
 import GHC.Generics  (Generic)
 
-import Parsley.PluginUtils (lookupModuleInPackage, lookupName, lookupNames)
+import Parsley.PluginUtils (lookupModule, lookupNames)
 
 #if __GLASGOW_HASKELL__ >= 900
 import GHC.Driver.Plugins       (Plugin (..), defaultPlugin, purePlugin)
@@ -58,27 +58,29 @@
 data QOps a = QOps {
     _code :: a,
     _val :: a,
-    makeQ :: a
+    makeQ :: a,
+    mkCode :: a,
+    mkVal :: a
   } deriving (Functor, Foldable, Traversable, Generic)
 
 quapplicativeStrings :: QOps String
 quapplicativeStrings = QOps {
     _code = "_code",
     _val  = "_val",
-    makeQ = "makeQ"
+    makeQ = "makeQ",
+    mkCode = "mkCode",
+    mkVal = "mkVal"
   }
 
 overloadedQuotes :: [GHC.CommandLineOption] -> TcGblEnv -> GHC.HsGroup GHC.GhcRn -> TcM (TcGblEnv, GHC.HsGroup GHC.GhcRn)
 overloadedQuotes _ gEnv rn = do
   hscEnv <- GHC.getTopEnv
-  parsley <- lookupModuleInPackage hscEnv "parsley" "Parsley.Internal.Common.Utils"
+  parsley <- lookupModule hscEnv "Parsley.Internal.Bridge"
   qops <- lookupNames parsley quapplicativeStrings
-  prelude <- lookupModuleInPackage hscEnv "base" "GHC.Err"
-  undef <- lookupName prelude "undefined"
   -- This is a little inefficient, since the top-down transformation means no quotes can be
   -- found under a top-level one: we use a top-down version of everywhereBut to stop traversal
   -- of this whenever it fires
-  return (gEnv, onlyTopmost (mkQ False isQuote) (mkT (transformUTHQuote qops undef)) rn)
+  return (gEnv, onlyTopmost (mkQ False isQuote) (mkT (transformUTHQuote qops)) rn)
 
 mkApp :: GHC.SrcSpan -> Expr -> Expr -> Expr
 mkApp s f = GHC.L s . Expr.HsApp noExt f . mkPar s
@@ -103,17 +105,19 @@
 -- the original quote. Perhaps in that case we could just inline the definition into both holes...
 -- As `transform` works bottom up, we can always assume nested quotes are already handled: this might
 -- get tricky, however.
-transformUTHQuote :: QOps GHC.Name -> GHC.Name -> Expr -> Expr
-transformUTHQuote ops undef (LUTHQuote s ex ex' x) = --pprTouch "new quote" $
+transformUTHQuote :: QOps GHC.Name -> Expr -> Expr
+transformUTHQuote ops (LUTHQuote s ex ex' x) = --pprTouch "new quote" $
   mkPar s (makeQS `mkAppS` everywhere (mkT (transformUTHQuoteVar (_val ops) makeVal)) x
                   `mkAppS` mkQuote (everywhere (mkT (transformUTHQuoteCode (_code ops) makeCode)) x))
   where
     mkQuote y = GHC.L s (Expr.HsBracket ex (Expr.TExpBr ex' y))
     mkAppS = mkApp s
     makeQS = mkVar s (makeQ ops)
-    makeVal y = mkPar s (makeQS `mkAppS` y `mkAppS` mkVar s undef)
-    makeCode y = mkPar s (makeQS `mkAppS` mkVar s undef `mkAppS` y)
-transformUTHQuote _ _ x = x
+    mkValS = mkVar s (mkVal ops)
+    mkCodeS = mkVar s (mkCode ops)
+    makeVal y = mkPar s (mkValS `mkAppS` y)
+    makeCode y = mkPar s (mkCodeS `mkAppS` y)
+transformUTHQuote _ x = x
 
 transformUTHQuoteVar :: GHC.Name -> (Expr -> Expr) -> Expr -> Expr
 transformUTHQuoteVar _    makeVal (LUTHQuote _ _ _ x)      = makeVal x
