diff --git a/hls-retrie-plugin.cabal b/hls-retrie-plugin.cabal
--- a/hls-retrie-plugin.cabal
+++ b/hls-retrie-plugin.cabal
@@ -1,6 +1,6 @@
 cabal-version:      2.2
 name:               hls-retrie-plugin
-version:            1.0.1.4
+version:            1.0.2.0
 synopsis:           Retrie integration plugin for Haskell Language Server
 description:
   Please see the README on GitHub at <https://github.com/haskell/haskell-language-server#readme>
@@ -18,18 +18,20 @@
   build-depends:
     , aeson
     , base                  >=4.12    && <5
+    , bytestring
     , containers
     , deepseq
     , directory
     , extra
     , ghc
-    , ghcide                ^>=1.5.0
+    , ghcide                ^>=1.6
     , hashable
-    , hls-plugin-api        >=1.1     && <1.3
+    , hls-plugin-api        ^>=1.3
     , lsp
     , lsp-types
     , retrie                >=0.1.1.0
     , safe-exceptions
+    , stm
     , text
     , transformers
     , unordered-containers
diff --git a/src/Ide/Plugin/Retrie.hs b/src/Ide/Plugin/Retrie.hs
--- a/src/Ide/Plugin/Retrie.hs
+++ b/src/Ide/Plugin/Retrie.hs
@@ -14,24 +14,25 @@
 
 {-# OPTIONS -Wno-orphans #-}
 
-module Ide.Plugin.Retrie (descriptor, response, handleMaybe, handleMaybeM) where
+module Ide.Plugin.Retrie (descriptor) where
 
 import           Control.Concurrent.Extra             (readVar)
+import           Control.Concurrent.STM               (readTVarIO)
 import           Control.Exception.Safe               (Exception (..),
                                                        SomeException, catch,
                                                        throwIO, try)
 import           Control.Monad                        (forM, unless)
-import           Control.Monad.Extra                  (maybeM)
 import           Control.Monad.IO.Class               (MonadIO (liftIO))
 import           Control.Monad.Trans.Class            (MonadTrans (lift))
-import           Control.Monad.Trans.Except           (ExceptT (..), runExceptT,
-                                                       throwE)
+import           Control.Monad.Trans.Except           (ExceptT (ExceptT),
+                                                       runExceptT)
 import           Control.Monad.Trans.Maybe
 import           Data.Aeson                           (FromJSON (..),
                                                        ToJSON (..),
                                                        Value (Null),
                                                        genericParseJSON)
 import qualified Data.Aeson                           as Aeson
+import qualified Data.ByteString                      as BS
 import           Data.Bifunctor                       (Bifunctor (first),
                                                        second)
 import           Data.Coerce
@@ -44,7 +45,7 @@
 import           Data.List.Extra                      (find, nubOrdOn)
 import           Data.String                          (IsString (fromString))
 import qualified Data.Text                            as T
-import qualified Data.Text.IO                         as T
+import qualified Data.Text.Encoding                   as T
 import           Data.Typeable                        (Typeable)
 import           Development.IDE                      hiding (pluginHandlers)
 import           Development.IDE.Core.PositionMapping
@@ -357,7 +358,7 @@
   Bool ->
   IO ([CallRetrieError], WorkspaceEdit)
 callRetrie state session rewrites origin restrictToOriginatingFile = do
-  knownFiles <- toKnownFiles . unhashed <$> readVar (knownTargetsVar $ shakeExtras state)
+  knownFiles <- toKnownFiles . unhashed <$> readTVarIO (knownTargetsVar $ shakeExtras state)
   let reuseParsedModule f = do
         pm <-
           useOrFail "GetParsedModule" NoParse GetParsedModule f
@@ -385,7 +386,7 @@
             runAction "Retrie.GetFileContents" state $ getFileContents nt
           case mbContentsVFS of
             Just contents -> return contents
-            Nothing       -> T.readFile (fromNormalizedFilePath nt)
+            Nothing       -> T.decodeUtf8 <$> BS.readFile (fromNormalizedFilePath nt)
         if any (T.isPrefixOf "#if" . T.toLower) (T.lines contents)
           then do
             fixitiesRef <- newIORef mempty
@@ -500,20 +501,6 @@
 useRule label = _useRuleStale ("Retrie." <> label)
 
 -------------------------------------------------------------------------------
--- Error handling combinators
-
-handleMaybe :: Monad m => e -> Maybe b -> ExceptT e m b
-handleMaybe msg = maybe (throwE msg) return
-
-handleMaybeM :: Monad m => e -> m (Maybe b) -> ExceptT e m b
-handleMaybeM msg act = maybeM (throwE msg) return $ lift act
-
-response :: Monad m => ExceptT String m a -> m (Either ResponseError a)
-response =
-  fmap (first (\msg -> ResponseError InternalError (fromString msg) Nothing))
-    . runExceptT
-
--------------------------------------------------------------------------------
 -- Serialization wrappers and instances
 
 deriving instance Eq RewriteSpec
@@ -529,7 +516,7 @@
 data QualName = QualName {qual, name :: String}
   deriving (Eq, Show, Generic, FromJSON, ToJSON)
 
-data IE name
+newtype IE name
   = IEVar name
   deriving (Eq, Show, Generic, FromJSON, ToJSON)
 
