diff --git a/hls-alternate-number-format-plugin.cabal b/hls-alternate-number-format-plugin.cabal
--- a/hls-alternate-number-format-plugin.cabal
+++ b/hls-alternate-number-format-plugin.cabal
@@ -1,6 +1,6 @@
 cabal-version:      2.4
 name:               hls-alternate-number-format-plugin
-version:            2.0.0.1
+version:            2.1.0.0
 synopsis:           Provide Alternate Number Formats plugin for Haskell Language Server
 description:
   Please see the README on GitHub at <https://github.com/haskell/haskell-language-server#readme>
@@ -32,13 +32,13 @@
     , base                 >=4.12 && < 5
     , containers
     , extra
-    , ghcide               == 2.0.0.1
+    , ghcide               == 2.1.0.0
     , ghc-boot-th
     , hls-graph
-    , hls-plugin-api       == 2.0.0.1
+    , hls-plugin-api       == 2.1.0.0
     , hie-compat
     , lens
-    , lsp                  ^>=1.6
+    , lsp                  ^>=2.1.0.0
     , mtl
     , regex-tdfa
     , syb
@@ -64,7 +64,7 @@
     , base                 >=4.12 && < 5
     , filepath
     , hls-alternate-number-format-plugin
-    , hls-test-utils       == 2.0.0.1
+    , hls-test-utils       == 2.1.0.0
     , lsp
     , QuickCheck
     , regex-tdfa
