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:             1.0.0.1
+version:             1.0.0.2
 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
@@ -44,8 +44,11 @@
   hs-source-dirs:     tests
   main-is:            Main.hs
   other-modules:      Common
-                    , Test.Massiv.SerialiseSpec
-                    , Spec
+                    , Test.Massiv.Serialise.CoreSpec
+                    , Test.Massiv.Serialise.BoxedSpec
+                    , Test.Massiv.Serialise.PrimitiveSpec
+                    , Test.Massiv.Serialise.StorableSpec
+                    , Test.Massiv.Serialise.UnboxedSpec
   build-tool-depends: hspec-discover:hspec-discover
   build-depends:      base             >= 4.8 && < 5
                     , massiv-serialise
diff --git a/tests/Common.hs b/tests/Common.hs
--- a/tests/Common.hs
+++ b/tests/Common.hs
@@ -1,6 +1,85 @@
+{-# LANGUAGE AllowAmbiguousTypes #-}
+{-# LANGUAGE FlexibleContexts #-}
+{-# LANGUAGE ScopedTypeVariables #-}
+{-# LANGUAGE TypeApplications #-}
 module Common
   ( module X
+  , roundtrip
+  , roundtripArray
+  , roundtripArraySpec
+  , roundtripArraysSpec
   ) where
-
+import Data.Massiv.Array
+import Codec.Serialise as X
+import Data.Typeable
+import Massiv.Serialise as X
 import Test.Hspec as X
+import Test.Hspec.QuickCheck as X
+import Test.Massiv.Core
 import Test.QuickCheck as X
+
+roundtrip :: (Eq a, Show a, Serialise a) => a -> Property
+roundtrip val = deserialise (serialise val) === val
+
+
+roundtripArray ::
+     forall r ix e.
+     ( Load r ix e
+     , Serialise (Array r ix e)
+     , Eq (Array r ix e)
+     , Show (Array r ix e)
+     )
+  => Array r ix e
+  -> Property
+roundtripArray arr =
+  let arr' = deserialise (serialise arr)
+  in (arr' === arr) .&&. (getComp arr' === getComp arr)
+
+roundtripArraySpec ::
+     forall r ix e.
+     ( Eq (Array r ix e)
+     , Show (Array r ix e)
+     , Typeable e
+     , Arbitrary ix
+     , Load r ix e
+     , Arbitrary e
+     , Serialise (Array r ix e)
+     )
+  => Spec
+roundtripArraySpec =
+  prop (showsType @(Array r ix e) "") $ roundtripArray @r @ix @e
+
+
+roundtripArraysSpec ::
+     forall r e.
+     ( Eq (Array r Ix1 e)
+     , Show (Array r Ix1 e)
+     , Serialise (Array r Ix1 e)
+     , Load r Ix1 e
+     , Eq (Array r Ix2 e)
+     , Show (Array r Ix2 e)
+     , Serialise (Array r Ix2 e)
+     , Load r Ix2 e
+     , Eq (Array r Ix3 e)
+     , Show (Array r Ix3 e)
+     , Serialise (Array r Ix3 e)
+     , Load r Ix3 e
+     , Eq (Array r Ix4 e)
+     , Show (Array r Ix4 e)
+     , Load r Ix4 e
+     , Serialise (Array r Ix4 e)
+     , Eq (Array r Ix5 e)
+     , Show (Array r Ix5 e)
+     , Serialise (Array r Ix5 e)
+     , Load r Ix5 e
+     , Typeable e
+     , Arbitrary e
+     )
+  => Spec
+roundtripArraysSpec =
+  describe (showsType @e "") $ do
+    roundtripArraySpec @r @Ix1 @e
+    roundtripArraySpec @r @Ix2 @e
+    roundtripArraySpec @r @Ix3 @e
+    roundtripArraySpec @r @Ix4 @e
+    roundtripArraySpec @r @Ix5 @e
diff --git a/tests/Main.hs b/tests/Main.hs
--- a/tests/Main.hs
+++ b/tests/Main.hs
@@ -1,11 +1,23 @@
 module Main where
 
-import Spec (spec)
-import System.IO (BufferMode (LineBuffering), hSetBuffering, hSetEncoding, stdout, utf8)
+import System.IO (BufferMode(LineBuffering), hSetBuffering, hSetEncoding, stdout, utf8)
 import Test.Hspec
+import qualified Test.Massiv.Serialise.BoxedSpec as Boxed (spec)
+import qualified Test.Massiv.Serialise.CoreSpec as Core (spec)
+import qualified Test.Massiv.Serialise.PrimitiveSpec as Primitive (spec)
+import qualified Test.Massiv.Serialise.StorableSpec as Storable (spec)
+import qualified Test.Massiv.Serialise.UnboxedSpec as Unboxed (spec)
 
 main :: IO ()
 main = do
   hSetBuffering stdout LineBuffering
   hSetEncoding stdout utf8
-  hspec spec
+  hspec $ do
+    describe "Core" $ do
+      Core.spec
+    describe "Boxed" $ do
+      Boxed.spec
+    describe "Unboxed" $ do
+      Primitive.spec
+      Storable.spec
+      Unboxed.spec
diff --git a/tests/Spec.hs b/tests/Spec.hs
deleted file mode 100644
--- a/tests/Spec.hs
+++ /dev/null
@@ -1,1 +0,0 @@
-{-# OPTIONS_GHC -F -pgmF hspec-discover -optF --module-name=Spec #-}
diff --git a/tests/Test/Massiv/Serialise/BoxedSpec.hs b/tests/Test/Massiv/Serialise/BoxedSpec.hs
new file mode 100644
--- /dev/null
+++ b/tests/Test/Massiv/Serialise/BoxedSpec.hs
@@ -0,0 +1,14 @@
+{-# LANGUAGE TypeApplications #-}
+module Test.Massiv.Serialise.BoxedSpec (spec) where
+
+import Common
+import Data.Massiv.Array
+
+spec :: Spec
+spec = do
+  describe "B" $ do
+    roundtripArraysSpec @B @Integer
+  describe "BN" $ do
+    roundtripArraysSpec @BN @Integer
+  describe "BL" $ do
+    roundtripArraysSpec @BL @Integer
diff --git a/tests/Test/Massiv/Serialise/CoreSpec.hs b/tests/Test/Massiv/Serialise/CoreSpec.hs
new file mode 100644
--- /dev/null
+++ b/tests/Test/Massiv/Serialise/CoreSpec.hs
@@ -0,0 +1,21 @@
+{-# LANGUAGE TypeApplications #-}
+module Test.Massiv.Serialise.CoreSpec (spec) where
+
+import Common
+import Data.Massiv.Array
+
+spec :: Spec
+spec = do
+  describe "Strategy" $ do
+    prop "Comp" $ roundtrip @Comp
+  describe "Index" $ do
+    prop "Ix2" $ roundtrip @Ix2
+    prop "Ix3" $ roundtrip @Ix3
+    prop "Ix4" $ roundtrip @Ix4
+    prop "Ix5" $ roundtrip @Ix5
+  describe "Size" $ do
+    prop "Sz1" $ roundtrip @Sz1
+    prop "Sz2" $ roundtrip @Sz2
+    prop "Sz3" $ roundtrip @Sz3
+    prop "Sz4" $ roundtrip @Sz4
+    prop "Sz5" $ roundtrip @Sz5
diff --git a/tests/Test/Massiv/Serialise/PrimitiveSpec.hs b/tests/Test/Massiv/Serialise/PrimitiveSpec.hs
new file mode 100644
--- /dev/null
+++ b/tests/Test/Massiv/Serialise/PrimitiveSpec.hs
@@ -0,0 +1,13 @@
+{-# LANGUAGE TypeApplications #-}
+module Test.Massiv.Serialise.PrimitiveSpec (spec) where
+
+import Common
+import Data.Massiv.Array
+import Data.Word
+
+spec :: Spec
+spec = do
+  describe "P" $ do
+    roundtripArraysSpec @P @Word32
+    roundtripArraysSpec @P @Word64
+    roundtripArraysSpec @P @Word
diff --git a/tests/Test/Massiv/Serialise/StorableSpec.hs b/tests/Test/Massiv/Serialise/StorableSpec.hs
new file mode 100644
--- /dev/null
+++ b/tests/Test/Massiv/Serialise/StorableSpec.hs
@@ -0,0 +1,14 @@
+{-# LANGUAGE TypeApplications #-}
+module Test.Massiv.Serialise.StorableSpec (spec) where
+
+import Common
+import Data.Massiv.Array
+import Data.Word
+
+spec :: Spec
+spec =
+  describe "S" $ do
+    roundtripArraysSpec @S @Bool
+    roundtripArraysSpec @S @Word32
+    roundtripArraysSpec @S @Word64
+    roundtripArraysSpec @S @Word
diff --git a/tests/Test/Massiv/Serialise/UnboxedSpec.hs b/tests/Test/Massiv/Serialise/UnboxedSpec.hs
new file mode 100644
--- /dev/null
+++ b/tests/Test/Massiv/Serialise/UnboxedSpec.hs
@@ -0,0 +1,11 @@
+{-# LANGUAGE TypeApplications #-}
+module Test.Massiv.Serialise.UnboxedSpec (spec) where
+
+import Common
+import Data.Massiv.Array
+
+spec :: Spec
+spec = do
+  describe "U" $ do
+    roundtripArraysSpec @U @Bool
+    roundtripArraysSpec @U @(Int, Word)
diff --git a/tests/Test/Massiv/SerialiseSpec.hs b/tests/Test/Massiv/SerialiseSpec.hs
deleted file mode 100644
--- a/tests/Test/Massiv/SerialiseSpec.hs
+++ /dev/null
@@ -1,116 +0,0 @@
-{-# LANGUAGE FlexibleContexts #-}
-{-# LANGUAGE ScopedTypeVariables #-}
-{-# LANGUAGE TypeApplications #-}
-{-# LANGUAGE AllowAmbiguousTypes #-}
-
-module Test.Massiv.SerialiseSpec (spec) where
-
-import Codec.Serialise
-import Common
-import Massiv.Serialise ()
-import Test.Massiv.Core
-import Data.Massiv.Array
-import Data.Word
-
-roundtrip :: (Eq a, Show a, Serialise a) => a -> Property
-roundtrip val = deserialise (serialise val) === val
-
-roundtripArray ::
-     forall r ix e.
-     ( Load r ix e
-     , Serialise (Array r ix e)
-     , Eq (Array r ix e)
-     , Show (Array r ix e)
-     )
-  => Array r ix e
-  -> Property
-roundtripArray arr =
-  let arr' = deserialise (serialise arr)
-  in (arr' === arr) .&&. (getComp arr' === getComp arr)
-
-roundtripArraySpec ::
-     forall r ix e.
-     ( Eq (Array r ix e)
-     , Show (Array r ix e)
-     , Typeable e
-     , Arbitrary ix
-     , Load r ix e
-     , Arbitrary e
-     , Serialise (Array r ix e)
-     )
-  => Spec
-roundtripArraySpec =
-  prop (showsType @(Array r ix e) "") $ roundtripArray @r @ix @e
-
-spec :: Spec
-spec = do
-  describe "Serialise" $ do
-    prop "Comp" $ roundtrip @Comp
-    describe "Ix" $ do
-      prop "Ix2" $ roundtrip @Ix2
-      prop "Ix3" $ roundtrip @Ix3
-      prop "Ix4" $ roundtrip @Ix4
-      prop "Ix5" $ roundtrip @Ix5
-    describe "Sz" $ do
-      prop "Sz1" $ roundtrip @Sz1
-      prop "Sz2" $ roundtrip @Sz2
-      prop "Sz3" $ roundtrip @Sz3
-      prop "Sz4" $ roundtrip @Sz4
-      prop "Sz5" $ roundtrip @Sz5
-    describe "Array" $ do
-      describe "P" $ do
-        roundtripArraySpec @P @Ix1 @Word8
-        roundtripArraySpec @P @Ix2 @Word8
-        roundtripArraySpec @P @Ix3 @Word8
-        roundtripArraySpec @P @Ix4 @Word8
-        roundtripArraySpec @P @Ix5 @Word8
-        roundtripArraySpec @P @Ix1 @Word16
-        roundtripArraySpec @P @Ix2 @Word16
-        roundtripArraySpec @P @Ix3 @Word16
-        roundtripArraySpec @P @Ix4 @Word16
-        roundtripArraySpec @P @Ix5 @Word16
-        roundtripArraySpec @P @Ix1 @Word32
-        roundtripArraySpec @P @Ix2 @Word32
-        roundtripArraySpec @P @Ix3 @Word32
-        roundtripArraySpec @P @Ix4 @Word32
-        roundtripArraySpec @P @Ix5 @Word32
-        roundtripArraySpec @P @Ix1 @Word64
-        roundtripArraySpec @P @Ix2 @Word64
-        roundtripArraySpec @P @Ix3 @Word64
-        roundtripArraySpec @P @Ix4 @Word64
-        roundtripArraySpec @P @Ix5 @Word64
-        roundtripArraySpec @P @Ix1 @Word
-        roundtripArraySpec @P @Ix2 @Word
-        roundtripArraySpec @P @Ix3 @Word
-        roundtripArraySpec @P @Ix4 @Word
-        roundtripArraySpec @P @Ix5 @Word
-      describe "U" $ do
-        roundtripArraySpec @U @Ix1 @Word
-        roundtripArraySpec @U @Ix2 @Word
-        roundtripArraySpec @U @Ix3 @Word
-        roundtripArraySpec @U @Ix4 @Word
-        roundtripArraySpec @U @Ix5 @Word
-      describe "S" $ do
-        roundtripArraySpec @S @Ix1 @Word
-        roundtripArraySpec @S @Ix2 @Word
-        roundtripArraySpec @S @Ix3 @Word
-        roundtripArraySpec @S @Ix4 @Word
-        roundtripArraySpec @S @Ix5 @Word
-      describe "B" $ do
-        roundtripArraySpec @B @Ix1 @Integer
-        roundtripArraySpec @B @Ix2 @Integer
-        roundtripArraySpec @B @Ix3 @Integer
-        roundtripArraySpec @B @Ix4 @Integer
-        roundtripArraySpec @B @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
