diff --git a/ipfs.cabal b/ipfs.cabal
--- a/ipfs.cabal
+++ b/ipfs.cabal
@@ -1,11 +1,11 @@
 cabal-version: 2.0
 
--- This file has been generated from package.yaml by hpack version 0.34.4.
+-- This file has been generated from package.yaml by hpack version 0.35.1.
 --
 -- see: https://github.com/sol/hpack
 
 name:           ipfs
-version:        1.4.0
+version:        1.4.1
 synopsis:       Access IPFS locally and remotely
 description:    Interact with the IPFS network by shelling out to a local IPFS node or communicating via the HTTP interface of a remote IPFS node.
 category:       Network
@@ -19,12 +19,12 @@
                 daniel@fission.codes,
                 steven@fission.codes,
                 james@fission.codes
-copyright:      © 2021 Fission Internet Software Services for Open Networks Inc.
+copyright:      © 2023 Fission Internet Software Services for Open Networks Inc.
 license:        Apache-2.0
 license-file:   LICENSE
 build-type:     Simple
 tested-with:
-    GHC==8.10.7
+    GHC==9.2.7
 extra-source-files:
     README.md
 
@@ -164,6 +164,8 @@
   type: exitcode-stdio-1.0
   main-is: Main.hs
   other-modules:
+      Paths_ipfs
+  autogen-modules:
       Paths_ipfs
   hs-source-dirs:
       test/doctest
diff --git a/library/Network/IPFS/Peer/Error.hs b/library/Network/IPFS/Peer/Error.hs
--- a/library/Network/IPFS/Peer/Error.hs
+++ b/library/Network/IPFS/Peer/Error.hs
@@ -18,4 +18,5 @@
   display = \case
     DecodeFailure err  -> "Unable to decode: " <> displayShow err
     CannotConnect peer -> "Unable to connect to " <> display peer
+    CannotDisconnect peer -> "Unable to disconnect from " <> display peer
     UnknownErr    msg  -> "Unknown IPFS peer list error: " <> display msg
diff --git a/library/Network/IPFS/SparseTree/Types.hs b/library/Network/IPFS/SparseTree/Types.hs
--- a/library/Network/IPFS/SparseTree/Types.hs
+++ b/library/Network/IPFS/SparseTree/Types.hs
@@ -3,7 +3,8 @@
   , Tag (..)
   ) where
 
-import qualified RIO.HashMap                as HashMap
+import qualified Data.Aeson.KeyMap          as Aeson.KeyMap
+import qualified Data.Aeson.Key             as Aeson.Key
 import qualified RIO.Map                    as Map
 import qualified RIO.Text                   as Text
 
@@ -57,13 +58,13 @@
   toJSON = \case
     Stub (Name name)  -> String <| Text.pack name
     Content (CID cid) -> String <| UTF8.stripN 1 cid
-    Directory dirMap  -> Object <| HashMap.fromList (jsonKV <$> Map.toList dirMap)
+    Directory dirMap  -> Object <| Aeson.KeyMap.fromList (jsonKV <$> Map.toList dirMap)
     where
-      jsonKV :: (Tag, SparseTree) -> (Text, Value)
+      jsonKV :: (Tag, SparseTree) -> (Aeson.Key.Key, Value)
       jsonKV (tag, subtree) = (jsonTag tag, toJSON subtree)
 
-      jsonTag (Key (Name n))   = Text.pack n
-      jsonTag (Hash (CID cid)) = UTF8.stripN 1 cid
+      jsonTag (Key (Name n))   = Aeson.Key.fromText (Text.pack n)
+      jsonTag (Hash (CID cid)) = Aeson.Key.fromText (UTF8.stripN 1 cid)
 
 data Tag
   = Key Name
