diff --git a/hls-ormolu-plugin.cabal b/hls-ormolu-plugin.cabal
--- a/hls-ormolu-plugin.cabal
+++ b/hls-ormolu-plugin.cabal
@@ -1,6 +1,6 @@
 cabal-version:      2.4
 name:               hls-ormolu-plugin
-version:            2.0.0.1
+version:            2.1.0.0
 synopsis:           Integration with the Ormolu code formatter
 description:
   Please see the README on GitHub at <https://github.com/haskell/haskell-language-server#readme>
@@ -23,26 +23,28 @@
     location: https://github.com/haskell/haskell-language-server.git
 
 library
-  if impl(ghc >= 9.5)
+  if impl(ghc >= 9.7)
     buildable: False
   exposed-modules:  Ide.Plugin.Ormolu
   hs-source-dirs:   src
   build-depends:
     , base            >=4.12  && <5
+    , extra
     , filepath
     , ghc
     , ghc-boot-th
-    , ghcide          == 2.0.0.1
-    , hls-plugin-api  == 2.0.0.1
+    , ghcide          == 2.1.0.0
+    , hls-plugin-api  == 2.1.0.0
     , lens
     , lsp
-    , ormolu          ^>=0.1.2 || ^>= 0.2 || ^>= 0.3 || ^>= 0.5
+    , mtl
+    , ormolu          ^>=0.1.2 || ^>= 0.2 || ^>= 0.3 || ^>= 0.5 || ^>= 0.6 || ^>= 0.7
     , text
 
   default-language: Haskell2010
 
 test-suite tests
-  if impl(ghc >= 9.5)
+  if impl(ghc >= 9.7)
     buildable: False
   type:             exitcode-stdio-1.0
   default-language: Haskell2010
@@ -53,6 +55,7 @@
     , base
     , filepath
     , hls-ormolu-plugin
-    , hls-test-utils     == 2.0.0.1
+    , hls-test-utils     == 2.1.0.0
     , lsp-types
+    , text
     , ormolu
