diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,9 @@
 # Changelog for `massiv-serialise`
 
+## 1.0.0.0
+
+* Switch to support `massiv-1.0.0.0`
+
 ## 0.1.0.0
 
 * Initial release
diff --git a/massiv-serialise.cabal b/massiv-serialise.cabal
--- a/massiv-serialise.cabal
+++ b/massiv-serialise.cabal
@@ -1,5 +1,5 @@
 name:                massiv-serialise
-version:             0.1.0.0
+version:             1.0.0.0
 synopsis:            Compatibility of 'massiv' with 'serialise'
 description:         Orphan 'Serialise' class instances from <https://hackage.haskell.org/package/serialise serialise> package that allow serialization of arrays defined in <https://hackage.haskell.org/package/massiv massiv> package
 homepage:            https://github.com/lehins/massiv-compat
@@ -8,7 +8,7 @@
 author:              Alexey Kuleshevich
 maintainer:          alexey@kuleshevi.ch
 copyright:           2021 Alexey Kuleshevich
-category:            Algorithms
+category:            Array, Data Structures, Serialization
 build-type:          Simple
 extra-source-files:  README.md
                    , CHANGELOG.md
@@ -29,7 +29,7 @@
   other-modules:
   build-depends:       base >= 4.8 && < 5
                      , deepseq
-                     , massiv >= 0.5.0.0
+                     , massiv >= 1.0.0.0
                      , serialise >= 0.2.0.0
                      , vector
 
diff --git a/src/Massiv/Serialise.hs b/src/Massiv/Serialise.hs
--- a/src/Massiv/Serialise.hs
+++ b/src/Massiv/Serialise.hs
@@ -125,7 +125,7 @@
         pure acc'
   Sz ix <$ foldlIndex (\acc i -> acc >>= guardNegativeOverflow i) (pure 1) ix
 
-instance (Index ix, Serialise ix) => Serialise (Sz ix) where
+instance Index ix => Serialise (Sz ix) where
   encode = encodeIx . unSz
   decode = mkSzFail =<< decodeIx
 
@@ -136,11 +136,11 @@
 -- @since 0.1.0
 encodeArray ::
      forall v r ix e.
-     ( Manifest r ix e
-     , Mutable (ARepr v) ix e
+     ( Manifest r e
+     , Load r ix e
+     , Mutable (ARepr v) e
      , VG.Vector v e
      , VRepr (ARepr v) ~ v
-     , Serialise ix
      , Serialise (v e)
      )
   => Array r ix e
@@ -155,9 +155,9 @@
      forall v r ix e s.
      ( Typeable v
      , VG.Vector v e
-     , Mutable (ARepr v) ix e
-     , Mutable r ix e
-     , Serialise ix
+     , Load r ix e
+     , Load (ARepr v) ix e
+     , Mutable r e
      , Serialise (v e)
      )
   => Decoder s (Array r ix e)
@@ -165,26 +165,29 @@
   comp <- decode
   sz <- decode
   vector :: v e <- decode
-  -- setComp is to workaround a minor bug for boxed arrays in massiv < 0.6
-  either (Fail.fail . show) (pure . setComp comp) $ fromVectorM comp sz vector
+  either (Fail.fail . show) pure $ fromVectorM comp sz vector
 
-instance (Index ix, Serialise ix, Serialise e) => Serialise (Array B ix e) where
+instance (Index ix, Serialise e) => Serialise (Array BL ix e) where
   encode = encodeArray @V.Vector
   decode = decodeArray @V.Vector
 
-instance (Index ix, NFData e, Serialise ix, Serialise e) => Serialise (Array N ix e) where
+instance (Index ix, Serialise e) => Serialise (Array B ix e) where
+  encode = encode . toLazyArray
+  decode = evalLazyArray <$> decode
+
+instance (Index ix, NFData e, Serialise e) => Serialise (Array BN ix e) where
   encode = encode . unwrapNormalForm
-  decode = evalNormalForm <$> decode
+  decode = forceLazyArray <$> decode
 
-instance (Index ix, Storable e, Serialise ix, Serialise e) => Serialise (Array S ix e) where
+instance (Index ix, Storable e, Serialise e) => Serialise (Array S ix e) where
   encode = encodeArray @VS.Vector
   decode = decodeArray @VS.Vector
 
-instance (Index ix, Unbox e, Serialise ix, Serialise e) => Serialise (Array U ix e) where
+instance (Index ix, Unbox e, Serialise e) => Serialise (Array U ix e) where
   encode = encodeArray @VU.Vector
   decode = decodeArray @VU.Vector
 
-instance (Index ix, Prim e, Serialise ix, Serialise e) => Serialise (Array P ix e) where
+instance (Index ix, Prim e, Serialise e) => Serialise (Array P ix e) where
   encode = encodeArray @VP.Vector
   decode = decodeArray @VP.Vector
 
diff --git a/tests/Main.hs b/tests/Main.hs
--- a/tests/Main.hs
+++ b/tests/Main.hs
@@ -1,6 +1,6 @@
 module Main where
 
-import Spec
+import Spec (spec)
 import System.IO (BufferMode (LineBuffering), hSetBuffering, hSetEncoding, stdout, utf8)
 import Test.Hspec
 
diff --git a/tests/Spec.hs b/tests/Spec.hs
--- a/tests/Spec.hs
+++ b/tests/Spec.hs
@@ -1,1 +1,1 @@
-{-# OPTIONS_GHC -F -pgmF hspec-discover -optF --no-main #-}
+{-# OPTIONS_GHC -F -pgmF hspec-discover -optF --module-name=Spec #-}
diff --git a/tests/Test/Massiv/SerialiseSpec.hs b/tests/Test/Massiv/SerialiseSpec.hs
--- a/tests/Test/Massiv/SerialiseSpec.hs
+++ b/tests/Test/Massiv/SerialiseSpec.hs
@@ -32,10 +32,8 @@
      forall r ix e.
      ( Eq (Array r ix e)
      , Show (Array r ix e)
-     , Typeable ix
      , Typeable e
      , Arbitrary ix
-     , Construct r ix e
      , Load r ix e
      , Arbitrary e
      , Serialise (Array r ix e)
@@ -104,9 +102,15 @@
         roundtripArraySpec @B @Ix3 @Integer
         roundtripArraySpec @B @Ix4 @Integer
         roundtripArraySpec @B @Ix5 @Integer
-      describe "N" $ do
-        roundtripArraySpec @N @Ix1 @Integer
-        roundtripArraySpec @N @Ix2 @Integer
-        roundtripArraySpec @N @Ix3 @Integer
-        roundtripArraySpec @N @Ix4 @Integer
-        roundtripArraySpec @N @Ix5 @Integer
+      describe "BN" $ do
+        roundtripArraySpec @BN @Ix1 @Integer
+        roundtripArraySpec @BN @Ix2 @Integer
+        roundtripArraySpec @BN @Ix3 @Integer
+        roundtripArraySpec @BN @Ix4 @Integer
+        roundtripArraySpec @BN @Ix5 @Integer
+      describe "BL" $ do
+        roundtripArraySpec @BL @Ix1 @Integer
+        roundtripArraySpec @BL @Ix2 @Integer
+        roundtripArraySpec @BL @Ix3 @Integer
+        roundtripArraySpec @BL @Ix4 @Integer
+        roundtripArraySpec @BL @Ix5 @Integer
