diff --git a/library/Rattletrap/Attribute/ExtendedExplosion.hs b/library/Rattletrap/Attribute/ExtendedExplosion.hs
new file mode 100644
--- /dev/null
+++ b/library/Rattletrap/Attribute/ExtendedExplosion.hs
@@ -0,0 +1,22 @@
+module Rattletrap.Attribute.ExtendedExplosion where
+
+import Rattletrap.Primitive
+
+import qualified Control.Monad as Monad
+import qualified Data.Binary.Bits.Get as BinaryBit
+import qualified Data.Binary.Bits.Put as BinaryBit
+
+newtype ExtendedExplosionAttribute = ExtendedExplosionAttribute
+  { extendedExplosionAttributeUnknown :: [Word8]
+  -- ^ Warning: This field should be considered experimental and could change
+  -- at any time!
+  } deriving (Eq, Ord, Show)
+
+getExtendedExplosionAttribute :: BinaryBit.BitGet ExtendedExplosionAttribute
+getExtendedExplosionAttribute = do
+  unknown <- Monad.replicateM 14 getWord8Bits
+  pure (ExtendedExplosionAttribute unknown)
+
+putExtendedExplosionAttribute :: ExtendedExplosionAttribute -> BinaryBit.BitPut ()
+putExtendedExplosionAttribute extendedExplosionAttribute = do
+  mapM_ putWord8Bits (extendedExplosionAttributeUnknown extendedExplosionAttribute)
diff --git a/library/Rattletrap/Attribute/LoadoutOnline.hs b/library/Rattletrap/Attribute/LoadoutOnline.hs
--- a/library/Rattletrap/Attribute/LoadoutOnline.hs
+++ b/library/Rattletrap/Attribute/LoadoutOnline.hs
@@ -10,30 +10,32 @@
   { loadoutAttributeValue :: [[(Word32, CompressedWord)]]
   } deriving (Eq, Ord, Show)
 
-getLoadoutOnlineAttribute :: BinaryBit.BitGet LoadoutOnlineAttribute
-getLoadoutOnlineAttribute = do
+getLoadoutOnlineAttribute ::
+     (Int, Int) -> BinaryBit.BitGet LoadoutOnlineAttribute
+getLoadoutOnlineAttribute (major, minor) = do
+  let getOuter = do
+        innerSize <- getWord8Bits
+        Monad.replicateM (fromIntegral (word8Value innerSize)) getInner
+      getInner = do
+        x <- getWord32Bits
+        y <- getCompressedWord limit
+        pure (x, y)
+      limit =
+        if major >= 868 && minor >= 18
+          then 2 ^ (32 :: Int)
+          else 27
   size <- getWord8Bits
-  values <-
-    Monad.replicateM
-      (fromIntegral (word8Value size))
-      (do innerSize <- getWord8Bits
-          Monad.replicateM
-            (fromIntegral (word8Value innerSize))
-            (do x <- getWord32Bits
-                y <- getCompressedWord 27
-                pure (x, y)))
+  values <- Monad.replicateM (fromIntegral (word8Value size)) getOuter
   pure (LoadoutOnlineAttribute values)
 
 putLoadoutOnlineAttribute :: LoadoutOnlineAttribute -> BinaryBit.BitPut ()
 putLoadoutOnlineAttribute loadoutAttribute = do
-  let values = loadoutAttributeValue loadoutAttribute
-  putWord8Bits (Word8 (fromIntegral (length values)))
-  mapM_
-    (\xs -> do
-       putWord8Bits (Word8 (fromIntegral (length xs)))
-       mapM_
-         (\(x, y) -> do
-            putWord32Bits x
-            putCompressedWord y)
-         xs)
-    values
+  let putOuter xs = do
+        putWord8Bits (Word8 (fromIntegral (length xs)))
+        mapM_ putInner xs
+      putInner (x, y) = do
+        putWord32Bits x
+        putCompressedWord y
+      value = loadoutAttributeValue loadoutAttribute
+  putWord8Bits (Word8 (fromIntegral (length value)))
+  mapM_ putOuter value
diff --git a/library/Rattletrap/Attribute/LoadoutsOnline.hs b/library/Rattletrap/Attribute/LoadoutsOnline.hs
--- a/library/Rattletrap/Attribute/LoadoutsOnline.hs
+++ b/library/Rattletrap/Attribute/LoadoutsOnline.hs
@@ -12,10 +12,10 @@
   , loadoutsOnlineAttributeUnknown2 :: Bool
   } deriving (Eq, Ord, Show)
 
