diff --git a/gopro-plus.cabal b/gopro-plus.cabal
--- a/gopro-plus.cabal
+++ b/gopro-plus.cabal
@@ -4,10 +4,10 @@
 --
 -- see: https://github.com/sol/hpack
 --
--- hash: 3f64e72a9e9137f025a35d901ed752efe98124c39866a9b6a36b885d54ca9810
+-- hash: 568ca727f101246b004f87ca33c63a764b181feb946f40ec1212abb44a2d8b58
 
 name:           gopro-plus
-version:        0.6.0.4
+version:        0.6.1.0
 synopsis:       GoPro Plus Client API.
 description:    Please see the README on GitHub at <https://github.com/dustin/gopro-plus#readme>
 category:       Web
@@ -72,8 +72,9 @@
 
 test-suite gopro-plus-test
   type: exitcode-stdio-1.0
-  main-is: Spec.hs
+  main-is: Main.hs
   other-modules:
+      Spec
       Paths_gopro_plus
   hs-source-dirs:
       test
@@ -102,6 +103,7 @@
     , raw-strings-qq
     , retry
     , tasty
+    , tasty-discover
     , tasty-hunit
     , tasty-quickcheck
     , text
diff --git a/src/GoPro/Plus/Media.hs b/src/GoPro/Plus/Media.hs
--- a/src/GoPro/Plus/Media.hs
+++ b/src/GoPro/Plus/Media.hs
@@ -30,7 +30,7 @@
   File(..), file_camera_position, file_height, file_width,
   file_item_number, file_orientation, file_head, file_url, file_transforms,
   Variation(..), var_height, var_width, var_label, var_quality,
-  var_type, var_transforms, var_head, var_url,
+  var_type, var_transforms, var_head, var_url, var_item_number,
   SpriteFrame(..), frame_count, frame_height, frame_width,
   Sprite(..), sprite_fps, sprite_frame, sprite_height, sprite_width,
   sprite_type, sprite_heads, sprite_urls,
@@ -244,14 +244,15 @@
   toJSON = genericToJSON jsonOpts{ fieldLabelModifier = dropPrefix "_file_" }
 
 data Variation = Variation
-    { _var_height     :: Int
-    , _var_width      :: Int
-    , _var_label      :: String
-    , _var_quality    :: String
-    , _var_transforms :: Maybe [String]
-    , _var_type       :: String
-    , _var_head       :: String
-    , _var_url        :: String
+    { _var_height      :: Int
+    , _var_width       :: Int
+    , _var_label       :: String
+    , _var_quality     :: String
+    , _var_transforms  :: Maybe [String]
+    , _var_item_number :: Maybe Int
+    , _var_type        :: String
+    , _var_head        :: String
+    , _var_url         :: String
     }
     deriving (Generic, Eq, Show)
 
diff --git a/test/Main.hs b/test/Main.hs
new file mode 100644
--- /dev/null
+++ b/test/Main.hs
@@ -0,0 +1,1 @@
+{-# OPTIONS_GHC -F -pgmF tasty-discover -optF --tree-display #-}
diff --git a/test/Spec.hs b/test/Spec.hs
--- a/test/Spec.hs
+++ b/test/Spec.hs
@@ -1,6 +1,8 @@
 {-# LANGUAGE QuasiQuotes      #-}
 {-# LANGUAGE TypeApplications #-}
 
+module Spec where
+
 import           Control.Lens
 import qualified Data.Aeson                     as J
 import qualified Data.ByteString.Lazy           as BL
@@ -23,15 +25,15 @@
 {"captured_at":"2020-04-06T00:33:22Z","content_title":null,"content_type":null,"created_at":"2020-04-06T01:39:39Z","gopro_user_id":"uid","file_size":7930021,"height":3000,"fov":null,"id":"EDavpqr4GVe8O","moments_count":0,"on_public_profile":false,"orientation":1,"play_as":"photo","ready_to_edit":true,"ready_to_view":"ready","resolution":"12000000","source_duration":"0","token":"token2","type":"Photo","width":4000}]}}
 |]
 
-testSearchParser :: Assertion
-testSearchParser = do
+unit_searchParser :: Assertion
+unit_searchParser = do
   let l = J.decode exampleMedia :: Maybe Listing
   assertEqual (show l) (Just (PageInfo 1 100 2169 22)) (l ^? _Just . pages)
   assertEqual (show l) [Video, Photo] (l ^.. _Just . media . folded . medium_type)
   assertEqual (show l) ["62NzWRrpPXm7o", "EDavpqr4GVe8O"] (l ^.. _Just . media . folded . medium_id)
 
-testFileInfo :: Assertion
-testFileInfo = do
+unit_fileInfo :: Assertion
+unit_fileInfo = do
   fi <- J.decode <$> BL.readFile "test/mediaex.json" :: IO (Maybe FileInfo)
   assertEqual (show fi) (Just "G0000004.JPG") (fi ^? _Just . filename)
   let Just fs = fi ^? _Just . fileStuff
@@ -54,13 +56,17 @@
 
   assertEqual (show fs) "intoalightpost" (fs ^. files . folded . file_transforms . folded . folded)
 
+unit_concat :: Assertion
+unit_concat = do
+  fi <- J.decode <$> BL.readFile "test/concat.json" :: IO (Maybe FileInfo)
+  let Just fs = fi ^? _Just . fileStuff
+  assertEqual (show fi) [1, 2, 3] (fs ^.. variations . folded . var_item_number . _Just)
+
 propRTJSON :: (J.FromJSON j, J.ToJSON j, Eq j, Show j) => j -> Property
 propRTJSON = fromJust . J.decode . J.encode >>= (===)
 
-tests :: [TestTree]
-tests = [
-    testCase "Parsing" testSearchParser,
-    testCase "FileInfo" testFileInfo,
+test_props :: [TestTree]
+test_props = [
     testGroup "JSON round tripping" $ [
         testProperty "FileInfo" (propRTJSON @FileInfo),
         testProperty "Variation" (propRTJSON @Variation),
@@ -76,6 +82,3 @@
         testProperty "PageInfo" (propRTJSON @PageInfo)
         ]
     ]
-
-main :: IO ()
-main = defaultMain $ testGroup "All Tests" tests
