diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,15 +1,15 @@
-Changes in 1.0.0.2
-
-  * GHC 8.6+ compatibility for tests as well
-
-Changes in 1.0.0.1
-
-  * GHC 8.6 compatibility
-
-Changes in 1.0.0.0
+1.0.0.2
+-------
+* GHC 8.6+ compatibility for tests as well
 
-  * Compatibility with fixed-vector-1.0
+1.0.0.1
+-------
+* GHC 8.6 compatibility
 
-Changes in 0.6.0.0
+1.0.0.0
+-------
+* Compatibility with fixed-vector-1.0
 
-  * Initial release
+0.6.0.0
+-------
+* Initial release
diff --git a/Data/Vector/Fixed/Instances/CBOR.hs b/Data/Vector/Fixed/Instances/CBOR.hs
--- a/Data/Vector/Fixed/Instances/CBOR.hs
+++ b/Data/Vector/Fixed/Instances/CBOR.hs
@@ -1,5 +1,9 @@
+{-# LANGUAGE DerivingVia          #-}
 {-# LANGUAGE FlexibleContexts     #-}
+{-# LANGUAGE MagicHash            #-}
 {-# LANGUAGE ScopedTypeVariables  #-}
+{-# LANGUAGE StandaloneDeriving   #-}
+{-# LANGUAGE TypeApplications     #-}
 {-# LANGUAGE TypeFamilies         #-}
 {-# LANGUAGE UndecidableInstances #-}
 {-# OPTIONS_GHC -fno-warn-orphans #-}
@@ -10,42 +14,41 @@
 import           Codec.Serialise
 import           Codec.CBOR.Encoding           (Encoding,encodeListLen,encodeNull)
 import           Codec.CBOR.Decoding           (Decoder,decodeListLenOf,decodeNull)
-import           Data.Monoid                   ((<>))
-import           Data.Typeable                 (Proxy(..))
+import           GHC.Exts                      (proxy#)
 
-import           Data.Vector.Fixed             (Arity)
+import           Data.Vector.Fixed             (Arity,ArityPeano,Vector,ViaFixed)
 import qualified Data.Vector.Fixed           as F
-import           Data.Vector.Fixed.Cont        (arity,Dim)
-import qualified Data.Vector.Fixed.Boxed     as B
-import qualified Data.Vector.Fixed.Unboxed   as U
-import qualified Data.Vector.Fixed.Primitive as P
-import qualified Data.Vector.Fixed.Storable  as S
-
-
-
-instance (Arity n, Serialise a) => Serialise (B.Vec n a) where
-  encode = encodeFixedVector
-  decode = decodeFixedVector
+import           Data.Vector.Fixed.Cont        (peanoToInt,Dim)
+import qualified Data.Vector.Fixed.Boxed     as FB
+import qualified Data.Vector.Fixed.Strict    as FF
+import qualified Data.Vector.Fixed.Unboxed   as FU
+import qualified Data.Vector.Fixed.Primitive as FP
+import qualified Data.Vector.Fixed.Storable  as FS
+import qualified Data.Vector.Fixed.Mono      as FM
+import Data.Coerce
 
-instance (Arity n, P.Prim a, Serialise a) => Serialise (P.Vec n a) where
+instance (Vector v a, Serialise a) => Serialise (ViaFixed v a) where
   encode = encodeFixedVector
   decode = decodeFixedVector
+  {-# INLINE encode #-}
+  {-# INLINE decode #-}
 
-instance (Arity n, S.Storable a, Serialise a) => Serialise (S.Vec n a) where
+instance (FM.Prod a v, Serialise a) => Serialise (FM.ViaFixed a v) where
   encode = encodeFixedVector
   decode = decodeFixedVector
+  {-# INLINE encode #-}
+  {-# INLINE decode #-}
 
-instance (U.Unbox n a, Serialise a) => Serialise (U.Vec n a) where
-  encode = encodeFixedVector
-  decode = decodeFixedVector
+deriving via ViaFixed (FB.Vec n) a instance (Arity n, Serialise a)                => Serialise (FB.Vec n a)
+deriving via ViaFixed (FF.Vec n) a instance (Arity n, Serialise a)                => Serialise (FF.Vec n a)
+deriving via ViaFixed (FP.Vec n) a instance (Arity n, Serialise a, FP.Prim a)     => Serialise (FP.Vec n a)
+deriving via ViaFixed (FS.Vec n) a instance (Arity n, Serialise a, FS.Storable a) => Serialise (FS.Vec n a)
+deriving via ViaFixed (FU.Vec n) a instance (Arity n, Serialise a, FU.Unbox n a)  => Serialise (FU.Vec n a)
 
-instance (Arity n, Serialise a) => Serialise (F.VecList n a) where
-  encode = encodeFixedVector
-  decode = decodeFixedVector
+deriving via ViaFixed (F.VecList  n) a instance (Arity n,      Serialise a) => Serialise (F.VecList  n a)
+deriving via ViaFixed (F.VecPeano n) a instance (ArityPeano n, Serialise a) => Serialise (F.VecPeano n a)
 
-instance (Serialise a) => Serialise (F.Only a) where
-  encode = encodeFixedVector
-  decode = decodeFixedVector
+deriving via ViaFixed F.Only a instance (Serialise a) => Serialise (F.Only a)
 
 instance Serialise (F.Empty a) where
   encode = const encodeNull
@@ -53,15 +56,16 @@
 
 -- | Encode vector with statically known size as CBOR list. There's no
 --   type tag
-encodeFixedVector :: (F.Vector v a, Serialise a) => v a -> Encoding
+encodeFixedVector :: (FM.Prod a v, Serialise a) => v -> Encoding
 {-# INLINE encodeFixedVector #-}
-encodeFixedVector v = encodeListLen (fromIntegral $ F.length v)
-                   <> F.foldMap encode v
+encodeFixedVector v
+  = encodeListLen (fromIntegral $ FM.length v)
+ <> FM.foldMap encode (FM.ViaFixed v)
 
 -- | Decode vector with statically known size as CBOR list. There's no
 --   type tag
-decodeFixedVector :: forall v s a. (F.Vector v a, Serialise a) => Decoder s (v a)
+decodeFixedVector :: forall v s a. (FM.Prod a v, Serialise a) => Decoder s v
 {-# INLINE decodeFixedVector #-}
 decodeFixedVector = do
-  decodeListLenOf (fromIntegral $ arity (Proxy :: Proxy (Dim v)))
-  F.replicateM decode
+  decodeListLenOf (fromIntegral $ peanoToInt (proxy# @(Dim v)))
+  coerce $ FM.replicateM @(FM.ViaFixed a v) decode
diff --git a/Setup.hs b/Setup.hs
deleted file mode 100644
--- a/Setup.hs
+++ /dev/null
@@ -1,2 +0,0 @@
-import Distribution.Simple
-main = defaultMain
diff --git a/fixed-vector-cborg.cabal b/fixed-vector-cborg.cabal
--- a/fixed-vector-cborg.cabal
+++ b/fixed-vector-cborg.cabal
@@ -1,5 +1,5 @@
 Name:           fixed-vector-cborg
-Version:        1.0.0.2
+Version:        2.1.0.0
 Synopsis:       Binary instances for fixed-vector
 Description:
   CBOR serialization instances for fixed-vector's types. Generic
@@ -17,12 +17,12 @@
   ChangeLog.md
 
 tested-with:
-    GHC ==7.10.3
-     || ==8.0.2
-     || ==8.2.2
-     || ==8.4.4
-     || ==8.6.5
-     || ==8.8.1
+    GHC ==9.4.7
+     || ==9.6.7
+     || ==9.8.4
+     || ==9.10.2
+     || ==9.12.2
+     || ==9.14.1
 
 source-repository head
   type:     git
@@ -31,23 +31,9 @@
 Library
   Ghc-options:          -Wall
   Default-Language:     Haskell2010
-  Build-Depends: base         >=4.8 && <5
-               , fixed-vector >=1.0
+  Build-Depends: base         >=4.16 && <5
+               , fixed-vector >=2.1
                , cborg
                , serialise
   Exposed-modules:
     Data.Vector.Fixed.Instances.CBOR
-
-Test-Suite test
-  Ghc-options:      -Wall
-  Default-Language: Haskell2010
-  Type:           exitcode-stdio-1.0
-  Hs-source-dirs: test
-  Main-is:        QC.hs
-  Build-Depends:
-    base >=3 && <5,
-    fixed-vector,
-    fixed-vector-cborg,
-    serialise,
-    tasty,
-    tasty-quickcheck
diff --git a/test/QC.hs b/test/QC.hs
deleted file mode 100644
--- a/test/QC.hs
+++ /dev/null
@@ -1,74 +0,0 @@
-{-# LANGUAGE DataKinds            #-}
-{-# LANGUAGE FlexibleContexts     #-}
-{-# LANGUAGE ScopedTypeVariables  #-}
-{-# LANGUAGE TypeFamilies         #-}
-{-# LANGUAGE UndecidableInstances #-}
-{-# OPTIONS_GHC -fno-warn-orphans #-}
-import Test.Tasty
-import Test.Tasty.QuickCheck as QC
-
-import Codec.Serialise
-import Data.Typeable
-import qualified Data.Vector.Fixed           as F
-import qualified Data.Vector.Fixed.Unboxed   as U
-import qualified Data.Vector.Fixed.Boxed     as B
-import qualified Data.Vector.Fixed.Storable  as S
-import qualified Data.Vector.Fixed.Primitive as P
-import           Data.Vector.Fixed.Instances.CBOR ()
-
-
-tests :: TestTree
-tests = testGroup "cereal"
-  [ testTagged p_serialize (T :: T (F.Only  Int))
-  , testTagged p_serialize (T :: T (F.VecList 2 Int))
-  , testTagged p_serialize (T :: T (F.VecList 3 Int))
-  , testTagged p_serialize (T :: T (F.VecList 4 Int))
-    --
-  , testTagged p_serialize (T :: T (U.Vec 2 Int))
-  , testTagged p_serialize (T :: T (U.Vec 3 Int))
-  , testTagged p_serialize (T :: T (U.Vec 4 Int))
-    --
-  , testTagged p_serialize (T :: T (B.Vec 2 Int))
-  , testTagged p_serialize (T :: T (B.Vec 3 Int))
-  , testTagged p_serialize (T :: T (B.Vec 4 Int))
-    --
-  , testTagged p_serialize (T :: T (S.Vec 2 Int))
-  , testTagged p_serialize (T :: T (S.Vec 3 Int))
-  , testTagged p_serialize (T :: T (S.Vec 4 Int))
-    --
-  , testTagged p_serialize (T :: T (P.Vec 2 Int))
-  , testTagged p_serialize (T :: T (P.Vec 3 Int))
-  , testTagged p_serialize (T :: T (P.Vec 4 Int))
-  ]
-
-p_serialize :: (Serialise a, Arbitrary a, Eq a) => T a -> a -> Bool
-p_serialize _ a = a == (deserialise . serialise) a
-
-data T a = T
-
-testTagged :: forall a b. (Testable b, Typeable a) => (T a -> b) -> T a -> TestTree
-testTagged prop t
-  = testProperty (show $ typeOf (undefined :: a)) (prop t)
-
-main :: IO ()
-main = defaultMain tests
-
-----------------------------------------------------------------
-instance Arbitrary a => Arbitrary (F.Only a) where
-  arbitrary = F.replicateM arbitrary
-instance Arbitrary a => Arbitrary (F.Empty a) where
-  arbitrary = F.replicateM arbitrary
-
-instance (F.Arity n, Arbitrary a) => Arbitrary (F.VecList n a) where
-  arbitrary = F.replicateM arbitrary
-instance (U.Unbox n a, Arbitrary a) => Arbitrary (U.Vec n a) where
-  arbitrary = F.replicateM arbitrary
-instance (F.Arity n, Arbitrary a) => Arbitrary (B.Vec n a) where
-  arbitrary = F.replicateM arbitrary
-instance (F.Arity n, S.Storable a, Arbitrary a) => Arbitrary (S.Vec n a) where
-  arbitrary = F.replicateM arbitrary
-instance (F.Arity n, P.Prim a, Arbitrary a) => Arbitrary (P.Vec n a) where
-  arbitrary = F.replicateM arbitrary
-
-
-
