diff --git a/hls-explicit-imports-plugin.cabal b/hls-explicit-imports-plugin.cabal
--- a/hls-explicit-imports-plugin.cabal
+++ b/hls-explicit-imports-plugin.cabal
@@ -1,6 +1,6 @@
 cabal-version: 2.2
 name:          hls-explicit-imports-plugin
-version:       0.1.0.1
+version:       0.1.0.2
 synopsis:      Explicit imports plugin for Haskell Language Server
 license:       Apache-2.0
 license-file:  LICENSE
@@ -19,7 +19,8 @@
                ,    base        >=4.12 && <5
                ,    containers
                ,    deepseq
-               ,    haskell-lsp-types
+               ,    lsp-types
+               ,    lsp
                ,    hls-plugin-api
                ,    ghc
                ,    ghcide     >= 0.7.4
@@ -29,3 +30,4 @@
 
   default-language: Haskell2010
   include-dirs:     include
+  default-extensions: DataKinds, TypeOperators
diff --git a/src/Ide/Plugin/ExplicitImports.hs b/src/Ide/Plugin/ExplicitImports.hs
--- a/src/Ide/Plugin/ExplicitImports.hs
+++ b/src/Ide/Plugin/ExplicitImports.hs
@@ -29,7 +29,8 @@
 import GHC.Generics (Generic)
 import Ide.PluginUtils ( mkLspCommand )
 import Ide.Types
-import Language.Haskell.LSP.Types
+import Language.LSP.Types
+import Language.LSP.Server
 import PrelNames (pRELUDE)
 import RnNames
   ( findImportUsage,
@@ -45,14 +46,17 @@
 descriptor :: PluginId -> PluginDescriptor IdeState
 descriptor plId =
   (defaultPluginDescriptor plId)
-    { -- This plugin provides code lenses
-      pluginCodeLensProvider = Just lensProvider,
+    { 
       -- This plugin provides a command handler
       pluginCommands = [importLensCommand],
-      -- This plugin provides code actions
-      pluginCodeActionProvider = Just codeActionProvider,
       -- This plugin defines a new rule
-      pluginRules = minimalImportsRule
+      pluginRules = minimalImportsRule,
+      pluginHandlers = mconcat
+        [ -- This plugin provides code lenses
+          mkPluginHandler STextDocumentCodeLens lensProvider
+          -- This plugin provides code actions
+        , mkPluginHandler STextDocumentCodeAction codeActionProvider
+        ]
     }
 
 -- | The command descriptor
@@ -67,9 +71,10 @@
 
 -- | The actual command handler
 runImportCommand :: CommandFunction IdeState ImportCommandParams
-runImportCommand _lspFuncs _state (ImportCommandParams edit) = do
+runImportCommand _state (ImportCommandParams edit) = do
   -- This command simply triggers a workspace edit!
-  return (Right Null, Just (WorkspaceApplyEdit, ApplyWorkspaceEditParams edit))
+  _ <- sendRequest SWorkspaceApplyEdit (ApplyWorkspaceEditParams Nothing edit) (\_ -> pure ())
+  return (Right Null)
 
 -- | For every implicit import statement, return a code lens of the corresponding explicit import
 -- Example - for the module below:
@@ -81,15 +86,14 @@
 -- the provider should produce one code lens associated to the import statement:
 --
 -- > import Data.List (intercalate, sortBy)
-lensProvider :: CodeLensProvider IdeState
+lensProvider :: PluginMethodHandler IdeState TextDocumentCodeLens
 lensProvider
-  _lspFuncs -- LSP functions, not used
   state -- ghcide state, used to retrieve typechecking artifacts
   pId -- plugin Id
   CodeLensParams {_textDocument = TextDocumentIdentifier {_uri}}
     -- VSCode uses URIs instead of file paths
     -- haskell-lsp provides conversion functions
-    | Just nfp <- uriToNormalizedFilePath $ toNormalizedUri _uri =
+    | Just nfp <- uriToNormalizedFilePath $ toNormalizedUri _uri = liftIO $
       do
         mbMinImports <- runAction "" state $ useWithStale MinimalImports nfp
         case mbMinImports of
@@ -110,10 +114,10 @@
 
 -- | If there are any implicit imports, provide one code action to turn them all
 --   into explicit imports.
-codeActionProvider :: CodeActionProvider IdeState
-codeActionProvider _lspFuncs ideState _pId docId range _context
+codeActionProvider :: PluginMethodHandler IdeState TextDocumentCodeAction
+codeActionProvider ideState _pId (CodeActionParams _ _ docId range _context)
   | TextDocumentIdentifier {_uri} <- docId,
-    Just nfp <- uriToNormalizedFilePath $ toNormalizedUri _uri =
+    Just nfp <- uriToNormalizedFilePath $ toNormalizedUri _uri = liftIO $
     do
       pm <- runIde ideState $ use GetParsedModule nfp
       let insideImport = case pm of
@@ -132,7 +136,7 @@
                       maybe [] getMinimalImportsResult minImports,
                     Just e <- [mkExplicitEdit zeroMapping imp explicit]
                 ]
-              caExplicitImports = CACodeAction CodeAction {..}
+              caExplicitImports = InR CodeAction {..}
               _title = "Make all imports explicit"
               _kind = Just CodeActionQuickFix
               _command = Nothing
@@ -140,6 +144,8 @@
               _changes = Just $ HashMap.singleton _uri $ List edits
               _documentChanges = Nothing
               _diagnostics = Nothing
+              _isPreferred = Nothing
+              _disabled = Nothing
           return $ Right $ List [caExplicitImports | not (null edits)]
   | otherwise =
     return $ Right $ List []
@@ -238,7 +244,7 @@
       -- the command argument is simply the edit
       _arguments = Just [toJSON $ ImportCommandParams edit]
   -- create the command
-  _command <- Just <$> mkLspCommand pId importCommandId title _arguments
+      _command = Just $ mkLspCommand pId importCommandId title _arguments
   -- create and return the code lens
   return $ Just CodeLens {..}
 
