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: 1b17e91a409617284416087aef77c7dfc75822817835c9a0faeae5f3a9b8709b
+-- hash: c4a43a2cafe660b7470ec32c0dfa673a4c94724aaed4a35b1b1a10ae30f0cf46
 
 name:           gopro-plus
-version:        0.3.1.1
+version:        0.4.0.0
 synopsis:       GoPro Plus Client API.
 description:    Please see the README on GitHub at <https://github.com/dustin/gopro-plus#readme>
 category:       Web
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
@@ -26,13 +26,15 @@
   medium_ready_to_view, medium_source_duration, medium_type,
   medium_token, medium_width, medium_height,
   Listing(..), media, pages,
+  HasMediaURL(..), HasMediaLabel(..), HasMediaType(..),
   File(..), file_camera_position, file_height, file_width,
-  file_item_number, file_orientation, file_url,
+  file_item_number, file_orientation, file_head, file_url, file_transforms,
   Variation(..), var_height, var_width, var_label, var_quality,
-  var_type, var_url,
+  var_type, var_transforms, var_head, var_url,
   SpriteFrame(..), frame_count, frame_height, frame_width,
   Sprite(..), sprite_fps, sprite_frame, sprite_height, sprite_width,
-  sprite_type, sprite_urls,
+  sprite_type, sprite_heads, sprite_urls,
+  SidecarFile(..), sidecar_fps, sidecar_label, sidecar_type, sidecar_head, sidecar_url,
   FileStuff(..), files, variations, sprites, sidecar_files,
   FileInfo(..), fileStuff, filename,
   Error(..), error_reason, error_code, error_description, error_id,
@@ -194,36 +196,54 @@
           then dig (n + 1) m'
           else pure m'
 
+class HasMediaURL c where
+  media_url :: Lens' c String
 
+class HasMediaLabel c where
+  media_label :: Lens' c String
+
+class HasMediaType c where
+  media_type :: Lens' c String
+
 data File = File
     { _file_camera_position :: String
     , _file_height          :: Int
     , _file_width           :: Int
     , _file_item_number     :: Int
     , _file_orientation     :: Int
+    , _file_transforms      :: Maybe [String]
+    , _file_head            :: String
     , _file_url             :: String
     }
     deriving (Generic, Show)
 
 makeLenses  ''File
 
+instance HasMediaURL File where media_url = file_url
+
 instance FromJSON File where
   parseJSON = genericParseJSON defaultOptions {
     fieldLabelModifier = dropPrefix "_file_"
     }
 
 data Variation = Variation
-    { _var_height  :: Int
-    , _var_width   :: Int
-    , _var_label   :: String
-    , _var_quality :: String
-    , _var_type    :: String
-    , _var_url     :: String
+    { _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
     }
     deriving (Generic, Show)
 
 makeLenses ''Variation
 
+instance HasMediaURL Variation where media_url = var_url
+instance HasMediaLabel Variation where media_label = var_label
+instance HasMediaType Variation where media_type = var_type
+
 instance FromJSON Variation where
   parseJSON = genericParseJSON defaultOptions {
   fieldLabelModifier = dropPrefix "_var_"
@@ -249,6 +269,7 @@
     , _sprite_height :: Int
     , _sprite_width  :: Int
     , _sprite_type   :: String
+    , _sprite_heads  :: [String]
     , _sprite_urls   :: [String]
     }
     deriving (Generic, Show)
@@ -260,11 +281,30 @@
     fieldLabelModifier = dropPrefix "_sprite_"
   }
 
+data SidecarFile = SidecarFile
+  { _sidecar_fps   :: Int
+  , _sidecar_label :: String
+  , _sidecar_type  :: String
+  , _sidecar_head  :: String
+  , _sidecar_url   :: String
+  } deriving (Generic, Show)
+
+makeLenses ''SidecarFile
+
+instance HasMediaURL SidecarFile where media_url = sidecar_url
+instance HasMediaLabel SidecarFile where media_label = sidecar_label
+instance HasMediaType SidecarFile where media_type = sidecar_type
+
+instance FromJSON SidecarFile where
+  parseJSON = genericParseJSON defaultOptions {
+    fieldLabelModifier = dropPrefix "_sidecar_"
+  }
+
 data FileStuff = FileStuff
     { _files         :: [File]
     , _variations    :: [Variation]
     , _sprites       :: [Sprite]
-    , _sidecar_files :: [Value]
+    , _sidecar_files :: [SidecarFile]
     }
     deriving (Generic, Show)
 
diff --git a/test/Spec.hs b/test/Spec.hs
--- a/test/Spec.hs
+++ b/test/Spec.hs
@@ -26,9 +26,31 @@
   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
+  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
+  assertEqual (show fs) ["http://a/", "http://aprime/"] (fs ^.. files . folded . media_url)
+  assertEqual (show fs) ["http://b/"] (fs ^.. sidecar_files . folded . media_url)
+  assertEqual (show fs) ["http://d/", "http://e/", "http://f/"] (fs ^.. variations . folded . media_url)
+
+  assertEqual (show fs) ["ziplabel", "timelapse_video", "high_res_proxy_mp4", "mp4_low"] (
+    mconcat [fs ^.. sidecar_files . folded . media_label, fs ^.. variations . folded . media_label])
+
+  assertEqual (show fs) ["zip", "mp4", "mp4", "mp4"] (
+    mconcat [fs ^.. sidecar_files . folded . media_type, fs ^.. variations . folded . media_type])
+
+  assertEqual (show fs) [["antishake", "horizon"],
+                         ["proshake", "verizon"]] (fs ^.. variations . folded . var_transforms . _Just)
+
+  assertEqual (show fs) "intoalightpost" (fs ^. files . folded . file_transforms . folded . folded)
+
+
 tests :: [TestTree]
 tests = [
-    testCase "Parsing" testSearchParser
+    testCase "Parsing" testSearchParser,
+    testCase "FileInfo" testFileInfo
     ]
 
 main :: IO ()