diff --git a/src/Ide/Plugin/Ormolu.hs b/src/Ide/Plugin/Ormolu.hs
--- a/src/Ide/Plugin/Ormolu.hs
+++ b/src/Ide/Plugin/Ormolu.hs
@@ -2,7 +2,7 @@
 {-# LANGUAGE LambdaCase        #-}
 {-# LANGUAGE OverloadedStrings #-}
 {-# LANGUAGE TypeApplications  #-}
-
+{-# LANGUAGE TypeOperators     #-}
 module Ide.Plugin.Ormolu
   ( descriptor
   , provider
@@ -11,7 +11,11 @@
 
 import           Control.Exception               (Handler (..), IOException,
                                                   SomeException (..), catches)
+import           Control.Monad.Except            (ExceptT (ExceptT), runExceptT,
+                                                  throwError)
+import           Control.Monad.Extra
 import           Control.Monad.IO.Class          (liftIO)
+import           Control.Monad.Trans
 import           Data.Functor                    ((<&>))
 import qualified Data.Text                       as T
 import           Development.IDE                 hiding (pluginHandlers)
@@ -19,30 +23,35 @@
 import qualified Development.IDE.GHC.Compat      as D
 import qualified Development.IDE.GHC.Compat.Util as S
 import           GHC.LanguageExtensions.Type
+import           Ide.Plugin.Error                (PluginError (PluginInternalError))
 import           Ide.PluginUtils
 import           Ide.Types                       hiding (Config)
+import qualified Ide.Types                       as Types
+import           Language.LSP.Protocol.Message
+import           Language.LSP.Protocol.Types
 import           Language.LSP.Server             hiding (defaultConfig)
-import           Language.LSP.Types
 import           Ormolu
 import           System.FilePath                 (takeFileName)
 
 -- ---------------------------------------------------------------------
 
-descriptor :: PluginId -> PluginDescriptor IdeState
-descriptor plId = (defaultPluginDescriptor plId)
-  { pluginHandlers = mkFormattingHandlers provider
+descriptor :: Recorder (WithPriority T.Text) -> PluginId -> PluginDescriptor IdeState
+descriptor recorder plId = (defaultPluginDescriptor plId)
+  { pluginHandlers = mkFormattingHandlers $ provider recorder
   }
 
 -- ---------------------------------------------------------------------
 
-provider :: FormattingHandler IdeState
-provider ideState typ contents fp _ = withIndefiniteProgress title Cancellable $ liftIO $ do
-  ghc <- runAction "Ormolu" ideState $ use GhcSession fp
+provider :: Recorder (WithPriority T.Text) -> FormattingHandler IdeState
+provider recorder ideState typ contents fp _ = ExceptT $ withIndefiniteProgress title Cancellable $ runExceptT $ do
+  ghc <- liftIO $ runAction "Ormolu" ideState $ use GhcSession fp
   let df = hsc_dflags . hscEnv <$> ghc
   fileOpts <- case df of
     Nothing -> pure []
     Just df -> pure $ fromDyn df
 
+  logWith recorder Debug $ "Using ormolu-" <> VERSION_ormolu
+
   let
     fullRegion = RegionIndices Nothing Nothing
     rangeRegion s e = RegionIndices (Just $ s + 1) (Just $ e + 1)
@@ -55,9 +64,14 @@
         CabalNotFound                -> Nothing
         CabalDidNotMention cabalInfo -> Just cabalInfo
         CabalFound cabalInfo         -> Just cabalInfo
+#if MIN_VERSION_ormolu(0,7,0)
+      (fixityOverrides, moduleReexports) <- getDotOrmoluForSourceFile fp'
+      let conf' = refineConfig ModuleSource cabalInfo (Just fixityOverrides) (Just moduleReexports) conf
+#else
       fixityOverrides <- traverse getFixityOverridesForSourceFile cabalInfo
       let conf' = refineConfig ModuleSource cabalInfo fixityOverrides conf
-          cont' = cont
+#endif
+      let cont' = cont
 #else
       let conf' = conf
           cont' = T.unpack cont
@@ -69,15 +83,18 @@
       ]
 
   case typ of
-    FormatText -> ret <$> fmt contents (mkConf fileOpts fullRegion)
-    FormatRange (Range (Position sl _) (Position el _)) ->
-      ret <$> fmt contents (mkConf fileOpts (rangeRegion (fromIntegral sl) (fromIntegral el)))
+    FormatText -> do
+      res <- liftIO $ fmt contents (mkConf fileOpts fullRegion)
+      ret res
+    FormatRange (Range (Position sl _) (Position el _)) -> do
+      res <- liftIO $ fmt contents (mkConf fileOpts (rangeRegion (fromIntegral sl) (fromIntegral el)))
+      ret res
  where
    title = T.pack $ "Formatting " <> takeFileName (fromNormalizedFilePath fp)
 
-   ret :: Either SomeException T.Text -> Either ResponseError (List TextEdit)
-   ret (Left err)  = Left . responseError . T.pack $ "ormoluCmd: " ++ show err
-   ret (Right new) = Right $ makeDiffTextEdit contents new
+   ret :: Either SomeException T.Text -> ExceptT PluginError (LspM Types.Config) ([TextEdit] |? Null)
+   ret (Left err)  = throwError $ PluginInternalError . T.pack $ "ormoluCmd: " ++ show err
+   ret (Right new) = pure $ InL $ makeDiffTextEdit contents new
 
    fromDyn :: D.DynFlags -> [DynOption]
    fromDyn df =
diff --git a/test/Main.hs b/test/Main.hs
--- a/test/Main.hs
+++ b/test/Main.hs
@@ -4,16 +4,17 @@
   ( main
   ) where
 
-import qualified Ide.Plugin.Ormolu  as Ormolu
-import           Language.LSP.Types
+import qualified Data.Text                   as T
+import qualified Ide.Plugin.Ormolu           as Ormolu
+import           Language.LSP.Protocol.Types
 import           System.FilePath
 import           Test.Hls
 
 main :: IO ()
 main = defaultTestRunner tests
 
-ormoluPlugin :: PluginTestDescriptor ()
-ormoluPlugin = mkPluginTestDescriptor' Ormolu.descriptor "ormolu"
+ormoluPlugin :: PluginTestDescriptor T.Text
+ormoluPlugin = mkPluginTestDescriptor Ormolu.descriptor "ormolu"
 
 tests :: TestTree
 tests = testGroup "ormolu"