-getLoadoutsOnlineAttribute :: BinaryBit.BitGet LoadoutsOnlineAttribute
-getLoadoutsOnlineAttribute = do
-  blueLoadout <- getLoadoutOnlineAttribute
-  orangeLoadout <- getLoadoutOnlineAttribute
+getLoadoutsOnlineAttribute :: (Int, Int) -> BinaryBit.BitGet LoadoutsOnlineAttribute
+getLoadoutsOnlineAttribute version = do
+  blueLoadout <- getLoadoutOnlineAttribute version
+  orangeLoadout <- getLoadoutOnlineAttribute version
   unknown1 <- BinaryBit.getBool
   unknown2 <- BinaryBit.getBool
   pure (LoadoutsOnlineAttribute blueLoadout orangeLoadout unknown1 unknown2)
diff --git a/library/Rattletrap/AttributeType.hs b/library/Rattletrap/AttributeType.hs
--- a/library/Rattletrap/AttributeType.hs
+++ b/library/Rattletrap/AttributeType.hs
@@ -10,6 +10,7 @@
   | DemolishAttributeType
   | EnumAttributeType
   | ExplosionAttributeType
+  | ExtendedExplosionAttributeType
   | FlaggedIntAttributeType
   | FloatAttributeType
   | GameModeAttributeType
diff --git a/library/Rattletrap/AttributeValue.hs b/library/Rattletrap/AttributeValue.hs
--- a/library/Rattletrap/AttributeValue.hs
+++ b/library/Rattletrap/AttributeValue.hs
@@ -9,6 +9,7 @@
   , module Rattletrap.Attribute.Demolish
   , module Rattletrap.Attribute.Enum
   , module Rattletrap.Attribute.Explosion
+  , module Rattletrap.Attribute.ExtendedExplosion
   , module Rattletrap.Attribute.FlaggedInt
   , module Rattletrap.Attribute.Float
   , module Rattletrap.Attribute.GameMode
@@ -40,6 +41,7 @@
 import Rattletrap.Attribute.Demolish
 import Rattletrap.Attribute.Enum
 import Rattletrap.Attribute.Explosion
+import Rattletrap.Attribute.ExtendedExplosion
 import Rattletrap.Attribute.FlaggedInt
 import Rattletrap.Attribute.Float
 import Rattletrap.Attribute.GameMode
@@ -78,6 +80,7 @@
   | DemolishAttributeValue DemolishAttribute
   | EnumAttributeValue EnumAttribute
   | ExplosionAttributeValue ExplosionAttribute
+  | ExtendedExplosionAttributeValue ExtendedExplosionAttribute
   | FlaggedIntAttributeValue FlaggedIntAttribute
   | FloatAttributeValue FloatAttribute
   | GameModeAttributeValue GameModeAttribute
@@ -132,6 +135,9 @@
         ExplosionAttributeType -> do
           x <- getExplosionAttribute
           pure (ExplosionAttributeValue x)
+        ExtendedExplosionAttributeType -> do
+          x <- getExtendedExplosionAttribute
+          pure (ExtendedExplosionAttributeValue x)
         FlaggedIntAttributeType -> do
           x <- getFlaggedIntAttribute
           pure (FlaggedIntAttributeValue x)
@@ -148,13 +154,13 @@
           x <- getLoadoutAttribute
           pure (LoadoutAttributeValue x)
         LoadoutOnlineAttributeType -> do
-          x <- getLoadoutOnlineAttribute
+          x <- getLoadoutOnlineAttribute version
           pure (LoadoutOnlineAttributeValue x)
         LoadoutsAttributeType -> do
           x <- getLoadoutsAttribute
           pure (LoadoutsAttributeValue x)
         LoadoutsOnlineAttributeType -> do
-          x <- getLoadoutsOnlineAttribute
+          x <- getLoadoutsOnlineAttribute version
           pure (LoadoutsOnlineAttributeValue x)
         LocationAttributeType -> do
           x <- getLocationAttribute
@@ -209,6 +215,7 @@
     DemolishAttributeValue x -> putDemolishAttribute x
     EnumAttributeValue x -> putEnumAttribute x
     ExplosionAttributeValue x -> putExplosionAttribute x
+    ExtendedExplosionAttributeValue x -> putExtendedExplosionAttribute x
     FlaggedIntAttributeValue x -> putFlaggedIntAttribute x
     FloatAttributeValue x -> putFloatAttribute x
     GameModeAttributeValue x -> putGameModeAttribute x
diff --git a/library/Rattletrap/Data.hs b/library/Rattletrap/Data.hs
--- a/library/Rattletrap/Data.hs
+++ b/library/Rattletrap/Data.hs
@@ -191,6 +191,7 @@
   , ("TAGame.Ball_TA:ReplicatedBallMaxLinearSpeedScale", FloatAttributeType)
   , ("TAGame.Ball_TA:ReplicatedBallScale", FloatAttributeType)
   , ("TAGame.Ball_TA:ReplicatedExplosionData", ExplosionAttributeType)
