diff --git a/hls-plugin-api.cabal b/hls-plugin-api.cabal
--- a/hls-plugin-api.cabal
+++ b/hls-plugin-api.cabal
@@ -1,6 +1,6 @@
 cabal-version: 2.4
 name:          hls-plugin-api
-version:       1.3.0.0
+version:       1.4.0.0
 synopsis:      Haskell Language Server API for plugin communication
 description:
   Please see the README on GitHub at <https://github.com/haskell/haskell-language-server#readme>
@@ -26,7 +26,6 @@
 
 library
   exposed-modules:
-    Ide.Logger
     Ide.Plugin.Config
     Ide.Plugin.ConfigUtils
     Ide.Plugin.Properties
@@ -46,11 +45,10 @@
     , extra
     , ghc
     , hashable
-    , hls-graph             ^>= 1.6
-    , hslogger
+    , hls-graph             ^>= 1.7
     , lens
     , lens-aeson
-    , lsp                   ^>=1.4.0.0
+    , lsp                   >=1.4.0.0 && < 1.6
     , opentelemetry
     , optparse-applicative
     , process
diff --git a/src/Ide/Logger.hs b/src/Ide/Logger.hs
deleted file mode 100644
--- a/src/Ide/Logger.hs
+++ /dev/null
@@ -1,29 +0,0 @@
-{- | Provides an implementation of the ghcide @Logger@ which uses
-   @System.Log.Logger@ under the hood.
--}
-module Ide.Logger
-  (
-    logm
-  , debugm
-  , warningm
-  , errorm
-  ) where
-
-import           Control.Monad.IO.Class
-import           System.Log.Logger
-
--- ---------------------------------------------------------------------
-
-logm :: MonadIO m => String -> m ()
-logm s = liftIO $ infoM "hls" s
-
-debugm :: MonadIO m => String -> m ()
-debugm s = liftIO $ debugM "hls" s
-
-warningm :: MonadIO m => String -> m ()
-warningm s = liftIO $ warningM "hls" s
-
-errorm :: MonadIO m => String -> m ()
-errorm s = liftIO $ errorM "hls" s
-
--- ---------------------------------------------------------------------
diff --git a/src/Ide/PluginUtils.hs b/src/Ide/PluginUtils.hs
--- a/src/Ide/PluginUtils.hs
+++ b/src/Ide/PluginUtils.hs
@@ -27,6 +27,7 @@
     subRange,
     positionInRange,
     usePropertyLsp,
+    getNormalizedFilePath,
     response,
     handleMaybe,
     handleMaybeM,
@@ -34,6 +35,7 @@
 where
 
 
+import           Control.Lens                    ((^.))
 import           Control.Monad.Extra             (maybeM)
 import           Control.Monad.Trans.Class       (lift)
 import           Control.Monad.Trans.Except      (ExceptT, runExceptT, throwE)
@@ -54,6 +56,7 @@
                                                   SemanticTokensEdit (_start))
 import qualified Language.LSP.Types              as J
 import           Language.LSP.Types.Capabilities
+import           Language.LSP.Types.Lens         (uri)
 
 -- ---------------------------------------------------------------------
 
@@ -243,6 +246,15 @@
 
 -- ---------------------------------------------------------------------
 
+getNormalizedFilePath :: Monad m => PluginId -> TextDocumentIdentifier -> ExceptT String m NormalizedFilePath
+getNormalizedFilePath (PluginId plId) docId = handleMaybe errMsg
+        $ uriToNormalizedFilePath
+        $ toNormalizedUri uri'
+    where
+        errMsg = T.unpack $ "Error(" <> plId <> "): converting " <> getUri uri' <> " to NormalizedFilePath"
+        uri' = docId ^. uri
+
+-- ---------------------------------------------------------------------
 handleMaybe :: Monad m => e -> Maybe b -> ExceptT e m b
 handleMaybe msg = maybe (throwE msg) return
 
diff --git a/src/Ide/Types.hs b/src/Ide/Types.hs
--- a/src/Ide/Types.hs
+++ b/src/Ide/Types.hs
@@ -315,7 +315,7 @@
   = PluginHandler (PluginId -> a -> MessageParams m -> LspM Config (NonEmpty (Either ResponseError (ResponseResult m))))
 
 newtype PluginNotificationHandler a (m :: Method FromClient Notification)
-  = PluginNotificationHandler (PluginId -> a -> MessageParams m -> LspM Config ())
+  = PluginNotificationHandler (PluginId -> a -> VFS -> MessageParams m -> LspM Config ())
 
 newtype PluginHandlers a             = PluginHandlers             (DMap IdeMethod       (PluginHandler a))
 newtype PluginNotificationHandlers a = PluginNotificationHandlers (DMap IdeNotification (PluginNotificationHandler a))
@@ -331,15 +331,15 @@
 instance Semigroup (PluginNotificationHandlers a) where
   (PluginNotificationHandlers a) <> (PluginNotificationHandlers b) = PluginNotificationHandlers $ DMap.unionWithKey go a b
     where
-      go _ (PluginNotificationHandler f) (PluginNotificationHandler g) = PluginNotificationHandler $ \pid ide params ->
-        f pid ide params >> g pid ide params
+      go _ (PluginNotificationHandler f) (PluginNotificationHandler g) = PluginNotificationHandler $ \pid ide vfs params ->
+        f pid ide vfs params >> g pid ide vfs params
 
 instance Monoid (PluginNotificationHandlers a) where
   mempty = PluginNotificationHandlers mempty
 
 type PluginMethodHandler a m = a -> PluginId -> MessageParams m -> LspM Config (Either ResponseError (ResponseResult m))
 
-type PluginNotificationMethodHandler a m = a -> PluginId -> MessageParams m -> LspM Config ()
+type PluginNotificationMethodHandler a m = a -> VFS -> PluginId -> MessageParams m -> LspM Config ()
 
 -- | Make a handler for plugins with no extra data
 mkPluginHandler
@@ -360,7 +360,7 @@
 mkPluginNotificationHandler m f
     = PluginNotificationHandlers $ DMap.singleton (IdeNotification m) (PluginNotificationHandler f')
   where
-    f' pid ide = f ide pid
+    f' pid ide vfs = f ide vfs pid
 
 defaultPluginDescriptor :: PluginId -> PluginDescriptor ideState
 defaultPluginDescriptor plId =
@@ -396,6 +396,7 @@
 
 newtype PluginId = PluginId T.Text
   deriving (Show, Read, Eq, Ord)
+
 instance IsString PluginId where
   fromString = PluginId . T.pack
 
