diff --git a/Codec/Encryption/OpenPGP/Signatures.hs b/Codec/Encryption/OpenPGP/Signatures.hs
--- a/Codec/Encryption/OpenPGP/Signatures.hs
+++ b/Codec/Encryption/OpenPGP/Signatures.hs
@@ -23,8 +23,8 @@
 import qualified Data.ByteString as B
 import qualified Data.ByteString.Lazy as BL
 import Data.Either (lefts, rights)
-import Data.IxSet ((@=))
-import qualified Data.IxSet as IxSet
+import Data.IxSet.Typed ((@=))
+import qualified Data.IxSet.Typed as IxSet
 import Data.List.NonEmpty (NonEmpty(..))
 import Data.Text (Text)
 import Data.Time.Clock (UTCTime(..), diffUTCTime)
diff --git a/Codec/Encryption/OpenPGP/Types.hs b/Codec/Encryption/OpenPGP/Types.hs
--- a/Codec/Encryption/OpenPGP/Types.hs
+++ b/Codec/Encryption/OpenPGP/Types.hs
@@ -3,6 +3,7 @@
 -- This software is released under the terms of the Expat license.
 -- (See the LICENSE file).
 
+{-# LANGUAGE DataKinds #-}
 {-# LANGUAGE DeriveDataTypeable #-}
 {-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE ExistentialQuantification #-}
@@ -32,7 +33,7 @@
 import Data.Char (toLower, toUpper)
 import Data.Data (Data)
 import Data.Hashable (Hashable(..))
-import Data.IxSet (IxSet)
+import Data.IxSet.Typed (IxSet)
 import Data.List (unfoldr)
 import Data.List.NonEmpty (NonEmpty)
 import qualified Data.List.NonEmpty as NE
@@ -1197,7 +1198,8 @@
 
 instance A.ToJSON TK
 
-type Keyring = IxSet TK
+type KeyringIxs = '[EightOctetKeyId, TwentyOctetFingerprint, Text]
+type Keyring = IxSet KeyringIxs TK
 
 class Packet a where
     data PacketType a :: *
diff --git a/Data/Conduit/OpenPGP/Keyring.hs b/Data/Conduit/OpenPGP/Keyring.hs
--- a/Data/Conduit/OpenPGP/Keyring.hs
+++ b/Data/Conduit/OpenPGP/Keyring.hs
@@ -11,7 +11,7 @@
 
 import Data.Conduit
 import qualified Data.Conduit.List as CL
-import Data.IxSet (empty, insert)
+import Data.IxSet.Typed (empty, insert)
 
 import Codec.Encryption.OpenPGP.KeyringParser (finalizeParsing, parseAChunk, parseTK)
 import Codec.Encryption.OpenPGP.Types
diff --git a/Data/Conduit/OpenPGP/Keyring/Instances.hs b/Data/Conduit/OpenPGP/Keyring/Instances.hs
--- a/Data/Conduit/OpenPGP/Keyring/Instances.hs
+++ b/Data/Conduit/OpenPGP/Keyring/Instances.hs
@@ -3,6 +3,10 @@
 -- This software is released under the terms of the Expat license.
 -- (See the LICENSE file).
 
+{-# LANGUAGE FlexibleInstances #-}
+{-# LANGUAGE MultiParamTypeClasses #-}
+{-# LANGUAGE TypeSynonymInstances #-}
+
 module Data.Conduit.OpenPGP.Keyring.Instances (
 ) where
 
@@ -14,18 +18,17 @@
 import Data.Either (rights)
 import Data.Function (on)
 import qualified Data.HashMap.Lazy as HashMap
-import Data.IxSet (Indexable(..), ixSet, ixFun)
+import Data.IxSet.Typed (Indexable(..), ixList, ixFun)
 import Data.List (nub, sort)
 import qualified Data.Map as Map
 import Data.Semigroup ((<>), Semigroup)
 import Data.Text (Text)
 
-instance Indexable TK where
-    empty = ixSet
-                [ ixFun getEOKIs
-                , ixFun getTOFs
-                , ixFun getUIDs
-                ]
+instance Indexable KeyringIxs TK where
+    indices = ixList
+                (ixFun getEOKIs)
+                (ixFun getTOFs)
+                (ixFun getUIDs)
 
 getEOKIs :: TK -> [EightOctetKeyId]
 getEOKIs tk = rights (map eightOctetKeyID (tk ^.. biplate :: [PKPayload]))
diff --git a/bench/mark.hs b/bench/mark.hs
--- a/bench/mark.hs
+++ b/bench/mark.hs
@@ -10,7 +10,7 @@
 import Control.Monad.Trans.Resource (runResourceT)
 import Data.Conduit.Serialization.Binary (conduitGet)
 import Data.Conduit.OpenPGP.Keyring (conduitToTKs, sinkKeyringMap)
-import qualified Data.IxSet as IxSet
+import qualified Data.IxSet.Typed as IxSet
 import Data.Binary (get)
 
 import qualified Data.Conduit as DC
diff --git a/hOpenPGP.cabal b/hOpenPGP.cabal
--- a/hOpenPGP.cabal
+++ b/hOpenPGP.cabal
@@ -1,5 +1,5 @@
 Name:                hOpenPGP
-Version:             2.1
+Version:             2.2
 Synopsis:            native Haskell implementation of OpenPGP (RFC4880)
 Description:         native Haskell implementation of OpenPGP (RFC4880)
 Homepage:            http://floss.scru.org/hOpenPGP/
@@ -193,7 +193,7 @@
                , errors
                , hashable
                , incremental-parser
-               , ixset                 >= 1.0
+               , ixset-typed
                , lens                  >= 3.0
                , monad-loops
                , nettle
@@ -244,7 +244,7 @@
                , errors
                , hashable
                , incremental-parser
-               , ixset                 >= 1.0
+               , ixset-typed
                , lens                  >= 3.0
                , monad-loops
                , nettle
@@ -297,7 +297,7 @@
                , errors
                , hashable
                , incremental-parser
-               , ixset                 >= 1.0
+               , ixset-typed
                , lens                  >= 3.0
                , monad-loops
                , nettle
@@ -328,4 +328,4 @@
 source-repository this
   type:     git
   location: git://git.debian.org/users/clint/hOpenPGP.git
-  tag:      v2.1
+  tag:      v2.2
diff --git a/tests/suite.hs b/tests/suite.hs
--- a/tests/suite.hs
+++ b/tests/suite.hs
@@ -29,7 +29,7 @@
 import Data.Conduit.OpenPGP.Decrypt (conduitDecrypt)
 import Data.Conduit.OpenPGP.Keyring (conduitToTKs, conduitToTKsDropping, sinkKeyringMap)
 import Data.Conduit.OpenPGP.Verify (conduitVerify)
-import Data.IxSet ((@=), getOne)
+import Data.IxSet.Typed ((@=), getOne)
 import Data.Maybe (isJust)
 import Data.Binary (get, put)
 import Data.Binary.Get (runGetOrFail, Get)