+  , ("TAGame.Ball_TA:ReplicatedExplosionDataExtended", ExtendedExplosionAttributeType)
   , ("TAGame.Ball_TA:ReplicatedWorldBounceScale", FloatAttributeType)
   , ("TAGame.BreakOutActor_Platform_TA:DamageState", DamageStateAttributeType)
   , ("TAGame.CameraSettingsActor_TA:bUsingBehindView", BooleanAttributeType)
diff --git a/library/Rattletrap/Json.hs b/library/Rattletrap/Json.hs
--- a/library/Rattletrap/Json.hs
+++ b/library/Rattletrap/Json.hs
@@ -58,6 +58,7 @@
         , ''Dictionary
         , ''EnumAttribute
         , ''ExplosionAttribute
+        , ''ExtendedExplosionAttribute
         , ''FlaggedIntAttribute
         , ''Float32
         , ''FloatAttribute
diff --git a/package.yaml b/package.yaml
--- a/package.yaml
+++ b/package.yaml
@@ -57,4 +57,4 @@
     - -with-rtsopts=-N
     main: Main.hs
     source-dirs: tests
-version: '2.3.1'
+version: '2.4.0'
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:        2.3.1
+version:        2.4.0
 synopsis:       Parse and generate Rocket League replays.
 description:    Rattletrap parses and generates Rocket League replays.
 category:       Game
@@ -54,10 +54,12 @@
     replays/7109EB9846D303E54B7ACBA792036213.replay
     replays/7BF6073F4614CE0A438994B9A260DA6A.replay
     replays/89CBA30E46FA5385BDD35DA4285D4D2E.replay
+    replays/8AE551FF406D7B82ED853B8C7BFF8CDA.replay
     replays/9704208245D7DD851F2FB2BC7DFD9AC3.replay
     replays/98E58A904D713F2DE202358E8573265D.replay
     replays/A128B3AB45D5A18E3EF9CF93C9576BCE.replay
     replays/A52F804845573D8DA65E97BF59026A43.replay
+    replays/A558B1B44124D6E021640884E8EEC2A7.replay
     replays/A6711CE74272B2E663DCC9A200A218E3.replay
     replays/A7F001A1417A19BFA8C90990D8F7C2FF.replay
     replays/B9F9B87D4A9D0A3D25D4EC91C0401DE2.replay
@@ -111,6 +113,7 @@
       Rattletrap.Attribute.Demolish
       Rattletrap.Attribute.Enum
       Rattletrap.Attribute.Explosion
+      Rattletrap.Attribute.ExtendedExplosion
       Rattletrap.Attribute.FlaggedInt
       Rattletrap.Attribute.Float
       Rattletrap.Attribute.GameMode
diff --git a/replays/8AE551FF406D7B82ED853B8C7BFF8CDA.replay b/replays/8AE551FF406D7B82ED853B8C7BFF8CDA.replay
new file mode 100644
Binary files /dev/null and b/replays/8AE551FF406D7B82ED853B8C7BFF8CDA.replay differ
diff --git a/replays/A558B1B44124D6E021640884E8EEC2A7.replay b/replays/A558B1B44124D6E021640884E8EEC2A7.replay
new file mode 100644
Binary files /dev/null and b/replays/A558B1B44124D6E021640884E8EEC2A7.replay differ
diff --git a/tests/Main.hs b/tests/Main.hs
--- a/tests/Main.hs
+++ b/tests/Main.hs
@@ -75,10 +75,12 @@
   , ("7109EB9846D303E54B7ACBA792036213", "a boost modifier")
   , ("7BF6073F4614CE0A438994B9A260DA6A", "an online loadouts attribute")
   , ("89CBA30E46FA5385BDD35DA4285D4D2E", "remote user data")
+  , ("8AE551FF406D7B82ED853B8C7BFF8CDA", "new painted items")
   , ("9704208245D7DD851F2FB2BC7DFD9AC3", "a batarang")
   , ("98E58A904D713F2DE202358E8573265D", "a player using behind view")
   , ("A128B3AB45D5A18E3EF9CF93C9576BCE", "a round count down")
   , ("A52F804845573D8DA65E97BF59026A43", "some more mutators")
+  , ("A558B1B44124D6E021640884E8EEC2A7", "extended explosion data")
   , ("A6711CE74272B2E663DCC9A200A218E3", "a waiting player")
   , ("A7F001A1417A19BFA8C90990D8F7C2FF", "a ready attribute")
   , ("B9F9B87D4A9D0A3D25D4EC91C0401DE2", "a party leader")
