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/Cereal.hs b/Data/Vector/Fixed/Instances/Cereal.hs
--- a/Data/Vector/Fixed/Instances/Cereal.hs
+++ b/Data/Vector/Fixed/Instances/Cereal.hs
@@ -1,4 +1,6 @@
+{-# LANGUAGE DerivingVia          #-}
 {-# LANGUAGE FlexibleContexts     #-}
+{-# LANGUAGE StandaloneDeriving   #-}
 {-# LANGUAGE TypeFamilies         #-}
 {-# LANGUAGE UndecidableInstances #-}
 {-# OPTIONS_GHC -fno-warn-orphans #-}
@@ -6,34 +8,30 @@
 --   vector
 module Data.Vector.Fixed.Instances.Cereal where
 
-import           Data.Vector.Fixed             (Arity)
+import           Data.Vector.Fixed             (Arity,ArityPeano,ViaFixed(..),Vector)
 import qualified Data.Vector.Fixed           as F
-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
+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           Data.Serialize                (Serialize(..))
 
 
-instance (Arity n, Serialize a) => Serialize (B.Vec n a) where
-  put = F.mapM_ put
-  get = F.replicateM get
-
-instance (Arity n, P.Prim a, Serialize a) => Serialize (P.Vec n a) where
-  put = F.mapM_ put
-  get = F.replicateM get
-
-instance (Arity n, S.Storable a, Serialize a) => Serialize (S.Vec n a) where
+instance (Vector v a, Serialize a) => Serialize (ViaFixed v a) where
   put = F.mapM_ put
   get = F.replicateM get
+  {-# INLINE put #-}
+  {-# INLINE get #-}
 
-instance (U.Unbox n a, Serialize a) => Serialize (U.Vec n a) where
-  put = F.mapM_ put
-  get = F.replicateM get
+deriving via ViaFixed (FB.Vec n) a instance (Arity n, Serialize a)                => Serialize (FB.Vec n a)
+deriving via ViaFixed (FF.Vec n) a instance (Arity n, Serialize a)                => Serialize (FF.Vec n a)
+deriving via ViaFixed (FP.Vec n) a instance (Arity n, Serialize a, FP.Prim a)     => Serialize (FP.Vec n a)
+deriving via ViaFixed (FS.Vec n) a instance (Arity n, Serialize a, FS.Storable a) => Serialize (FS.Vec n a)
+deriving via ViaFixed (FU.Vec n) a instance (Arity n, Serialize a, FU.Unbox n a)  => Serialize (FU.Vec n a)
 
-instance (Arity n, Serialize a) => Serialize (F.VecList n a) where
-  put = F.mapM_ put
-  get = F.replicateM get
+deriving via ViaFixed (F.VecList  n) a instance (Arity n,      Serialize a) => Serialize (F.VecList  n a)
+deriving via ViaFixed (F.VecPeano n) a instance (ArityPeano n, Serialize a) => Serialize (F.VecPeano n a)
 
 instance (Serialize a) => Serialize (F.Only a) where
   put (F.Only a) = put a
diff --git a/fixed-vector-cereal.cabal b/fixed-vector-cereal.cabal
--- a/fixed-vector-cereal.cabal
+++ b/fixed-vector-cereal.cabal
@@ -1,5 +1,5 @@
 Name:           fixed-vector-cereal
-Version:        1.0.0.2
+Version:        2.0.0.0
 Synopsis:       Cereal instances for fixed-vector
 Description:
   This package contains Cereal instances for data types defined in
@@ -17,12 +17,13 @@
   ChangeLog.md
 
 tested-with:
-    GHC ==7.10.3
-     || ==8.0.2
-     || ==8.2.2
-     || ==8.4.4
-     || ==8.6.5
-     || ==8.8.1
+    GHC ==8.10.7
+     || ==9.0.1
+     || ==9.2.8
+     || ==9.4.7
+     || ==9.6.6
+     || ==9.8.2
+     || ==9.10.1
 
 source-repository head
   type:     git
@@ -31,23 +32,8 @@
 Library
   Ghc-options:          -Wall
   Default-Language:     Haskell2010
-  Build-Depends:        base         >=4.8 && <5
-                      , fixed-vector >=1.0
+  Build-Depends:        base         >=4.14 && <5
+                      , fixed-vector >=2.0
                       , cereal
   Exposed-modules:
     Data.Vector.Fixed.Instances.Cereal
-
-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-cereal,
-    cereal,
-    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 Data.Typeable
-import Data.Serialize
-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.Cereal ()
-
-
-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 :: (Serialize a, Arbitrary a, Eq a) => T a -> a -> Bool
-p_serialize _ a = Right a == (decode . encode) 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
-
-
-