diff --git a/src/Ide/Plugin/AlternateNumberFormat.hs b/src/Ide/Plugin/AlternateNumberFormat.hs
--- a/src/Ide/Plugin/AlternateNumberFormat.hs
+++ b/src/Ide/Plugin/AlternateNumberFormat.hs
@@ -4,36 +4,39 @@
 {-# LANGUAGE TypeOperators #-}
 module Ide.Plugin.AlternateNumberFormat (descriptor, Log(..)) where
 
-import           Control.Lens                  ((^.))
-import           Control.Monad.IO.Class        (MonadIO, liftIO)
-import           Control.Monad.Except          (ExceptT)
-import qualified Data.HashMap.Strict           as HashMap
-import           Data.Text                     (Text, unpack)
-import qualified Data.Text                     as T
-import           Development.IDE               (GetParsedModule (GetParsedModule),
-                                                IdeState, RuleResult, Rules,
-                                                define, realSrcSpanToRange,
-                                                runAction, use)
-import qualified Development.IDE.Core.Shake    as Shake
-import           Development.IDE.GHC.Compat    hiding (getSrcSpan)
-import           Development.IDE.GHC.Util      (getExtensions)
-import           Development.IDE.Graph.Classes (Hashable, NFData, rnf)
-import           Development.IDE.Spans.Pragmas (NextPragmaInfo, getFirstPragma,
-                                                insertNewPragma)
-import           Development.IDE.Types.Logger  as Logger
-import           GHC.Generics                  (Generic)
-import           Ide.Plugin.Conversion         (AlternateFormat,
-                                                ExtensionNeeded (NeedsExtension, NoExtension),
-                                                alternateFormat)
+import           Control.Lens                     ((^.))
+import           Control.Monad.Except             (ExceptT)
+import           Control.Monad.IO.Class           (MonadIO, liftIO)
+import qualified Data.Map                         as Map
+import           Data.Text                        (Text, unpack)
+import qualified Data.Text                        as T
+import           Development.IDE                  (GetParsedModule (GetParsedModule),
+                                                   IdeState, RuleResult, Rules,
+                                                   define, realSrcSpanToRange,
+                                                   runAction, use)
+import           Development.IDE.Core.PluginUtils
+import qualified Development.IDE.Core.Shake       as Shake
+import           Development.IDE.GHC.Compat       hiding (getSrcSpan)
+import           Development.IDE.GHC.Util         (getExtensions)
+import           Development.IDE.Graph.Classes    (Hashable, NFData, rnf)
+import           Development.IDE.Spans.Pragmas    (NextPragmaInfo,
+                                                   getFirstPragma,
+                                                   insertNewPragma)
+import           GHC.Generics                     (Generic)
+import           Ide.Logger                       as Logger
+import           Ide.Plugin.Conversion            (AlternateFormat,
+                                                   ExtensionNeeded (NeedsExtension, NoExtension),
+                                                   alternateFormat)
+import           Ide.Plugin.Error
 import           Ide.Plugin.Literals
-import           Ide.Plugin.RangeMap           (RangeMap)
-import qualified Ide.Plugin.RangeMap           as RangeMap
-import           Ide.PluginUtils               (getNormalizedFilePath,
-                                                handleMaybeM, pluginResponse)
+import           Ide.Plugin.RangeMap              (RangeMap)
+import qualified Ide.Plugin.RangeMap              as RangeMap
 import           Ide.Types
-import           Language.LSP.Types
-import qualified Language.LSP.Types.Lens       as L
+import qualified Language.LSP.Protocol.Lens       as L
+import           Language.LSP.Protocol.Message
+import           Language.LSP.Protocol.Types
 
+
 newtype Log = LogShake Shake.Log deriving Show
 
 instance Pretty Log where
@@ -42,7 +45,7 @@
 
 descriptor :: Recorder (WithPriority Log) -> PluginId -> PluginDescriptor IdeState
 descriptor recorder pId = (defaultPluginDescriptor pId)
-    { pluginHandlers = mkPluginHandler STextDocumentCodeAction codeActionHandler
+    { pluginHandlers = mkPluginHandler SMethod_TextDocumentCodeAction codeActionHandler
     , pluginRules = collectLiteralsRule recorder
     }
 
@@ -79,9 +82,9 @@
         litMap = RangeMap.fromList (realSrcSpanToRange . getSrcSpan) <$> lits
     pure ([], CLR <$> litMap <*> exts)
 
-codeActionHandler :: PluginMethodHandler IdeState 'TextDocumentCodeAction
-codeActionHandler state pId (CodeActionParams _ _ docId currRange _) = pluginResponse $ do
-    nfp <- getNormalizedFilePath (docId ^. L.uri)
+codeActionHandler :: PluginMethodHandler IdeState 'Method_TextDocumentCodeAction
+codeActionHandler state pId (CodeActionParams _ _ docId currRange _) = do
+    nfp <- getNormalizedFilePathE (docId ^. L.uri)
     CLR{..} <- requestLiterals pId state nfp
     pragma <- getFirstPragma pId state nfp
         -- remove any invalid literals (see validTarget comment)
@@ -90,18 +93,18 @@
         literalPairs = map (\lit -> (lit, alternateFormat lit)) litsInRange
         -- make a code action for every literal and its' alternates (then flatten the result)
         actions = concatMap (\(lit, alts) -> map (mkCodeAction nfp lit enabledExtensions pragma) alts) literalPairs
-    pure $ List actions
+    pure $ InL $ actions
     where
         mkCodeAction :: NormalizedFilePath -> Literal -> [GhcExtension] -> NextPragmaInfo -> AlternateFormat -> Command |? CodeAction
         mkCodeAction nfp lit enabled npi af@(alt, ext) = InR CodeAction {
             _title = mkCodeActionTitle lit af enabled
-            , _kind = Just $ CodeActionUnknown "quickfix.literals.style"
+            , _kind = Just $ CodeActionKind_Custom "quickfix.literals.style"
             , _diagnostics = Nothing
             , _isPreferred = Nothing
             , _disabled = Nothing
             , _edit = Just $ mkWorkspaceEdit nfp edits
             , _command = Nothing
-            , _xdata = Nothing
+            , _data_ = Nothing
             }
             where
                 edits =  [TextEdit (realSrcSpanToRange $ getSrcSpan lit) alt] <> pragmaEdit
@@ -112,7 +115,7 @@
         mkWorkspaceEdit :: NormalizedFilePath -> [TextEdit] -> WorkspaceEdit
         mkWorkspaceEdit nfp edits = WorkspaceEdit changes Nothing Nothing
             where
-                changes = Just $ HashMap.fromList [(filePathToUri $ fromNormalizedFilePath nfp, List edits)]
+                changes = Just $ Map.fromList [(filePathToUri $ fromNormalizedFilePath nfp, edits)]
 
 mkCodeActionTitle :: Literal -> AlternateFormat -> [GhcExtension] -> Text
 mkCodeActionTitle lit (alt, ext) ghcExts
@@ -127,8 +130,7 @@
 needsExtension :: Extension -> [GhcExtension] -> Bool
 needsExtension ext ghcExts = ext `notElem` map unExt ghcExts
 
-requestLiterals :: MonadIO m => PluginId -> IdeState -> NormalizedFilePath -> ExceptT String m CollectLiteralsResult
-requestLiterals (PluginId pId) state = handleMaybeM "Could not Collect Literals"
-                . liftIO
-                . runAction (unpack pId <> ".CollectLiterals") state
-                . use CollectLiterals
+requestLiterals :: MonadIO m => PluginId -> IdeState -> NormalizedFilePath -> ExceptT PluginError m CollectLiteralsResult
+requestLiterals (PluginId pId) state =
+    runActionE (unpack pId <> ".CollectLiterals") state
+    . useE CollectLiterals
diff --git a/test/Main.hs b/test/Main.hs
--- a/test/Main.hs
+++ b/test/Main.hs
@@ -9,8 +9,8 @@
 import qualified Data.Text                        as T
 import qualified Ide.Plugin.AlternateNumberFormat as AlternateNumberFormat
 import qualified Ide.Plugin.Conversion            as Conversion
-import           Language.LSP.Types               (toEither)
-import           Language.LSP.Types.Lens          (kind)
+import           Language.LSP.Protocol.Lens       (kind)
+import           Language.LSP.Protocol.Types      (toEither)
 import           Properties.Conversion            (conversions)
 import           System.FilePath                  ((<.>), (</>))
 import           Test.Hls
@@ -66,8 +66,8 @@
         isAlternateNumberCodeAction CodeAction{_kind} = case _kind of
           Nothing -> False
           Just kind -> case kind of
-            CodeActionUnknown txt -> txt == "quickfix.literals.style"
-            _                     -> False
+            CodeActionKind_Custom txt -> txt == "quickfix.literals.style"
+            _                         -> False
 
 -- most helpers derived from explicit-imports-plugin Main Test file
 
