diff --git a/README.markdown b/README.markdown
--- a/README.markdown
+++ b/README.markdown
@@ -64,8 +64,8 @@
 ```
 
 [Rattletrap]: https://github.com/tfausak/rattletrap
-[Version badge]: https://img.shields.io/hackage/v/rattletrap.svg
-[version]: https://hackage.haskell.org/package/rattletrap
+[Version badge]: https://www.stackage.org/package/rattletrap/badge/nightly?label=version
+[version]: https://www.stackage.org/nightly/package/rattletrap
 [Windows build badge]: https://ci.appveyor.com/api/projects/status/github/tfausak/rattletrap?branch=master&svg=true
 [windows build]: https://ci.appveyor.com/project/TaylorFausak/rattletrap
 [Build badge]: https://travis-ci.org/tfausak/rattletrap.svg?branch=master
diff --git a/executable/Main.hs b/executable/Main.hs
--- a/executable/Main.hs
+++ b/executable/Main.hs
@@ -68,6 +68,7 @@
     , ''Cache
     , ''CamSettingsAttributeValue
     , ''ClassMapping
+    , ''ClubColorsAttributeValue
     , ''CompressedWord
     , ''CompressedWordVector
     , ''Content
diff --git a/library/Rattletrap/AttributeValue.hs b/library/Rattletrap/AttributeValue.hs
--- a/library/Rattletrap/AttributeValue.hs
+++ b/library/Rattletrap/AttributeValue.hs
@@ -6,6 +6,7 @@
 import Rattletrap.AttributeValue.Boolean as Export
 import Rattletrap.AttributeValue.Byte as Export
 import Rattletrap.AttributeValue.CamSettings as Export
+import Rattletrap.AttributeValue.ClubColors as Export
 import Rattletrap.AttributeValue.Demolish as Export
 import Rattletrap.AttributeValue.Enum as Export
 import Rattletrap.AttributeValue.Explosion as Export
@@ -42,6 +43,7 @@
   = BooleanAttribute BooleanAttributeValue
   | ByteAttribute ByteAttributeValue
   | CamSettingsAttribute CamSettingsAttributeValue
+  | ClubColorsAttribute ClubColorsAttributeValue
   | DemolishAttribute DemolishAttributeValue
   | EnumAttribute EnumAttributeValue
   | ExplosionAttribute ExplosionAttributeValue
@@ -81,6 +83,9 @@
         AVCamSettings -> do
           x <- getCamSettingsAttributeValue
           pure (CamSettingsAttribute x)
+        AVClubColors -> do
+          x <- getClubColorsAttributeValue
+          pure (ClubColorsAttribute x)
         AVDemolish -> do
           x <- getDemolishAttributeValue
           pure (DemolishAttribute x)
@@ -162,6 +167,7 @@
     BooleanAttribute x -> putBooleanAttributeValue x
     ByteAttribute x -> putByteAttributeValue x
     CamSettingsAttribute x -> putCamSettingsAttributeValue x
+    ClubColorsAttribute x -> putClubColorsAttributeValue x
     DemolishAttribute x -> putDemolishAttributeValue x
     EnumAttribute x -> putEnumAttributeValue x
     ExplosionAttribute x -> putExplosionAttributeValue x
diff --git a/library/Rattletrap/AttributeValue/ClubColors.hs b/library/Rattletrap/AttributeValue/ClubColors.hs
new file mode 100644
--- /dev/null
+++ b/library/Rattletrap/AttributeValue/ClubColors.hs
@@ -0,0 +1,29 @@
+module Rattletrap.AttributeValue.ClubColors where
+
+import Rattletrap.Word8
+
+import qualified Data.Binary.Bits.Get as BinaryBit
+import qualified Data.Binary.Bits.Put as BinaryBit
+
+data ClubColorsAttributeValue = ClubColorsAttributeValue
+  { clubColorsAttributeValueBlueFlag :: Bool
+  , clubColorsAttributeValueBlueColor :: Word8
+  , clubColorsAttributeValueOrangeFlag :: Bool
+  , clubColorsAttributeValueOrangeColor :: Word8
+  } deriving (Eq, Ord, Show)
+
+getClubColorsAttributeValue :: BinaryBit.BitGet ClubColorsAttributeValue
+getClubColorsAttributeValue = do
+  blueFlag <- BinaryBit.getBool
+  blueColor <- getWord8Bits
+  orangeFlag <- BinaryBit.getBool
+  orangeColor <- getWord8Bits
+  pure (ClubColorsAttributeValue blueFlag blueColor orangeFlag orangeColor)
+
+putClubColorsAttributeValue :: ClubColorsAttributeValue -> BinaryBit.BitPut ()
+putClubColorsAttributeValue clubColorsAttributeValue = do
+  BinaryBit.putBool (clubColorsAttributeValueBlueFlag clubColorsAttributeValue)
+  putWord8Bits (clubColorsAttributeValueBlueColor clubColorsAttributeValue)
+  BinaryBit.putBool
+    (clubColorsAttributeValueOrangeFlag clubColorsAttributeValue)
+  putWord8Bits (clubColorsAttributeValueOrangeColor clubColorsAttributeValue)
diff --git a/library/Rattletrap/AttributeValueType.hs b/library/Rattletrap/AttributeValueType.hs
--- a/library/Rattletrap/AttributeValueType.hs
+++ b/library/Rattletrap/AttributeValueType.hs
@@ -4,6 +4,7 @@
   = AVBoolean
   | AVByte
   | AVCamSettings
+  | AVClubColors
   | AVDemolish
   | AVEnum
   | AVExplosion
diff --git a/library/Rattletrap/Data.hs b/library/Rattletrap/Data.hs
--- a/library/Rattletrap/Data.hs
+++ b/library/Rattletrap/Data.hs
@@ -112,6 +112,7 @@
   , ("Archetypes.GameEvent.GameEvent_Basketball", "TAGame.GameEvent_Soccar_TA")
   , ("Archetypes.GameEvent.GameEvent_BasketballPrivate", "TAGame.GameEvent_SoccarPrivate_TA")
   , ("Archetypes.GameEvent.GameEvent_BasketballSplitscreen", "TAGame.GameEvent_SoccarSplitscreen_TA")
+  , ("Archetypes.GameEvent.GameEvent_Hockey", "TAGame.GameEvent_Soccar_TA")
   , ("Archetypes.GameEvent.GameEvent_HockeyPrivate", "TAGame.GameEvent_SoccarPrivate_TA")
   , ("Archetypes.GameEvent.GameEvent_HockeySplitscreen", "TAGame.GameEvent_SoccarSplitscreen_TA")
   , ("Archetypes.GameEvent.GameEvent_Items", "TAGame.GameEvent_Soccar_TA")
@@ -205,6 +206,7 @@
   , ("TAGame.Car_TA:AddedBallForceMultiplier", AVFloat)
   , ("TAGame.Car_TA:AddedCarForceMultiplier", AVFloat)
   , ("TAGame.Car_TA:AttachedPickup", AVFlaggedInt)
+  , ("TAGame.Car_TA:ClubColors", AVClubColors)
   , ("TAGame.Car_TA:ReplicatedDemolish", AVDemolish)
   , ("TAGame.Car_TA:TeamPaint", AVTeamPaint)
   , ("TAGame.CrowdActor_TA:GameEvent", AVFlaggedInt)
@@ -269,6 +271,7 @@
   , ("TAGame.SpecialPickup_BallVelcro_TA:bHit", AVBoolean)
   , ("TAGame.SpecialPickup_Targeted_TA:Targeted", AVFlaggedInt)
   , ("TAGame.Team_Soccar_TA:GameScore", AVInt)
+  , ("TAGame.Team_TA:ClubColors", AVClubColors)
   , ("TAGame.Team_TA:CustomTeamName", AVString)
   , ("TAGame.Team_TA:GameEvent", AVFlaggedInt)
   , ("TAGame.Team_TA:LogoData", AVFlaggedInt)
diff --git a/library/Rattletrap/ReplicationValue/Spawned.hs b/library/Rattletrap/ReplicationValue/Spawned.hs
--- a/library/Rattletrap/ReplicationValue/Spawned.hs
+++ b/library/Rattletrap/ReplicationValue/Spawned.hs
@@ -4,6 +4,7 @@
 import Rattletrap.ClassAttributeMap
 import Rattletrap.CompressedWord
 import Rattletrap.Initialization
+import Rattletrap.Text
 import Rattletrap.Word32
 
 import qualified Data.Binary.Bits.Get as BinaryBit
@@ -12,6 +13,8 @@
 data SpawnedReplicationValue = SpawnedReplicationValue
   { spawnedReplicationValueFlag :: Bool
   , spawnedReplicationValueObjectId :: Word32
+  , spawnedReplicationValue_objectName :: String
+  , spawnedReplicationValue_className :: String
   , spawnedReplicationValueInitialization :: Initialization
   } deriving (Eq, Ord, Show)
 
@@ -35,7 +38,13 @@
           let hasRotation = classHasRotation className
           initialization <- getInitialization hasLocation hasRotation
           pure
-            (SpawnedReplicationValue flag objectId initialization, newActorMap)
+            ( SpawnedReplicationValue
+                flag
+                objectId
+                (textToString objectName)
+                (textToString className)
+                initialization
+            , newActorMap)
 
 putSpawnedReplicationValue :: SpawnedReplicationValue -> BinaryBit.BitPut ()
 putSpawnedReplicationValue spawnedReplicationValue = do
diff --git a/rattletrap.cabal b/rattletrap.cabal
--- a/rattletrap.cabal
+++ b/rattletrap.cabal
@@ -3,7 +3,7 @@
 -- see: https://github.com/sol/hpack
 
 name:           rattletrap
-version:        0.1.6
+version:        0.1.7
 synopsis:       Parse and generate Rocket League replays.
 description:    Rattletrap parses and generates Rocket League replays.
 category:       Game
@@ -20,6 +20,7 @@
     README.markdown
     test/replays/00080014003600090000036E0F65CCEB.replay
     test/replays/07E925B1423653D44CB8B4B2524792C1.replay
+    test/replays/0AD21FEE4A512906BEB6C98136AAF49A.replay
     test/replays/1205D96C4D819800927791820096CD49.replay
     test/replays/160CA83E41083BFD8E6315B4BFCA0561.replay
     test/replays/18D6738D415B70B5BE4C299588D3C141.replay
@@ -27,14 +28,14 @@
     test/replays/1BC2D01444ACE577D01E988EADD4DFD0.replay
     test/replays/1D1DE97D4941C86E43FE0093563DB621.replay
     test/replays/1EF90FCC4F719F606A5327B3CDD782A4.replay
+    test/replays/1F3798E540B0C37A946561ABBB3037F9.replay
     test/replays/211466D04B983F5A33CC2FA1D5928672.replay
     test/replays/22BACD794ABE7B92E50E9CBDBD9C59CE.replay
+    test/replays/27B6A7B64553F0F685874584F96BAB1B.replay
     test/replays/29F582C34A65EB34D358A784CBE3C189.replay
-    test/replays/2F817C8C44859C762980AE85B1862A31.replay
     test/replays/372DBFCA4BDB340E4357B6BD43032802.replay
     test/replays/387F059C47C09E253C875CA990EFD9F2.replay
     test/replays/3EA147DD485B8DD24810689A7A989E44.replay
-    test/replays/40D831074157F4C843EA6CBFE0A88140.replay
     test/replays/4126861E477F4A03DE2A4080374D7908.replay
     test/replays/42F0D8DA4FC89AE7B80FCAB7F637A8EA.replay
     test/replays/504ED825482186E771FAA9B642CE5CE4.replay
@@ -43,26 +44,27 @@
     test/replays/551CA4D44FF2B86015DE44A6B5790D4C.replay
     test/replays/6688EEE34BFEB3EC3A9E3283098CC712.replay
     test/replays/6D1B06D844A5BB91B81FD4B5B28F08BA.replay
+    test/replays/6F7CFCD24638F8A6567AB3A8B9958A90.replay
     test/replays/7109EB9846D303E54B7ACBA792036213.replay
     test/replays/7BF6073F4614CE0A438994B9A260DA6A.replay
     test/replays/89CBA30E46FA5385BDD35DA4285D4D2E.replay
+    test/replays/9704208245D7DD851F2FB2BC7DFD9AC3.replay
+    test/replays/98E58A904D713F2DE202358E8573265D.replay
     test/replays/A128B3AB45D5A18E3EF9CF93C9576BCE.replay
     test/replays/A52F804845573D8DA65E97BF59026A43.replay
     test/replays/A6711CE74272B2E663DCC9A200A218E3.replay
     test/replays/A7F001A1417A19BFA8C90990D8F7C2FF.replay
     test/replays/B82DDB624C393A4A425E68AB40DC2450.replay
-    test/replays/B9318ACC47A5A8C12901F3B0A512CA58.replay
     test/replays/B9F9B87D4A9D0A3D25D4EC91C0401DE2.replay
     test/replays/C14F7E0E4D9B5E6BE9AD5D8ED56B174C.replay
-    test/replays/C375E0EC4971B506C51678B465D35AE9.replay
-    test/replays/C80A9959479CFE51673B3A889D717554.replay
     test/replays/C8372B1345B1803DEF039F815DBD802D.replay
-    test/replays/CB5B422A4424262B2877E9A121329EF2.replay
     test/replays/D428F81646A98C25902CE988AE5C14C8.replay
     test/replays/D7FB197A451D69075A0C99A2F49A4053.replay
     test/replays/DCB3A6B94A9DBE46FDE5EAA9B012F6C8.replay
     test/replays/EAE311E84BA35B590A6FDBA6DD4F2FEB.replay
+    test/replays/EAE8DADA4BB2DC5422792C9B4A67392D.replay
     test/replays/F299F176491554B11E34AB91CA76B2CE.replay
+    test/replays/F7B9E14545C7467B89A00895980FCD73.replay
     test/replays/F811C1D24888015E23B598AD8628C742.replay
     test/replays/FDC79DA84DD463D4BCCE6B892829AC88.replay
 
@@ -95,6 +97,7 @@
       Rattletrap.AttributeValue.Boolean
       Rattletrap.AttributeValue.Byte
       Rattletrap.AttributeValue.CamSettings
+      Rattletrap.AttributeValue.ClubColors
       Rattletrap.AttributeValue.Demolish
       Rattletrap.AttributeValue.Enum
       Rattletrap.AttributeValue.Explosion
diff --git a/test/Test.hs b/test/Test.hs
--- a/test/Test.hs
+++ b/test/Test.hs
@@ -12,7 +12,7 @@
 
 main :: IO ()
 main = do
-  tests <- Hspec.testSpec "rattletrap" (Hspec.parallel spec)
+  tests <- Hspec.testSpec "rattletrap" spec
   Tasty.defaultMain tests
 
 spec :: Hspec.Spec
@@ -42,6 +42,7 @@
 replays =
   [ ("00080014003600090000036E0F65CCEB", "a flip time")
   , ("07E925B1423653D44CB8B4B2524792C1", "a game mode before Neo Tokyo")
+  , ("0AD21FEE4A512906BEB6C98136AAF49A", "some Latin-1 text")
   , ("1205D96C4D819800927791820096CD49", "rumble mode")
   , ("160CA83E41083BFD8E6315B4BFCA0561", "a dedicated server IP")
   , ("18D6738D415B70B5BE4C299588D3C141", "an online loadout attribute")
@@ -49,14 +50,14 @@
   , ("1BC2D01444ACE577D01E988EADD4DFD0", "no padding after the frames")
   , ("1D1DE97D4941C86E43FE0093563DB621", "a camera pitch")
   , ("1EF90FCC4F719F606A5327B3CDD782A4", "a private hoops match")
+  , ("1F3798E540B0C37A946561ABBB3037F9", "splitscreen players")
   , ("211466D04B983F5A33CC2FA1D5928672", "a match save")
   , ("22BACD794ABE7B92E50E9CBDBD9C59CE", "a vote to forfeit")
+  , ("27B6A7B64553F0F685874584F96BAB1B", "some UTF-16 text")
   , ("29F582C34A65EB34D358A784CBE3C189", "frames")
-  , ("2F817C8C44859C762980AE85B1862A31", "splitscreen players")
   , ("372DBFCA4BDB340E4357B6BD43032802", "a camera yaw attribute")
   , ("387F059C47C09E253C875CA990EFD9F2", "a frozen attribute")
   , ("3EA147DD485B8DD24810689A7A989E44", "a custom team name")
-  , ("40D831074157F4C843EA6CBFE0A88140", "a batarang")
   , ("4126861E477F4A03DE2A4080374D7908", "a game mode after Neo Tokyo")
   , ("42F0D8DA4FC89AE7B80FCAB7F637A8EA", "reservations after Neo Tokyo")
   , ("504ED825482186E771FAA9B642CE5CE4", "some messages")
@@ -65,26 +66,27 @@
   , ("551CA4D44FF2B86015DE44A6B5790D4C", "private match settings")
   , ("6688EEE34BFEB3EC3A9E3283098CC712", "a malformed byte property")
   , ("6D1B06D844A5BB91B81FD4B5B28F08BA", "a flip right")
+  , ("6F7CFCD24638F8A6567AB3A8B9958A90", "a map with numbers")
   , ("7109EB9846D303E54B7ACBA792036213", "a boost modifier")
   , ("7BF6073F4614CE0A438994B9A260DA6A", "an online loadouts attribute")
   , ("89CBA30E46FA5385BDD35DA4285D4D2E", "remote user data")
+  , ("9704208245D7DD851F2FB2BC7DFD9AC3", "a batarang")
+  , ("98E58A904D713F2DE202358E8573265D", "a player using behind view")
   , ("A128B3AB45D5A18E3EF9CF93C9576BCE", "a round count down")
   , ("A52F804845573D8DA65E97BF59026A43", "some more mutators")
   , ("A6711CE74272B2E663DCC9A200A218E3", "a waiting player")
   , ("A7F001A1417A19BFA8C90990D8F7C2FF", "a ready attribute")
   , ("B82DDB624C393A4A425E68AB40DC2450", "a vote actor and trailing bits")
-  , ("B9318ACC47A5A8C12901F3B0A512CA58", "a map with numbers")
   , ("B9F9B87D4A9D0A3D25D4EC91C0401DE2", "a party leader")
   , ("C14F7E0E4D9B5E6BE9AD5D8ED56B174C", "some mutators")
-  , ("C375E0EC4971B506C51678B465D35AE9", "some UTF-16 text")
-  , ("C80A9959479CFE51673B3A889D717554", "some Latin-1 text")
   , ("C8372B1345B1803DEF039F815DBD802D", "a spectator")
-  , ("CB5B422A4424262B2877E9A121329EF2", "a player using behind view")
   , ("D428F81646A98C25902CE988AE5C14C8", "a private hockey match")
   , ("D7FB197A451D69075A0C99A2F49A4053", "an explosion attribute")
   , ("DCB3A6B94A9DBE46FDE5EAA9B012F6C8", "a pawn type attribute")
   , ("EAE311E84BA35B590A6FDBA6DD4F2FEB", "an actor/object ID collision")
+  , ("EAE8DADA4BB2DC5422792C9B4A67392D", "custom team colors")
   , ("F299F176491554B11E34AB91CA76B2CE", "a location attribute")
+  , ("F7B9E14545C7467B89A00895980FCD73", "a hockey game event")
   , ("F811C1D24888015E23B598AD8628C742", "no frames")
   , ("FDC79DA84DD463D4BCCE6B892829AC88", "an MVP")
   ]
diff --git a/test/replays/0AD21FEE4A512906BEB6C98136AAF49A.replay b/test/replays/0AD21FEE4A512906BEB6C98136AAF49A.replay
new file mode 100644
Binary files /dev/null and b/test/replays/0AD21FEE4A512906BEB6C98136AAF49A.replay differ
diff --git a/test/replays/1F3798E540B0C37A946561ABBB3037F9.replay b/test/replays/1F3798E540B0C37A946561ABBB3037F9.replay
new file mode 100644
Binary files /dev/null and b/test/replays/1F3798E540B0C37A946561ABBB3037F9.replay differ
diff --git a/test/replays/27B6A7B64553F0F685874584F96BAB1B.replay b/test/replays/27B6A7B64553F0F685874584F96BAB1B.replay
new file mode 100644
Binary files /dev/null and b/test/replays/27B6A7B64553F0F685874584F96BAB1B.replay differ
diff --git a/test/replays/2F817C8C44859C762980AE85B1862A31.replay b/test/replays/2F817C8C44859C762980AE85B1862A31.replay
deleted file mode 100644
Binary files a/test/replays/2F817C8C44859C762980AE85B1862A31.replay and /dev/null differ
diff --git a/test/replays/40D831074157F4C843EA6CBFE0A88140.replay b/test/replays/40D831074157F4C843EA6CBFE0A88140.replay
deleted file mode 100644
Binary files a/test/replays/40D831074157F4C843EA6CBFE0A88140.replay and /dev/null differ
diff --git a/test/replays/6F7CFCD24638F8A6567AB3A8B9958A90.replay b/test/replays/6F7CFCD24638F8A6567AB3A8B9958A90.replay
new file mode 100644
Binary files /dev/null and b/test/replays/6F7CFCD24638F8A6567AB3A8B9958A90.replay differ
diff --git a/test/replays/9704208245D7DD851F2FB2BC7DFD9AC3.replay b/test/replays/9704208245D7DD851F2FB2BC7DFD9AC3.replay
new file mode 100644
Binary files /dev/null and b/test/replays/9704208245D7DD851F2FB2BC7DFD9AC3.replay differ
diff --git a/test/replays/98E58A904D713F2DE202358E8573265D.replay b/test/replays/98E58A904D713F2DE202358E8573265D.replay
new file mode 100644
Binary files /dev/null and b/test/replays/98E58A904D713F2DE202358E8573265D.replay differ
diff --git a/test/replays/B9318ACC47A5A8C12901F3B0A512CA58.replay b/test/replays/B9318ACC47A5A8C12901F3B0A512CA58.replay
deleted file mode 100644
Binary files a/test/replays/B9318ACC47A5A8C12901F3B0A512CA58.replay and /dev/null differ
diff --git a/test/replays/C375E0EC4971B506C51678B465D35AE9.replay b/test/replays/C375E0EC4971B506C51678B465D35AE9.replay
deleted file mode 100644
Binary files a/test/replays/C375E0EC4971B506C51678B465D35AE9.replay and /dev/null differ
diff --git a/test/replays/C80A9959479CFE51673B3A889D717554.replay b/test/replays/C80A9959479CFE51673B3A889D717554.replay
deleted file mode 100644
Binary files a/test/replays/C80A9959479CFE51673B3A889D717554.replay and /dev/null differ
diff --git a/test/replays/CB5B422A4424262B2877E9A121329EF2.replay b/test/replays/CB5B422A4424262B2877E9A121329EF2.replay
deleted file mode 100644
Binary files a/test/replays/CB5B422A4424262B2877E9A121329EF2.replay and /dev/null differ
diff --git a/test/replays/EAE8DADA4BB2DC5422792C9B4A67392D.replay b/test/replays/EAE8DADA4BB2DC5422792C9B4A67392D.replay
new file mode 100644
Binary files /dev/null and b/test/replays/EAE8DADA4BB2DC5422792C9B4A67392D.replay differ
diff --git a/test/replays/F7B9E14545C7467B89A00895980FCD73.replay b/test/replays/F7B9E14545C7467B89A00895980FCD73.replay
new file mode 100644
Binary files /dev/null and b/test/replays/F7B9E14545C7467B89A00895980FCD73.replay differ
